django中的钩子函数:
基于我们的项目来说,钩子函数就是比较forms组件中的字段的校验。
局部钩子函数(校验单个字段)和全局钩子函数(校验多个字段)。
局部钩子函数:
def clean_name(self): # 此处self为我们自定义类产生的对象,name对应于相应的字段名
name = self.cleaned_data.get('name')
if '666' in name:
self.add_error('name', '光喊666是不行的,要有真实力!')
return name
全局钩子函数:
def clean(self):
password = self.cleaned_data.get('password') # clean_data 存放则django校验正确后的信息
confirm_password = self.cleaned_data.get('confirm_password')
if not password == confirm_password:
slef.add_error('conirm_password', '两次密码不一致!')
return self.cleaned_data
Django中的cookie和session:
cookie:保存在客户端浏览器的键值对。
session: 保存在服务端的键值对,服务端产生随机字符串发送给客户端,服务端找一个地方将这个字符串与对应信息保存起来,{'随机字符串 ':'敏感信息'}
设置cookie:
obj = HttpResponse()
return obj
obj = render()
return obj
obj = redirect()
return obj
# 手动设置cookie
obj.set_cookie('name', 'jason', expires=7*24*3600) #expires指定cookie的生命周期
# django的中间件指定的{{ crsf_token }}默认的存活周期为2周
# path 中的 '/' 为根路径
利用设置的cookie来实现一个登录校验的装饰器
from functools import wraps
def login_auth(func):
@wraps(func)
def inner(request, *args, **kwargs):
# 校验cookie
old_path = request.get_full_path() # 获取用户当前访问的路径
if request.COOKIES.get('name'):
return func(request, *args, **kwargs)
return redirect('/login/?next=%s'%old_path) # 指定特定的网页跳过装饰器的验证
return inner