Django使用装饰器限制对视图的访问

简介: 1.登录鉴权装饰器除了可以在视图处理中校验用户身份以及验证用户权限之外,Django还提供了便捷的装饰器来完成这两类校验。@login_required装饰器用来验证用户是否登录,只有登录的用户才可以访问视图,并获得响应,否则可以重定向到登录页引导用户登录。@permission_required装饰器用来校验用户是否具有特定的权限,只有校验通过的用户才可以访问视图。下面介绍这两个装饰器的使用方法与实现原理2.@login_required使用@login_required可以传递两个参数login_url:匿名用户访问时重定向的URL,通常都会跳转到登录页。默认的登录页由sett


1.登录鉴权装饰器


除了可以在视图处理中校验用户身份以及验证用户权限之外,Django还提供了便捷的装饰器来完成这两类校验。@login_required装饰器用来验证用户是否登录,只有登录的用户才可以访问视图,并获得响应,否则可以重定向到登录页引导用户登录。@permission_required装饰器用来校验用户是否具有特定的权限,只有校验通过的用户才可以访问视图。下面介绍这两个装饰器的使用方法与实现原理


2.@login_required


使用@login_required可以传递两个参数


login_url:匿名用户访问时重定向的URL,通常都会跳转到登录页。默认的登录页由settings.LOGIN_URL指定,需要设置为系统中定义的登录页URL

redirect_field_name:默认值为next,作为GET请求的参数。这个参数可以用于登录后直接跳回到原先访问的视图


3.@permission_required


使用@permission_required可以传递三个参数:


perm:需要校验的权限,可以是列表、元组或字符串。如果是列表或元组则需要用户同时拥有这些权限

login_url:没有指定权限的用户访问时重定向的URL,与@login_required中的login_url参数含义相同

raise_exception:默认为False,如果设置为True,则当没有权限的用户访问时将直接返回403

由于Python支持给函数配置多个装饰器,所以,校验登录和校验权限的装饰器可以同时使用。例如:



这样,访问Topic详情视图时,不仅需要当前用户是已登录用户,还需要其同时拥有can_view_topic和add_topic两个权限


目录
相关文章
|
5月前
|
XML 前端开发 JavaScript
Python 教程之 Django(5)视图基础
Python 教程之 Django(5)视图基础
40 1
|
2天前
|
前端开发 UED Python
Wagtail-基于Python Django的内容管理系统CMS实现公网访问
Wagtail-基于Python Django的内容管理系统CMS实现公网访问
|
11天前
|
XML JSON 前端开发
Django视图函数技巧,从入门到实战
Django视图函数技巧,从入门到实战
|
25天前
|
缓存 API 数据库
Django中的视图装饰器:扩展视图功能的利器
【4月更文挑战第15天】Django视图装饰器用于扩展视图功能,如权限验证、缓存控制和日志记录。它们是Python的高级特性,能不修改原始函数代码就添加新功能。Django提供内置装饰器,如`@login_required`(强制用户登录)、`@cache_page`(缓存视图输出)和`@csrf_protect`(CSRF保护)。同时,开发者可自定义装饰器,例如上面的`timing_decorator`用于记录视图执行时间。使用装饰器时要注意性能影响、执行顺序和参数处理。装饰器增强了代码复用性和可维护性。
|
25天前
|
缓存 数据库 开发者
Django视图中的缓存机制:提升页面加载速度
【4月更文挑战第15天】本文介绍了Django的缓存机制在提升页面加载速度中的作用。Django提供视图缓存和片段缓存,通过`cache_page`装饰器和`CacheMixin`实现视图级别的缓存,使用`{% cache %}`模板标签实现页面片段缓存。开发者可选择不同的缓存后端,并在设置中配置缓存参数。同时,注意合理控制缓存粒度、及时更新和管理缓存,以优化用户体验和网站性能。
|
4月前
|
Shell 数据库 Python
Python 教程之 Django(6)视图类型
Python 教程之 Django(6)视图类型
22 0
Python 教程之 Django(6)视图类型
|
4月前
|
XML 前端开发 JavaScript
Python 教程之 Django(5)视图基础
Python 教程之 Django(5)视图基础
28 1
Python 教程之 Django(5)视图基础
|
4月前
|
前端开发 Linux UED
Wagtail-基于Python Django的内容管理系统CMS如何实现公网访问
Wagtail-基于Python Django的内容管理系统CMS如何实现公网访问
40 0
|
4月前
|
缓存 开发者 Python
Django 视图层
Django 视图层
47 0
|
5月前
|
Shell 数据库 Python
Python 教程之 Django(6)视图类型
Python 教程之 Django(6)视图类型
36 0