django自定义装饰器以及FBV和CBV加装饰器的方法

首先写一个装饰器用来做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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值