HTTP无状态协议,是指协议对于交互性场景没有记忆能力,每次客户端检索网页时,客户端打开一个单独的连接到 Web 服务器,服务器会自动不保留之前客户端请求的任何记录。
创建用户对象的三种方法:
-
create():创建一个普通用户,密码是明文的。
-
create_user():创建一个普通用户,密码是密文的。
-
create_superuser():创建一个超级用户,密码是密文的,要多传一个邮箱 email 参数。
参数:
-
username: 用户名。
-
password:密码。
-
email:邮箱 (create_superuser 方法要多加一个 email)。
cookie 弥补了 http 无状态的不足,让服务器知道来的人是"谁",但是 cookie 以文本的形式保存在浏览器端,安全性较差,且最大只支持 4096 字节,所以只通过 cookie 识别不同的用户,然后,在对应的 session 里保存私密的信息以及超过 4096 字节的文本。ie:set_cookie("sessionid",随机字符串)** 响应给浏览器
登录,认证 和 登录login------------>user绑定到request
注销,logout
Django 中间件
Django 中间件是修改 Django request 或者 response 对象的钩子,可以理解为是介于 HttpRequest 与 HttpResponse 处理之间的一道处理过程。
Django 中间件作用:
-
修改请求,即传送到 view 中的 HttpRequest 对象。
-
修改响应,即 view 返回的 HttpResponse 对象。
中间件组件配置在 settings.py 文件的 MIDDLEWARE 选项列表中。
配置中的每个字符串选项都是一个类,也就是一个中间件。
自定义中间件
中间件可以定义四个方法,分别是:
process_request(self,request) process_view(self, request, view_func, view_args, view_kwargs) process_exception(self, request, exception) process_response(self, request, response)
process_request 方法
process_request 方法有一个参数 request,这个 request 和视图函数中的 request 是一样的。
process_request 方法的返回值可以是 None 也可以是 HttpResponse 对象。
-
返回值是 None 的话,按正常流程继续走,交给下一个中间件处理。
-
返回值是 HttpResponse 对象,Django 将不执行后续视图函数之前执行的方法以及视图函数,直接以该中间件为起点,倒序执行中间件,且执行的是视图函数之后执行的方法。
process_request 方法是在视图函数之前执行的。
当配置多个中间件时,会按照 MIDDLEWARE中 的注册顺序,也就是列表的索引值,顺序执行。
不同中间件之间传递的 request 参数都是同一个请求对象。
process_view
process_view 方法格式如下:
process_view(request, view_func, view_args, view_kwargs)
process_view 方法有四个参数:
-
request 是 HttpRequest 对象。
-
view_func 是 Django 即将使用的视图函数。
-
view_args 是将传递给视图的位置参数的列表。
-
view_kwargs 是将传递给视图的关键字参数的字典。
-
process_response
process_response 方法有两个参数,一个是 request,一个是 response,request 是请求对象,response 是视图函数返回的 HttpResponse 对象,该方法必须要有返回值,且必须是response。
process_response 方法是在视图函数之后执行的。
当配置多个中间件时,会按照 MIDDLEWARE 中的注册顺序,也就是列表的索引值,倒序执行。
process_exception
process_exception 方法如下:
process_exception(request, exception)
参数说明:
-
request 是 HttpRequest 对象。
-
exception 是视图函数异常产生的 Exception 对象。
实例
class MD1(MiddlewareMixin): def process_request(self, request): print("md1 process_request 方法。", id(request)) #在视图之前执行
def process_response(self,request, response): :#基于请求响应 print("md1 process_response 方法!", id(request)) #在视图之后 return response
def process_view(self,request, view_func, view_args, view_kwargs): print("md1 process_view 方法!") #在视图之前执行 顺序执行 #return view_func(request)
def process_exception(self, request, exception):#引发错误 才会触发这个方法 print("md1 process_exception 方法!") # return HttpResponse(exception) #返回错误信息
Django表单组件
Form.cleaned_data
类中的每个字段[Form
]不仅负责验证数据,还负责“清理”数据——将其规范化为一致的格式。因为它允许以多种方式输入特定字段的数据,始终产生一致的输出。
as_p()
Form.as_p()
as_p()
使用分配给 forms template_name_p
属性的模板呈现表单,默认情况下,此模板为 'django/forms/p.html'
. 此模板将表单呈现为一系列 <p>
标签
as_ul()
Form.as_ul()
as_ul()
使用分配给 forms template_name_ul
属性的模板呈现表单,默认情况下,此模板为 'django/forms/ul.html'
. 此模板将表单呈现为一系列 <li>
标签,每个标签<li>
包含一个字段。它不包括or <ul>
,</ul>
因此您可以在 上指定任何 HTML 属性以 <ul>
实现灵活性
as_table()
Form.as_table()
as_table()使用分配给 forms
template_name_table属性的模板呈现表单,默认情况下,此模板为
'django/forms/table.html'. 此模板将表单输出为 HTML
<table>`
Django Form 组件
Django Form 组件用于对页面进行初始化,生成 HTML 标签,此外还可以对用户提交对数据进行校验(显示错误信息)。
前端校验+后端校验
前端校验是为了减少后端服务器压力
后端校验为了保存到数据库里的数据是合法的
字段属性:
-
label:输入框前面的文本信息。
-
error_message:自定义显示的错误信息,属性值是字典, 其中 required 为设置不能为空时显示的错误信息的 key。