Django边学边记—视图
一、 url
(一)配置
- 在项目/settings.py中通过ROOT_URLCONF指定url配置
ROOT_URLCONF = 'XXXX.urls'
- 打开 项目/urls.py 配置
(二)语法
- 语法一:包含,将应用的urls配置到应用内部
- 语法二:定义,指定正则和视图的对应关系
-
url(正则,'视图名称')
(三)传参
- 一是在正则表达式中直接使用小括号分组,通过位置参数传递给视图
- 二是在正则表达式部分为组命名方式传参,?P部分的名称要与视图函数参数名相同
二、视图
(一)概念
- 视图就是python中的函数,一般被定义在“应用/views.py”文件中
- 视图的第一个参数必须为HttpRequest实例,还可能包含url中传进的参数
- 视图必须返回一个HttpResponse对象或子对象作为响应
(二)HttpReqeust对象的属性
- path:一个字符串,表示请求的页面的完整路径,不包含域名
- method:一个字符串,表示请求使用的HTTP方法,常用值包括:'GET'、'POST'
- 在浏览器中给出地址发出请求采用get方式,如超链接
- 在浏览器中点击表单的提交按钮发起请求,如果表单的method设置为post则为post请求
- encoding:一个字符串,表示提交的数据的编码方式
- 如果为None则表示使用浏览器的默认设置,一般为utf-8
- 这个属性是可写的,可以通过修改它来修改访问表单数据使用的编码,接下来对属性的任何访问将使用新的encoding值
- GET:一个QueryDict对象,包含get请求方式的所有参数
- POST:一个QueryDict对象,包含post请求方式的所有参数
- FILES:一个QueryDict对象,包含所有的上传文件
- COOKIES:一个标准的Python字典,包含所有的cookie,键和值都为字符串
- session:一个既可读又可写的QueryDict对象,表示当前的会话,只有当Django 启用会话的支持时才可用
- 可以通过request.META属性获取请求头headers中的数据,request.META为字典类型。常见的请求头如:
-
CONTENT_LENGTH
– The length of the request body (as a string).CONTENT_TYPE
– The MIME type of the request body.HTTP_ACCEPT
– Acceptable content types for the response.HTTP_ACCEPT_ENCODING
– Acceptable encodings for the response.HTTP_ACCEPT_LANGUAGE
– Acceptable languages for the response.HTTP_HOST
– The HTTP Host header sent by the client.HTTP_REFERER
– The referring page, if any.HTTP_USER_AGENT
– The client’s user-agent string.QUERY_STRING
– The query string, as a single (unparsed) string.REMOTE_ADDR
– The IP address of the client.REMOTE_HOST
– The hostname of the client.REMOTE_USER
– The user authenticated by the Web server, if any.REQUEST_METHOD
– A string such as"GET"
or"POST"
.SERVER_NAME
– The hostname of the server.SERVER_PORT
– The port of the server (as a string)
(三)QueryDict对象
- 定义在django.http.QueryDict,与python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况
- 方法get():根据键获取值:如果一个键同时拥有多个值将获取最后一个值;如果键不存在则返回None值,可以设置默认值进行后续处理 dict.get('键',默认值)
- 方法getlist():根据键获取值,值以列表返回,可以获取指定键的所有值,如果键不存在则返回空列表[],可以设置默认值进行后续处理 dict.getlist('键',默认值)
(四)类视图
在Django中也可以使用类来定义一个视图,称为类视图。使用类视图可以将视图对应的不同请求方式以类中的不同方法来区别定义。
定义类视图需要继承自Django提供的父类View,可使用from django.views import View
导入
from django.views import View class MyView(View): """类视图""" def get(self,request): """处理GET请求,获取session""" aa = request.session.get('cc') bb = request.session.get('dd') return HttpResponse(f'get_session:cc-{aa},dd-{bb}') def post(self,request): """处理POST请求,设置session""" request.session['cc'] = 'c2222' request.session['dd'] = 'dd222' return HttpResponse('set_session:cc,dd')
配置路由时,使用类视图的as_view()
方法来添加。
path('classview/',views.MyView.as_view()),