如需了完整内容请访问:https://www.emperinter.info/2022/05/31/django-view/
视图
概述
- 作用:
- 视图接受web请求,并响应Web请求
- 本质:
- 视图就是 一个Python中的函数
- 响应内容:
- 网页
- 重定向
- 错误视图
- 404:url找不到
- 500: 服务器内部错误
- JSON数据
- 网页
URL 配置
配置流程
- 在
settings.py
中指定根级URL配置文件:ROOT_URLCONF = 'project.urls'
,默认实现了。 -
urlpatterns
:- 一个url实例的对象
- url对象
- 正则表达式
- 视图名称
- 名称(用来反向解析的)
- url匹配正则的注意事项:
- 如果想要从url中获取一个值,需要对正则加小括号
- 匹配正确,前方不需要加小斜杠
/
,一般在最后加 - 正则前需要加
r
表示字符串不转义
引入其它url配置
- 一般在应用中创建
urls.py
文件,定义本应用的url配置,在工程urls.py
文件中使用include()
方法:url(r'^', include('myApp.urls',namespace='myApp')),
匹配过程
- 工程url->应用url->视图
URL的反向解析(代理):
- 概述
- 如果在视图/模板中使用了硬编码的连接,在url配置发生改变时,动态生成链接的地址。
- 解决思路
- 在使用链接时,通过url配置的名称,动态生成url地址。
- 作用
- 使用url模板的时候
视图函数
定义视图:
- 本质:一个函数
- 视图参数:
-
request
一个HttpRequest的实例 - 通过url正则表达式获取的参数
-
- 位置:
- 一般在
views.py
中定义
- 一般在
错误视图
- 404视图
- 找不到网页(url匹配不成功)时返回。
- 可以自己定义。
- 在
templates
下定义404.html
-
request_path
:导致出错的网址。
-
- 配置
settings.py
-
DEBUG
如果为True
永远不会调用404.html页面 ALLOWED_HOSTS = [*]
-
- 在
- 500视图
- 在视图代码中出现错误(服务器代码)。
- 400视图
- 错误是客户的操作。
HttpRequest对象
概念
- 接收HTTP请求后,会根据报文创建
HttpRequest
对象 - 视图的第一个参数就是
HttpRequest
对象 - Djano对象创建的,之后调用试图传递给视图
属性
-
path
- 请求的完整路径(不包括域名和端口)
-
method
- 表示请求的方式,常用的有GET、POST
-
encoding
- 表示浏览器提交的数据的编码方式,一般为
utf-8
- 表示浏览器提交的数据的编码方式,一般为
-
GET
- 类似字典的对象,包含了get请求的所有参数
-
POST
- 类似字典的对象,包含了post请求的所有参数
-
FILES
- 类似字典的对象,包含了所有上传的文件。
-
COOKIES
- 字典,包含所有的cookie
-
session
- 类似字典的对象,表示当前会话
方法
-
is_ajax()
- 如果是
XMLHttpRequest
发起的,返回True
- 如果是
QueryDict对象
- request对象中的GET、POST对象都属于QueryDict对象
- 方法
-
get()
- 作用:根据键获取值
- 只能获取一个值
www.baidu.com/abc?a=1&b=2&c=3
-
getlist()
- 将键的值以列表形式返回
- 可以获取多个值
-
www.baidu.com/abc?a=1&a=2&c=3
(注意有两个a)
-
GET属性
# 获取get传递的数据
def get1(request):
a = request.GET.get("a")
b = request.GET["b"]
c = request.GET.get("c")
return HttpResponse(a + " " + b + " " + c)
def get2(request):
a = request.GET.getlist('a')
a1 = a[0]
a2 = a[1]
b = request.GET.get('c')
return HttpResponse(a1 + " " + a2 + " " + b)
POST属性
- 使用表单模拟提交post请求
- 关闭
CSRF
:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
- test case
def showregister(request):
name = request.POST.get("username")
gender = request.POST.get("gender")
age = request.POST.get("age")
hobby = request.POST.getlist("hobby") # checkbox
info = str("name:\t" + name + "\tgender:" +gender + "\tage:" + age + "\thobby"+ str(hobby))
print(info)
return HttpResponse(info)
HttpResponse对象
如需了解更多请访问:https://www.emperinter.info/2022/05/31/django-view/