django(钩子函数hook,cookie和session)

论坛 期权论坛 脚本     
匿名技术用户   2021-1-7 02:42   29   0

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

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP