码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-08-02 20:49:38      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:isp   one   elf   写法   语句   round   log   func   utils   

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

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

@auth
def 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_decorator
from 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‘)



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

标签:isp   one   elf   写法   语句   round   log   func   utils   

原文地址:https://www.cnblogs.com/yoyo008/p/9409173.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!