添加登录装饰器的两种方式:FBV和CBV

1、FBV方式:添加验证装饰器

def auth(func):    def deco(request, *args, **kwargs):        u = request.get_signed_cookie('username', salt='user', default=None)        if not u:            return render(request, 'login.html')        return func(request, *args, **kwargs)    return deco

@authdef index(request):    u = request.get_signed_cookie('username', salt='user', default=None)    return render(request, 'index.html', {'user': u})

@authdef detail(request):    u = request.get_signed_cookie('username', salt='user', default=None)    return render(request, 'detail.html', {'user': u})

访问index/detail时,调用auth装饰器,如果验证成功,则执行index/detail(return func(request, *args, **kwargs)语句起的作用);否则跳转到login.html

2、CBV方式:通过django自带的装饰器method_decorator 的@method_decorator(cookie)来实现

from django.utils.decorators import method_decoratorfrom django import views

# @method_decorator(cookie,name='dispatch')    # dispatch的便捷写法class CBVtest(views.View):    @method_decorator(cookie)  # 给dispatch方法添加装饰器,那么下面所有的get,post都会添加    def dispatch(self, request, *args, **kwargs):        return super(CBVtest, self).dispatch(request, *args, **kwargs)

    # @method_decorator(cookie)  # 单独添加    def get(self, request):        u = request.get_signed_cookie('username', salt='user', default=None)        return render(request, 'houtai.html', {'user': u})

    def post(self, request):        return HttpResponse('post ok')

上一篇:MongoDB高级知识-易使用


下一篇:linux学习笔记整理(五)