python_new
  • Introduction
  • First Chapter
  • 一、python基础
    • 1.1 常识
      • sys
    • 1.2 基础语法(1)
    • 1.2 基础语法(2)
    • 1.3 常见问题求解
    • 1.4 算法
  • 二、爬虫
    • urllib库(1)
      • urllib库(2)
    • requests模块(1)
      • requests模块(2)
    • 2.1 爬虫基础(3)HTTP原理
    • 2.1 爬虫基础(4)会话和Cookies
    • 2.1 爬虫基础(5)数据存储
      • Mysql存储
      • MongoDB存储
      • Redis存储
    • 2.3 正则表达式
    • 2.4 解析库lxml
      • BeautifulSoup
      • pyquery(1)
      • pyquery(2)
    • 2.5 selenium(1)
    • 2.5 seleium(2)
    • 2.6 Json
    • 2.7 scrapy
      • scrapy(2)
    • 2.9 异步加载
    • 2.6 Splash
  • ORM框架
    • SQLAlchemy
  • Django
    • 1、初阶(一)
    • 初学:投票教程(一)
    • 初学:投票教程(二)
    • 初学:投票教程(三)
    • 初学:投票教程(总结)
    • 模型(一)
    • 模型(二)
    • 视图(一)
    • 视图(二)
    • 模板(一)
    • django实际使用笔记
  • 面试题收集总结
    • 数据结构原理
    • 算法篇
      • 排序
    • 题目篇
  • python数据分析
    • 基础了解(一)
    • 基础了解(二)
    • 基础了解(三)
  • 多线程
  • 深度学习
    • 疑问
  • keras(一)
  • 神经网络
  • 图像识别
  • Docker
    • 一、基础了解
Powered by GitBook
On this page

Was this helpful?

  1. Django

1、初阶(一)

一、安装

pip install django

二、创建第一个django项目

在想要创建项目的目录下,按shift 右击空白处,打开命令窗口,

django-admin startproject Test

文件Test中创建好的目录如下

|-- Test
|   |-- __init__.py
|   |-- settings.py
|   |-- urls.py
|   `-- wsgi.py
`-- manage.py

各个文件的说明

urls.py   网址入口,关联到对应的view.py中的一个函数或(或者generic类),访问网址就对应一个函数
view.py   处理用户发出的请求,从urls.py,通过渲染templates中的网页可以将内容显示,比如登录胡后的用户名,用户请求的数据,输出到网页
models.py 与数据库操作有关,存入或读取数据时用到这个
forms.py  表单,用户在浏览器上输入数据提交,对数据的验证工作以及输入框的生成等工作
admin.py  后台
settings.py 配置文件,比如debug的开关,静态文件的位置等

三、创建一个应用(app)

1、新建一个名为learn的app

python manage.py startapp learn

之后,会在Test项目下多出一个文件夹,名称是learn

|-- learn
|   |-- __init__.py
|   |-- admin.py
|   |-- apps.py
|   |-- tests.py
|   |-- views.py
|   `-- models.py
`-- manage.py

然后修改Test文件夹中的settings.py文件

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'learn',
)

这一步的原因是django不能自动找到app中的模板文件(app-name/templates)和静态文件(app-name/static/中的文件)???

2、定义视图函数(访问页面时的内容)

修改views.py文件

from django.http import HttpResponse

# 接受请求
# 额,这是我之前长发的request请求?
def index(request):
    # 向网页返回内容
    return HttpResponse('Hello World!')

参数request很重要,与网页发来的请求有关,包含get或post的内容,用户浏览器系统信息在里面。

3、定义视图函数相关的URL

用以规定访问什么网页返回什么内容,修改urls.py

from django.contrib import admin
from django.urls import path 
from learn import views as learn_views 

urlpatterns = [path('', learn_views.index),
               path('admin/', admin.site.urls)]

上述步骤完成之后,执行以下命令

python manage.py runserver

结果如下

Performing system checks...

System check identified no issues (0 silenced).

You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
July 03, 2018 - 16:39:12
Django version 2.0.4, using settings 'Test.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
Hello World!

四、在网页上做加减法

1、采用/add/?a=4&b=5这样get方法进行

django-admin.py startproject zqxt_views
cd zqxt_views
python manage.py startapp calc

修改calc/views.py文件

from django.shortcuts import render
from django.http import HttpResponse

def add(request):
    a = request.GET['a']
    b = request.GET['b']
    c = int(a) + int(b)
    return HttpResponse(src(c))

request.GET 类似于一个字典,更好的办法是用 request.GET.get('a', 0) 当没有传递 a 的时候默认 a 为 0

接着修改zqxt_view/urls.py文件,添加一个网址来对应我们新建的视图函数。

from django.contrib import admin
from django.urls import path
from calc import views as calc_views

urlpatterns = [path('add/', calc_views.add, name='add'),
               path('admin/'), admin.site.urls]

打开服务器并访问,

python manage.py runserver 8002

结果如下

Performing system checks...

System check identified no issues (0 silenced).

You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
July 03, 2018 - 17:13:58
Django version 2.0.4, using settings 'zqxt_views.settings'
Starting development server at http://127.0.0.1:8002/
Quit the server with CTRL-BREAK.

2、采用/add/3/4的网址形式

修改calc/views/py 文件,定义一个新函数

def add2(request, a, b):
    c = int(a) + int(b)
    return HttpResponse(str(c))

然后在urls.py文件中添加一个新的url

path('add/<int:a>/<int:b>/', calc_views.add2, name = 'add2')

五、URL name详解

1、打开zqxt_views/urls.py

from django.conf.urls import url
from django.contrib import admin
from calc import views as calc_views

urlpatterns = [
    path('add/<int:a>/<int:b>/', calc_views.add2, name= 'add2'),
    path('add/', calc_views.add, name='add'),
    path('admin/', admin.site.urls),
]

name='add' : name可以用于在templates,models,views...中得到对应的网址

2、添加calc_views.py

from django.http import HttpResponse
from django.shortcuts import render

# 部分代码
def index(request):
    return render(request, 'home.html')

3、将‘calc’这个app加入到zqxt_views/setting.py中

4、在calc中新建一个templates文件夹,在templates中新建一个home.html,并写入内容

<!DOCTYPE html>
<html>
<head>
    <title>Hello World!</title>
</head>
<body>
    <a href='/add/4/5/'>计算 4+5</a>
</body>
</html>

修改zaxt_views/urls.py

# 部分代码
urlpatterns = [
    path('', calc_views.index, name='home'),
    path('add/<int:a>/<int:b>/', calc_views.add2, name= 'add2'),
    path('add/', calc_views.add, name='add'),
    path('admin/', admin.site.urls),
]

有时使用的规则是/add/4/5,后来需求发生变化,比如改成/4-add-5/(-代表'_',打不出来),但是在很多代码中都是根据/add/4/5,比如模板中写的是

为了避免修改一处而导致很多其他部分也要修改的情况,所以可以选择另外一些更好的方式,不过首先介绍如何将参数转换为url

python manage.py shell
from django.urls import reverse

reverse('add2', args=(4,5))
>>> '/add/4/5/'

reverse接收url中的name作为第一个参数,我们在代码中就可以通过 reverse() 来获取对应的网址(这个网址可以用来跳转,也可以用来计算相关页面的地址),只要对应的 url 的name不改,就不用改代码中的网址。

提取参数,做形式的转换?

在网页模板中

# 不带参数的:
# {% url 'name' %}
# 带参数的:参数可以是变量名
# {% url 'name' 参数 %}

# 例如:
<a href="{% url 'add2' 4 5 %}">link</a>
# 会变成
<a href="/add/4/5">link</a>

当修改urls.py 进行更改,前提是不改name,获取的网址也会动态的跟着变

path('new_add/<int:a>/<int:b>/', calc_views.add2, name='add2')

path是寻找网址对应的功能,当网址发生变化时,只需要修改path中的佩佩字段即可,这样add2的调用仍会返回正确的结果;但是home.html中的不能理解,调用html明明是index函数,href部分的参数何时传入的?

比如说收藏的url是旧的,如何跳转到新的网页?需要我们写一个跳转方法

首先在views.py中增加一个跳转方法

from django.http import HttpResponseRedirect
from django.urls import reverse

def old_add2_redirect(request, a, b):
    return HttpResponseRedirect(reverse('add2', args=(a, b)))

修改urls.py

parh('add/<int:a>/<int:b>/', calc_views.old_add2_redirect),
path('new_add/<int:a>/<int:b>/', calc_views.add2, name='add2')

我觉得上面这一部分讲得并不清楚,暂时搁置

PreviousDjangoNext初学:投票教程(一)

Last updated 6 years ago

Was this helpful?

如果打开 就可以看到

打开网页,会看到一个复杂的网页

然后打开,会得到计算的结果

接着打开网址,就可以得到跟之前一样的结果

http://127.0.0.1:8000/,
http://127.0.0.1:8002/add/
http://127.0.0.1:8002/add/?a=4&b=5
http://127.0.0.1:8002/add/4/5/