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')