django限制匿名用户访问及重定向的方法实例

  

  

大家应该都遇到过,在某些页面中,我们不希望匿名用户能够访问,例如个人页面等,这种页面只允许已经登录的用户去访问,在django中,我们也有比较多的方式去实现。
  

  

最简单的,我们在viewz中去判断用户is_authenticated,但这种方法也相对比较笨拙,最理想的的我们当然不希望这个请求能够进入到我们看来,在这之前就能够返回一个相关的反应,而django其实已经给我们封装好了相关的函数与类。下面话不多说了,来一起看看详细的介绍吧。
  

  


  

        def login_required(函数=None, redirect_field_name=redirect_field_name,   login_url=None):   #实际上这个方法也是调用is_authenticated去判断   通过      

使用方法也很简单:
  

        # fbv模式   从django.contrib.auth.decorators进口login_required   @login_required   def user_info_view(请求):   #用户个人界面   通过      

那么,我们希望如果是匿名用户在访问这个界面后能够重定向到登录界面,我们可以设置相关参数,login_required装饰器会默认去读取<代码>设置。LOGIN_URL>   

        # fbv模式   @login_required (login_url=/登录/,redirect_field_name=皀ext”)   def user_info_view(请求):   #用户个人界面   通过      

login_url就是匿名用户访问后重定向的url,一般都是登录的页面
  

  

redirect_field_name是一个得到请求的参数
  

  

假设当前页面会/user/信息/
  

  

那么重定向的url为:<代码>/登录/& # 63;下=/user/信息/
  

  

这个参数可以用于登陆后直接跳转回这个页面,后面还会具体介绍!
  

  


  

  

博主一般常用都cb v是模都未式,在这个模式下,我们会重写get和post方法,理论上可以用login_required装饰器去装饰这两个方法
  

        cb v #模都未式   从django.contrib.auth.decorators进口login_required   从django.utils.decorators进口method_decorator   类UserInfoView(观点):   @method_decorator (login_required (login_url=/登录/,redirect_field_name=皀ext”))   def(自我,请求):   #获取用户个人界面   通过      

login_required是函数装饰器,method_decorator可以将函数装饰器转化成方法装饰器。如果这里还有帖子请求,那这样的代码我们还要在写一遍,这样就显得有点冗余,我们既然用了类来实现,当然通过类的优势来实现!继承LoginRequiredMixin !
  

        从django.contrib.auth。mixin进口LoginRequiredMixin   类UserInfoView (LoginRequiredMixin、查看):   def(自我,请求):   #获取用户个人界面   通过      

那么,LoginRequiredMixin是怎么去实现的呢?
  

  

看看源代码
  

        类LoginRequiredMixin (AccessMixin):   def调度(自我,请求,* args, * * kwargs):   如果不是request.user.is_authenticated ():   返回self.handle_no_permission ()   返回超级(LoginRequiredMixin自我)。调度(请求、* args * * kwargs)      

其实它重写了派遣方法,因为我们还继承了视图,其实它重写的视图中的派遣函数,如果知道视图的逻辑,你就知道为什么能够这样实现了!
  

  

当我们在url中,调用你的视图类,如<代码> UserInfoView.as_view() 方法,它会去调用<代码>调度(),这个方法起到一个分配器的作用,如果能请求,那么他就调用得到的方法,如果是帖子请求,那么就调用发布方法。那么,在调度中去判断用户是否登录,当然可以起到这个作用。
  

  

那既然只是重写公文,我们也可以自己实现!
  

        #自定义LoginRequiredMixin   类LoginRequiredMixin(对象):      @method_decorator (login_required (login_url=/登录/,redirect_field_name=皀ext”))   def调度(自我,请求,* args, * * kwargs):   返回超级(LoginRequiredMixin自我)。调度(请求、* args * * kwargs)      

当然,有没有必要自己实现,那就看各自的需求啦~
  

  


  

        (login_url=/登录/,redirect_field_name=皀ext”)

django限制匿名用户访问及重定向的方法实例