mixin+login_required实现django用户登录

2019-08-16  本文已影响0人  warmsirius

写在前面

项目中,在用户的个人中心的时候,需要用户登录才能进行其他操作,所以这里需要用到用户登录装饰器,下面提供了两种方法

auth模块的 login_required

auth模块已经有用户装饰器了,方法名为login_required,使用方法如下:

#  urls.py


from django.contrib.auth.decorators import login_required

re_path('order', login_required(UserOrderView.as_view()), name='order'),  # 用户中心-订单页
re_path('address', login_required(UserAddressView.as_view()), name='address'),  # 用户中心-地址页
re_path('$', login_required(UserInfoView.as_view()), name='info'),  # 用户中心-信息页
from django.contrib.auth.decorators import login_required

# 方法1:加在类上面,将装饰器当参数传给method_decorator,然后指定要装饰的方法名
@method_decorator(login_required, name='get')
@method_decorator(login_required, name='post')
class Order(View):
    def get(self, request, *args, **kwargs):
        return HttpResponse('订单详情。。。')

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

# 方法二,直接在方法上加装饰器,将装饰器当做参数传给method_decorator
class Order(View):
    @method_decorator(login_required)
    def get(self, request, *args, **kwargs):
        return HttpResponse('订单详情。。。')

    @method_decorator(login_required)
    def post(self, request, *args, **kwargs):
        return HttpResponse('ok') 

使用mixin多继承实现

# mixin.py


from django.contrib.auth.decorators import login_required


class LoginRequiredMixin(object):
    @classmethod
    def as_view(cls, **initkwargs):
        # 调用父类的as_view
        view = super(LoginRequiredMixin, cls).as_view(**initkwargs)
        return login_required(view)
# views.py


# /user
class UserInfoView(LoginRequiredMixin, View):
    '''用户中心-信息页'''
    def get(self, request):
        '''显示'''
        # page = 'user'
        return render(request, 'df_user/user_center_info.html', {'page': 'user'})

总结

上一篇下一篇

猜你喜欢

热点阅读