Python - DjangoPython语言与信息数据获取和机器学习

CBV和FBV中用户认证装饰器

2017-08-23  本文已影响5人  廖马儿

FBV中的示例:

在views.py中

# 用户认证的装饰器
def auth(func):
    def inner(request, *args, **kwargs):
        v = request.COOKIES.get('username')
        if not v:
            return redirect('/login/')

        return func(request, *args, **kwargs)

    return inner

@auth
def index(request):
    # 获取当前已经登录的用户名

    v = request.COOKIES.get('username')

    print v

    if not v:
        return redirect('/cookie/login/')

    return render(request, 'cookie/index.html', {'current_user':v})

CBV中的示例


# 方法1
from django.utils.decorators import method_decorator

class Order(views.View):

    @method_decorator(auth)
    def get(self, request):
        pass
    @method_decorator(auth)
    def post(self, request):
        pass

# 方法2

from django.utils.decorators import method_decorator

class Order(views.View):

    @method_decorator(auth)
    def dispatch(self, request, *args, **kwargs):
        return super(Order, self).dispatch(request, *args, **kwargs)

    def get(self, request):
        pass
    def post(self, request):
        pass

# 方法3

from django.utils.decorators import method_decorator

@method_decorator(auth, name='dispatch')
class Order(views.View):


    #def dispatch(self, request, *args, **kwargs):
    #    return super(Order, self).dispatch(request, *args, **kwargs)

    def get(self, request):
        pass
    def post(self, request):
        pass
上一篇下一篇

猜你喜欢

热点阅读