当前位置: 首页 > 编程日记 > 正文

给django视图类添加装饰器

要将login_required装饰到view class的dispatch方法上,

因为dispatch方法为类方法,不是单个的函数,所以需要将装饰函数的装饰器 login_required转化为装饰类方法的装饰器,就要用到method_decorator .

method_decorator的参数可以是单个装饰器,也可是一个装饰器组成的列表

from django.views.generic import View

from django.contrib.auth.decorator import login_required

from django.utils.decorators import method_decorator

from django.contrib.auth.decorator import login_required,permission_required

class MyView(View):

  @method_decorator(login_required)

  def dispatch(self,*args,**kwargs):

    return super(MyView,self).dispatch(*args,**kwargs)

  def get(self,request):

    pass

将装饰器装饰到dispatch方法上,就相当于将装饰器装饰到该class的所有方法上,等效于:

@method_decorator(permission_required('patient.session'),name="dispatch")

class MyView(View):

  def get(self,request):

    pass

如果只想应用于class中的某个方法中,可以直接装饰于该方法上

class MyView(View):

  @method_decorator(login_required)

  def get(self,request):

    pass

装饰器 :

简单的装饰器形式为:

def my_decorator(func):

  def _wrapped_view(*args,**kwargs):

      "do something "

      res=func(*args,**kwargs)

      "do other thing with the res "

      return "changed res"

  return _wrapped_view

在方法内部定义一个函数,并将内部函数作为返回值

这种方式是不改变被装饰的函数,但是返回一个具有额外属性的新函数来替换它,有时候我们想查看原函数的一些信息,比如 help(),name等信息

这时,就返回装饰器内部定义函数的帮助信息和函数名,与我们原来的期待不一致。为了使被装饰后的函数,在查看函数自身的一些信息时,仍能获得

期待的返回信息,需要使用functools.wraps

对于带参数的装饰器只需在外部再嵌套一层函数:

from functools import wraps 

def for_some_use(some_params):  

  def my_decorator(func):

    @wraps(func)

    def _wrapped_view(*args,**kwargs):

      if some_params:

        print("not change the func")

        return func(*args,**kwargs)

      else:

        "do something "

        res=func(*args,**kwargs)

        "do other thing with the res "

        return "changed res"

    return _wrapped_view

在一个方法上装饰多个装饰器,函数的定义是 最上面的装饰器在最外层,最靠近被装饰的函数的装饰器最先执行。

对于这样的形式:

@my_decorator1

@my_decorator2

@my_decorator3

def my_func():

  pass

相当于my_decorator1(my_decorator2(my_decorato3(my_func)))

转载于:https://www.cnblogs.com/Ting-light/p/10115584.html

相关文章:

JavaScript实现智能搜索框

应用场景: 1. 搜索框在页面中占据的空间过小,希望无论浏览到什么位置,可以轻易地回到并聚焦搜索框。 2. 搜索框里面的文字大小过小,希望能够在上方开辟一块空间放大内容 解决思路: 1. 对整个页面添加键盘事件keyup…

搜索引擎技术之概要预览

搜索引擎技术之概要预览前言近些天在学校静心复习功课与梳理思路(找工作的事情暂缓),趁闲暇之际,常看有关搜索引擎相关技术类的文章,接触到不少此前未曾触碰到的诸多概念与技术,如爬虫,网页抓取…

Linux 守护进程,编写(转载)

设置守护进程过程:1.创建子进程,父进程退出2.在子进程中创建新会话3.改变当前目录为根目录4.重设文件权限掩码5.关闭文件描述符*6.守护进程里,忽略SIGCHLD信号 (即使fork两次,新进程由init接管,不进行signal(SIGCHLD,S…

RecycleView的notifyItemRemoved使用注意

转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10116095.html 我们为了移除RecycleView的某一项,会用RecycleView的notifyItemRemoved(int position)方法,但是需要注意的是:1、用该…

JavaScript实时更新中国标准时间

用到Date对象和BOM中的setInterval()定时器。 效果如下&#xff08;每隔1s刷新一次&#xff09; 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content&q…

【转】Flex4:利用HttpService与ASP.NET传输JSON数据(登录为例)

开发环境&#xff1a;Flash Builder4,Vs2005 1、首先打开FlashBuilde4,创建一个名为HttpService_Net_Json的flex项目 &#xff08;图1&#xff09; 然后下一步,应用程序类型选择web,应用程序服务器类型选择ASP.NET(如图2) &#xff08;图2&#xff09; 下一步&#xff0c;出现配…

使用Node.js写一个简单的api接口

引入Http模块 默认你已经安装了Node.js Node当中内置了Http模块&#xff1b; 可以使用 var http require("http"); 复制代码引入http模块&#xff1b; Hello world 用Node.js实现一个HTTP服务器程序非常简单。我们实现一个最简单的Web程序&#xff0c; 它对于所有请求…

body,td,th {

三、继承中容易引起的错误有时候继承也会带来些错误&#xff0c;比如说下面这条css定义&#xff1a; body{color:blue} 在有些浏览器中这句定义会使除表格之外的文本变成蓝色。从技术上来说&#xff0c;这是不正确的&#xff0c;但是它确实存在。所以我们经常需要借助于某些技巧…

JavaScript实现 按钮不可过频繁使用

主要用到setInterval和clearInterval方法和一个计时变量。 效果 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta na…

二十分钟教你如何将区块链应用与函数计算相结合

前言 本篇文章适合对区块链应用感兴趣或是想要通过函数计算服务进一步开发区块链应用的新人。本文将结合阿里云区块链服务、阿里云函数计算服务、阿里云日志服务 以及社区应用 Marbles&#xff0c;手把手教大家如何将阿里云区块链服务与阿里云函数计算服务相结合&#xff0c;并…

【转】推荐!国外程序员整理的Java资源大全

构建 这里搜集了用来构建应用程序的工具。 Apache Maven&#xff1a;Maven使用声明进行构建并进行依赖管理&#xff0c;偏向于使用约定而不是配置进行构建。Maven优于Apache Ant。后者采用了一种过程化的方式进行配置&#xff0c;所以维护起来相当困难。Gradle&#xff1a;Grad…

科研成果汇总:收获的季节

感谢课题组各届成员(2006&#xff5e;2010级)长期不懈的努力与付出&#xff0c;特别感谢目前仍工作在第一线的各位成员的鼎力配合与协作&#xff0c;大家辛苦了&#xff01;同时&#xff0c;还要感谢研究所对我们组的大力支持与帮助&#xff01;谢谢大家&#xff01; BTW&#…

JavaScript 利用location对象实现跨页面传参

需求简述&#xff1a; 两个页面login.html和homepage.html&#xff0c;在login页输入用户名&#xff0c;点击登录会跳转到主页&#xff0c;主页拿到login页输入的用户名 实现思路&#xff1a; 1. 跳转&#xff1a;修改location.html 2. 拿参&#xff1a;处理location.searc…

编译u-boot时候,make distclean 出现rm:无法删除,****是一个目录

今天在编译u-boot的时候&#xff0c;make distclean&#xff0c;出现了rm:无法删除 "include/asm-arm/arch": 是一个目录。经过查看网友的解决办法&#xff0c;已经解决了。 具体解决办法&#xff1a;在uboot顶层有个mkconfig文件&#xff0c;vim打开后&#xff0c;在…

[转载]MaxtoCode对.Net程序加密的原理及解密探讨三(实例解密)

标 题: 【原创】MaxtoCode对.Net程序加密的原理及解密探讨三&#xff08;实例解密&#xff09;作 者: rick时 间: 2006-09-29,23:16:28链 接: http://bbs.pediy.com/showthread.php?t32658上一回我们试验了通过反射的方式获取method的源代码。这次我们就用一个实例来演示dump一…

MyEclipse教程:Web开发——创建Web片段项目

MyEclipse 在线订购年终抄底促销&#xff01;火爆开抢>>MyEclipse最新版下载本教程向用户展示了使用关联的Web项目创建Web片段项目的机制。 用户还可以获得要检查的示例项目。 在本教程中&#xff0c;用户将学习如何&#xff1a;创建Web片段和关联的Web项目部署并测试包含…

JavaScript 实现鼠标移动时实时获取其相对盒子的偏移

实现思路&#xff1a; 1. 获得盒子相对于页面的偏移量 div.offsetTop和div.offsetLeft 2. 获得鼠标相对于页面的偏移量 e.pageY和e.pageX 3. 前两者相减即可获得鼠标相对于盒子上沿和左侧的偏移 4. 使用鼠标移动事件 mousemove 实现效果&#xff1a; 代码 <!DOCTYPE h…

H.264 picture parameter sets成员值含义学习笔记

-picture parameter sets1. pic_parameter_set_idpic_parameter_set_id指明了在切片头中对应的某个psp.pic_parameter_set_id的值应该在0到255,包括0和2552. seq_parameter_set_idset_parameter_set_id表示激活的sps.seq_parameter_set_id应该取值在0到31之间,包括边界值.3. en…

软件开发进度管理

一、什么是软件项目管理  软件项目管理是按需求确定范围、按目标制定项目计划、按计划执行管理的过 程。对软件开发各阶段加强项目管理的根本目的在于增强对软件开发的控 制能力&#xff0c;提升软件开发的质量。软件项目的建设按软件工程的生命周期法可分为项目立项、启动、…

SQLServer之ISO游标使用

什么是游标 结果集&#xff0c;结果集就是select查询之后返回的所有行数据的集合。 游标则是处理结果集的一种机制吧&#xff0c;它可以定位到结果集中的某一行&#xff0c;多数据进行读写&#xff0c;也可以移动游标定位到你所需要的行中进行操作数据。 一般复杂的存储过程&am…

JavaScript实现鼠标拖拽登录框

拖拽的本质是登录框获得光标的偏移来调整自身的偏移。 拖拽发生时&#xff0c;光标相对盒子的坐标不会变化&#xff0c;相对于页面的坐标却在变化&#xff0c;二者的差值就是盒子需要的。 两个注意点&#xff1a; 1. 赋值给盒子的什么属性 outer.style.top e.pageY - y p…

c++ STL容器初探

什么是容器 首先&#xff0c;我们必须理解一下什么是容器&#xff0c;在C 中容器被定义为&#xff1a;在数据存储上&#xff0c;有一种对象类型&#xff0c;它可以持有其它对象或指向其它对像的指针&#xff0c;这种对象类型就叫做容器。很简单&#xff0c;容器就是保存其它对…

flutter开发中常用的dart插件

flutter插件官网地址&#xff1a;https://pub.dartlang.org/packages/ 1. image_picker 一个可以从图库选择图片&#xff0c;并可以用相机拍摄新照片的flutter插件 2. flutter_image 使用NetworkImageWithRetry 代替Image.network 加载网络图片可获得重试能力。 3. barcode_sca…

XML(eXtensible Markup Language)文件的解析

XML与HTML一样&#xff0c;文件中除了根节点以外&#xff0c;整个文件包含一个隐含根“/”,所以我们在解析文件同时一般采用XPath语法进行解析时&#xff0c;一般首先要以反“/”开始。 转载于:https://www.cnblogs.com/hibernate3-example/archive/2010/10/20/2492356.html

JavaScript 立即执行函数的两种写法

(function(str){console.log(str欢迎你~);})(行步至春深);(function(str) {console.log(str欢迎你~);}(行路易知难)); 可以看到&#xff0c;每种写法都比平常多出两个小括号&#xff0c;其中一个可以看作是调用&#xff0c;里面装参数&#xff0c;另一个可以看作防止语法错误。…

【Android动画】之Tween动画 (渐变、缩放、位移、旋转)

Android 平台提供了两类动画。 一类是Tween动画&#xff0c;就是对场景里的对象不断的进行图像变化来产生动画效果&#xff08;旋转、平移、放缩和渐变&#xff09;。 第二类就是 Frame动画&#xff0c;即顺序的播放事先做好的图像&#xff0c;与gif图片原理类似。 下面就讲一下…

Mac下PHP7.1+Nginx安装和配置

https://blog.csdn.net/haiyanggeng/article/details/79186982 PHP&#xff1a;7.1.13Nginx&#xff1a;1.12.2 1. 安装PHP# 添加源brew tap homebrew/dupesbrew tap homebrew/versionsbrew tap homebrew/homebrew-php#更新源brew update#安装brew install php71 --with-imap -…

黑木耳的功效是什么

黑木耳&#xff0c;生长在朽木上&#xff0c;形似人的耳朵&#xff0c;色黑或褐黑&#xff0c;故名黑木耳&#xff0c;又名木菌、树鸡。黑木耳营养极为丰富&#xff0c;据史料记载&#xff0c;它是上古时代帝王独享之佳品&#xff0c;含有大量的碳水化合物、蛋白质、铁、钙、磷…

Javascript 移动的海绵宝宝

效果描述&#xff1a; 做一个简单的动画效果&#xff0c;刚刷新页面时&#xff0c;SpongeBob在页面的左上角位置&#xff0c;随着时间推移&#xff0c;他匀速向右移动&#xff0c;直到右侧抵达页面右侧停下来。 分析&#xff1a; SpongeBob作为一张图片被存放在<img>里…

sqlserver任务导出Excle

--sql语句就用下面的存储过程 /*--数据导出Excel 导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件,如果文件不存在,将自动创建文件,如果表不存在,将自动创建表基于通用性考虑,仅支持导出标准数据类型 使用方法&#xff1a; 直接复制执行创建储存过程-&#xff0d;陈…