美文网首页
mixin+login_required实现django用户登录

mixin+login_required实现django用户登录

作者: warmsirius | 来源:发表于2019-08-16 19:00 被阅读0次

写在前面

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

  • 直接使用auth模块的login_required
  • 使用mixin继承类

auth模块的 login_required

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

  • 方法一:直接在urls.py中的CBV视图前面添加
#  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'),  # 用户中心-信息页
  • 方法二:在views.py中CBV添加login_required
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类,重写as_view方法,并定义为类方法(相当于重写View中的as_view),在as_view方法中调用父类的as_view方法,然后将该方法包上login_required函数。

  • 预留1个问题:

# 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)
  • 在视图函数中的CBV中首先继承 Mixin类,再继承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'})

总结

  • 第一次使用 mixin 继承类,对于CBV的视图很方便
  • login_required是django的auth模块提供的登录装饰器

相关文章

  • mixin+login_required实现django用户登录

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

  • django中级 --- 用户认证

    说明 django通过提供User、auth方法实现用户登录认证,权限管理等功能 一:用户认证 用户登录,判断用户...

  • Django用户登录的实现及随机验证码功能

    Django用户登录的实现及随机验证码功能 使用自带的登录视图 登录URL settings中创建登录链接 自定义...

  • Django实验记录

    django 要点 1. django 用户认证 用户登录后才可访问页面地址,否则跳转到登录页面(需要在setti...

  • Vue,Django前后端分离,开发Openstack(一)序言

    适用人群: vue基础 django基础 Openstack原理 实现目标: 1、用户登录和注销(Keystone...

  • 19_Auth模块

    Auth模块 一、Auth模块是什么? Auth模块是Django自带的用户认证模块,可以快速的实现,登录,注销,...

  • Django 用户登录

    在实现用户登录的功能时候,遇到了这样一个问题:使用用户名登录能正常登录,但是使用用户注册的邮箱就不能正确登录了,后...

  • drf的token登录和原理

    1.token登录实现 参考django restframework文档[https://www.django-r...

  • node+ajax实战案例(4)

    4.用户登录实现 #4.1.用户登录实现思路 1 用户输入登录信息,点击登录的时候把用户登录的这些信息收集起来,然...

  • Django--快速实现用户登录

    我们在系统开发时都会遇到用户登录的需求,使用Django 用户认证(Auth)组件可以帮助我们判断当前的用户是否合...

网友评论

      本文标题:mixin+login_required实现django用户登录

      本文链接:https://www.haomeiwen.com/subject/usaqsctx.html