Web请求认证中限制用户访问有几种方式?

开发 前端
在通常情况下,网站都会对用户限制访问,例如,未登录的用户不可访问用户中心界面。

在通常情况下,网站都会对用户限制访问,例如,未登录的用户不可访问用户中心界面。Djagno框架中使用request.user.is_authenticated属性、装饰器login_required和LoginRequiredMixin类三种方式限制用户访问。接下来,对这三种限制用户访问的方式进行介绍。

1.request.user.is_authenticated属性

request.user.is_authenticated属性用来判断用户是否通过验证,它是限制未登录用户访问的原始方式,如果用户未通过验证则跳转到登录页面。示例代码如下:

from django.conf import settings
from django.shortcuts import redirect
class UserInfoView(View):
    def get(self, reuqest):
        if not request.user.is_authenticated:
            return redirect('%s?next=%s' % (settings.LOGIN_URL,
                                                             request.path))

2.装饰器login_required

装饰器login_required用于在视图层面限制用户访问,它有两个参数:login_url和redirect_field_name,其中参数login_url表示重定向地址,默认为None;参数redirect_field_name表示重定向字段名称,默认值为“next”,该值保存了用户成功验证时浏览器跳转的重定向地址。

例如,若用户未登录,访问用户中心页面(userinfo.html)时使网站跳转到登录页,代码如下:

@login_required(login_url='/login/',redirect_field_name='my_redirect')
def user_center(request):
    return render(request, 'userinfo.html')

装饰器中通过login_url参数设置的重定向地址也可以在配置文件中通过LOGIN_URL项设置,示例如下:

LOGIN_URL = '/login/'

需要注意,参数login_url会优先在装饰器中查找设置的重定向地址,若未找到则使用在配置文件中设置的重定向地址。

3.LoginRequiredMixin类

使用LoginRequiredMixin类同样可在视图层面限制用户访问,该类的具体用法为:从django.contrib.auth.mixins模块中引入LoginRequiredMxin,定义继承LoginRequiredMxin类的类视图,在其中设置重定向地址login_url,示例代码如下:

from django.contrib.auth.mixins import loginRequiredMixin
class UserInfoView(LoginRequiredMxin, View):
    login_url = '/login/' # 设置重定向地址
    def get(self, request):
        return render('userinfo.html')

需要注意,LoginRequiredMixin类必须位于类视图基类列表的最左侧。此外,参数login_url与装饰器login_required中参数login_url使用方式一致。

责任编辑:华轩 来源: 今日头条
相关推荐

2023-10-26 08:19:34

2010-08-03 16:03:00

FlexBuilder

2017-12-05 14:24:31

应用绑定域名

2021-01-26 05:21:29

无序链表HashSet

2011-07-25 17:20:51

组策略本地组策略

2010-12-28 10:36:41

Linux

2009-04-03 09:00:20

SQL Server2005用户

2009-06-11 13:46:38

用户访问权限GlassFish

2020-09-02 13:22:28

IP访问Oracle数据库

2012-09-10 10:40:18

IBMdw

2009-09-07 09:20:34

2017-03-17 11:30:04

LinuxSSH目录

2010-05-11 09:27:14

Sun的保修协议Oracle全球保修协

2020-09-23 07:47:14

Java方式类型

2023-05-08 15:57:16

二叉树数据结构

2017-10-18 09:30:37

数据中心机房冷却

2013-03-27 11:33:32

iOS开发iOSjson解析方式

2024-04-01 11:30:57

C#拷贝

2018-07-28 00:20:15

2024-05-27 09:07:27

点赞
收藏

51CTO技术栈公众号