「Django」1:建立项目
1. 建立虚拟环境
虚拟环境是系统的一个位置,可以在其中安装包,并将其与其他Python包隔离。将项目的库与其他项目分离是有益的,且为了后续将项目部署到服务器,这也是必须的。
1 | $ python -m venv ll_env |
运行了模块venv,并使用它来创建一个名为ll_env的虚拟环境。
建立虚拟环境后,需要使用下面的命令激活它:
1 | $ ll_env\Scripts\activate |
这个命令运行ll_env/bin中的脚本activate。环境处于活动状态时,环境名将包含在括号内。在这种情况下,你可以在环境中安装包,并使用已安装的包。你在ll_env中安装的包仅在该环境处于活动状态时才可用。
要停止使用虚拟环境,可执行命令deactivate:
1 | (ll_env)learning_log$ deactivate |
或关闭运行虚拟环境的终端,虚拟环境也将不再处于活动状态。
创建并激活虚拟环境后,就可安装Django了:
1 | (ll_env)learning_log$ pip install Django |
2. Django中创建项目
创建一个名为mysite
的项目:
1 | django-admin startproject mysite |
manage.py的文件接受命令并将其交给Django的相关部分去运行。我们将使用这些命令来管理诸如使用数据库和运行服务器等任务。python manage.py xxx
文件 settings.py
是配置文件。文件urls.py
是路由系统。文件wsgi.py
是web server gateway interface(Web服务器网关接口)
的缩写,用于定义Django用的socket。
初始运行:(默认8000端口)
1 | python manage.py runserver (127.0.0.1:8080) |
3. 配置
路径配置:
由于新增了templates目录存放模板,static_file目录存放静态文件(照片、css、js文件),需要对settings.py
作如下配置:
1 | STATIC_URL = '/static/' |
注释掉:(这一句是为防止跨站请求伪造,注释掉方便在多url之间跳转查看)
1 | 'django.middleware.csrf.CsrfViewMiddleware', |
csrf通过生成随机字符串来防止跨站请求伪造,若不注释掉,需要:
1 | <form method="POST" action="..."> |
来通过验证。若要局部禁用,让某些函数无需csrf验证,可以:
1 | from django.views.decorators.csrf import csrf_exempt |
局部使用,即csrf语句已经注释掉,
1 | from django.views.decorators.csrf import csrf_protect |
BASE_DIR
是当前基本路径。由于Django是根据路由寻找,而非根据路径寻找啊,因此在html
中引入css
文件时,应当引入的是其路由:
1 | <head lang="en"> |
路由:
访问 http://127.0.0.1:8000/login/ :
1 | ### urls.py ### |
url还可以用正则匹配:
1 | from django.urls import re_path |
反向生成url:
1 | # 给url指定一个别名 n1 |
请求相关信息
request.method
:获取请求方式request.GET
:获取请求头中url
中GET
请求传递的信息request.POST
:获取请求体信息(POST方式传递的数据)
传递信息
return HttpResponse("...")
:return render
(request, ‘模板路径’,{}):返回模板,参数为请求+模板名+模板渲染所需参数return redirect("URL")
:重定向,可以是路由也可以是要跳转的网址
视图:
有CBV(class basic views
)和FBV(function basic views
)
- CBV模式:
1 | # -- urls.py -- # |
对于每个class,都是先执行dispatch方法,通过dispatch里的getattr()
寻找函数,执行完毕后通过dispatch返回。因此可以通过修改dispatch
函数来实现装饰器效果。
1 | class Login(View): |
4. 模板引擎中的标记
1. 基础
1 | <!-- 变量 --> |
2. 母板继承
Django中可以使用模板继承。被继承的是母板。子板可以在母板设置的block中填充内容,并继承其他共同部分。
在母板中,一般至少有三个block:
1 | {% block css %} |
子板继承:
1 | {% extends "layout.html" %} |
3. 函数
.函数名
即可执行函数
- 遍历字典:
1 | {% for k,v in dict.items %} |
- 字母大写
1 | {{name|upper}} |
自定义函数:
在app中创建
templatetags
模块创建任意
.py
文件
1 | from django import template |
- 在使用自定义simple_tag的html文件中导入之前创建的
xx.py
文件名
1 | {% load xx %} |
- 使用
simple_tag
1 | {% my_simple_time 1 2 3%} |
- 在settings中配置当前app,不然django无法找到自定义的simple_tag
1 | INSTALLED_APPS = ( |