Django使用装饰器限制对视图的访问及实现原理

目录
  • Django使用装饰器限制对视图的访问
  • 1.登录鉴权装饰器
  • 2.@login_required
  • 3.@permission_required

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

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两个权限

到此这篇关于Django使用装饰器限制对视图的访问的文章就介绍到这了,更多相关Django装饰器限制视图访问内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解Django中类视图使用装饰器的方式

    类视图使用装饰器 为类视图添加装饰器,可以使用两种方法. 为了理解方便,我们先来定义一个为函数视图准备的装饰器(在设计装饰器时基本都以函数视图作为考虑的被装饰对象),及一个要被装饰的类视图. def my_decorator(func): def wrapper(request, *args, **kwargs): print('自定义装饰器被调用了') print('请求路径%s' % request.path) return func(request, *args, **kwargs) re

  • 详解Django中六个常用的自定义装饰器

    装饰器作用 decorator是当今最流行的设计模式之一,很多使用它的人并不知道它是一种设计模式.这种模式有什么特别之处? 有兴趣可以看看Python Wiki上例子,使用它可以很方便地修改对象行为,通过使用类似例中的接口将修改动作封装在装饰对象中. decorator 可以动态地修改函数.方法或类的功能,而无需创建子类或修改类的源代码.正因为如此,装饰器可以让代码将变得更干净.更可读.更可维护(这很重要!),并且减少了许多冗余但又不得不写的代码,使我们可以使用单个方法向多个类添加功能. 对于装

  • Django中login_required装饰器的深入介绍

    前言 Django提供了多种装饰器, 其中login_required可能是经常会使用到的. 这里介绍下四种使用此装饰器的办法. 当然, 在使用前, 记得在工程目录的settings.py中设置好LOGIN_URL 使用方法 1. URLconf中装饰 from django.contrib.auth.decorators import login_required, permission_required from django.views.generic import TemplateVie

  • django的auth认证,authenticate和装饰器功能详解

    在django中创建表,会自动创建一些django自带的表,先了解用户认证, 认证登录 先要引用 , from django.contrib import auth 有很多方法, 网站先有登录和认证, authenticate(),提供用户认证,验证用户名和密码是否正确,一般需要username ,password两个关键字参数, 认证信息有效,返回有一个User对象.authrenticate()会在User对象上设置一个属性标识,认证了该用户, 创建一个Book表,然后生成数据库 from

  • Django使用装饰器限制对视图的访问及实现原理

    目录 Django使用装饰器限制对视图的访问 1.登录鉴权装饰器 2.@login_required 3.@permission_required Django使用装饰器限制对视图的访问 1.登录鉴权装饰器 除了可以在视图处理中校验用户身份以及验证用户权限之外,Django还提供了便捷的装饰器来完成这两类校验.@login_required装饰器用来验证用户是否登录,只有登录的用户才可以访问视图,并获得响应,否则可以重定向到登录页引导用户登录.@permission_required装饰器用来校

  • Django框架CBV装饰器中间件auth模块CSRF跨站请求问题

    CBV添加装饰器 给CBV添加装饰器有三种方法,三种方法都需要导入模块: from django.utils.decorators import method_decorator 第一种直接在方法上面添加: from django.utils.decorators import method_decorator class MyLogin(View): @method_decorator(auth) def get(self, request): return HttpResponse('Is

  • JS装饰者模式和TypeScript装饰器

    装饰者模式介绍 装饰者模式(Decorator Pattern)也称为装饰器模式,在不改变对象自身的基础上,动态增加额外的职责.属于结构型模式的一种. 使用装饰者模式的优点:把对象核心职责和要装饰的功能分开了.非侵入式的行为修改. 举个例子来说,原本长相一般的女孩,借助美颜功能,也能拍出逆天的颜值.只要善于运用辅助的装饰功能,开启瘦脸,增大眼睛,来点磨皮后,咔嚓一拍,惊艳无比. 经过这一系列叠加的装饰,你还是你,长相不增不减,却能在镜头前增加了多重美.如果你愿意,还可以尝试不同的装饰风格,只要装

  • django如何通过类视图使用装饰器

    需求:当我们想禁止ip黑名单访问我们的某些页面时,例如注册页面.应该怎么操作呢? 解决方案:这时候我们可以设计一个装饰器,过滤ip黑名单. 装饰器的写法如下: from functools import wraps def ban_ip(func): @wraps(func) def wrapper(request,*args,**kwargs): IP = request.META.get("REMOTE_ADDR") if IP in ["127.0.0.1"]

  • Python使用装饰器进行django开发实例代码

    本文研究的主要是Python使用装饰器进行django开发的相关内容,具体如下. 装饰器可以给一个函数,方法或类进行加工,添加额外的功能. 在这篇中使用装饰器给页面添加session而不让直接访问index,和show.在views.py中 def index(request): return HttpResponse('index') def show(request): return HttpResponse('show') 这样可以直接访问index和show,如果只允许登陆过的用户访问i

  • Flask框架实现给视图函数增加装饰器操作示例

    本文实例讲述了Flask框架实现给视图函数增加装饰器操作.分享给大家供大家参考,具体如下: 在@app.route的情况下增加装饰器的写法: from flask import Flask,request,render_template,redirect,session,url_for,views from flask import render_template app = Flask(__name__) #实例化flask对象 app.debug = True #能够随时更改自动重启,不加的

随机推荐