首先写一个装饰器用来做cookie登陆验证
#使用装饰器做cookie版登陆验证
def check_login(func):
@wraps(func)
def inner(request,*args,**kwargs):
#先做登陆验证cookie
# cookie_value=request.COOKIES.get('h1')
# cookie_value=request.get_signed_cookie('h1',salt='lhj',default=None)
# if cookie_value=='dsb1':
# print('if cookie_value==dsb1:')
# rep=func(request,*args,**kwargs)
# return rep
# else:
# return_url=request.path_info
# print('check_login动态跳转'+return_url)
session_user=request.session.get('user',None)
#从cookie中取到随机字符串,
#根据其检索数据库,找到session_data
#解密并反序列化之,得到一个大字典
#从大字典中根据key取值
print(session_user)
if session_user:
rep=func(request,*args,**kwargs)
return rep
else:
return_url=request.path_info
return redirect('/sessionLogin/?return_url={}'.format(return_url))
return inner
FBV添加方法
FBV即Function Based View,基于函数的视图
直接在函数上一行添加@check_login即可
@check_login
def Base(request):
cookie_value=request.COOKIES.get('h1')
# print(cookie_value)
#
# if cookie_value=='dsb1':
# h=str(reverse('home').split('/')[1])+'.html'
# print(h)
# return render(request,h)
# else:
# return redirect('/cookieLogin/')
# return redirect(reverse('home'))
h=str(reverse('home').split('/')[1])+'.html'
print(h)
return render(request,h)
CBV添加方法(2种)
CBV即Class Based View,基于类的视图
直接在类方法头上加
# 2,方法上面加,不要用原生的装饰器,用的话,只能改参数,那样的话不通用
class Home(View):
@method_decorator(check_login)
def get(self,request):
pass
def post(self,request):
pass
在类名上面加
# 1,类名上面加装饰器
from django.utils.decoration import method_decorator
@method_decorator(check_login,name='get') # 加在类上面的话,必须通过name指定给谁加
class Home(View):
def get(self,request):
pass
def post(self,request):
pass
def dispatch(self,request): # name=dispatch时,类中所有方法都加装饰
pass