首页 > 编程 > Python > 正文

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

2020-02-22 23:09:02
字体:
来源:转载
供稿:网友

前言

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

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

基于fbv模式的login_required装饰器

def login_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME,    login_url=None): # 实际上这个方法也是调用is_authenticated去判断 pass

使用方法也很简单:

# fbv模式from django.contrib.auth.decorators import login_required@login_required def user_info_view(request): # 用户个人界面 pass

那么,我们希望如果是匿名用户在访问这个界面后能够重定向到login界面,我们可以设置相关参数,login_required装饰器会默认去读取settings.LOGIN_URL,并重定向到这个页面,如果希望更为灵活,那么我们也可以给装饰器传相关参数。

# fbv模式@login_required(login_url='/login/', redirect_field_name='next')def user_info_view(request): # 用户个人界面 pass

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

redirect_field_name是一个get请求的参数

假设当前页面会/user/info/

那么重定向的url为: /login/?next=/user/info/

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

基于cbv的LoginRequiredMixin类

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

# cbv模式from django.contrib.auth.decorators import login_requiredfrom django.utils.decorators import method_decoratorclass UserInfoView(View): @method_decorator(login_required(login_url='/login/', redirect_field_name='next')) def get(self, request): # 获取用户个人界面  pass

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

from django.contrib.auth.mixins import LoginRequiredMixinclass UserInfoView(LoginRequiredMixin, View): def get(self, request): # 获取用户个人界面  pass

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表