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


Posted in Python onFebruary 06, 2018

本文研究的主要是Python使用装饰器进行django开发的相关内容,具体如下。

装饰器可以给一个函数,方法或类进行加工,添加额外的功能。

在这篇中使用装饰器给页面添加session而不让直接访问index,和show。在views.py中

def index(request):
    return HttpResponse('index')
 
def show(request):
    return HttpResponse('show')

这样可以直接访问index和show,如果只允许登陆过的用户访问index和show,那么就需修改代码

def index(request):
    if request.session.get('username'):
      return HttpResponse('index')
    else:
      return HttpResponse('login')<br data-filtered="filtered">
def show(request):
    if request.session.get('username'):
      return HttpResponse('show')
    else:
      return HttpResponse('login')

这样可以实现限制登陆过的用户访问功能,但是代码中也出现了许多的相同部分,于是可以把这些相同的部分写入一个函数中,用这样一个函数装饰index和show。这样的函数就是装饰器

def decorator(main_func):
  def wrapper(request):        #index,show中是一个参数,所以在wrapper中也是一个参数
    if request.session.get('username'):
      return main_func(request)
    else:
      return HttpResponse('login')
  return wrapper
 
@decorator
def index(request):
  return HttpResponse('index')
def show(request):
  return HttpResponse('show')

这样在视图函数中只要是一个参数就可以通过decorator函数装饰,如果有两个参数就需要修改装饰器

def decorator(main_func):
  def wrapper(request):       
    if request.session.get('username'):
      return main_func(request)
    else:
      return HttpResponse('login')
  return wrapper
 
def decorator1(main_func):
  def wrapper(request,page):       
    if request.session.get('username'):
      return main_func(request,page)
    else:
      return HttpResponse('login')
  return wrapper
 
@decorator
def index(request):
  return HttpResponse('index')
 
@decorator1
def show(request,page):
  return HttpResponse('show')

这个如果有一个参数就通过decorator来修饰,如果有两个参数就通过decorator1来修饰。于是可以通过动态参数的方式来结合decorator和decorator1,可以同时修饰index和show。

def decorator3(main_func):
    def wrapper(request,*args,**kwargs):
        if not request.session.get('username'):
            return main_func(request,*args,**kwargs)
        else:
            return HttpResponse('login')
    return wrapper
 
 
@decorator3
def index(request,*args,**kwargs):
    return HttpResponse('index')
@decorator3
def show(request,*args,**kwargs):
    return HttpResponse('show')

总结

以上就是本文关于Python使用装饰器进行django开发实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
python解析中国天气网的天气数据
Mar 21 Python
python实现带验证码网站的自动登陆实现代码
Jan 12 Python
python自然语言编码转换模块codecs介绍
Apr 08 Python
全面了解Nginx, WSGI, Flask之间的关系
Jan 09 Python
python3解析库BeautifulSoup4的安装配置与基本用法
Jun 26 Python
python中的decimal类型转换实例详解
Jun 26 Python
pandas 对日期类型数据的处理方法详解
Aug 08 Python
自定义django admin model表单提交的例子
Aug 23 Python
浅谈Python3实现两个矩形的交并比(IoU)
Jan 18 Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
Apr 08 Python
Python爬虫获取豆瓣电影并写入excel
Jul 31 Python
python推导式的使用方法实例
Feb 28 Python
Python yield与实现方法代码分析
Feb 06 #Python
Django中间件工作流程及写法实例代码
Feb 06 #Python
Django数据库表反向生成实例解析
Feb 06 #Python
Python使用functools实现注解同步方法
Feb 06 #Python
django中send_mail功能实现详解
Feb 06 #Python
Python打印“菱形”星号代码方法
Feb 05 #Python
Django权限机制实现代码详解
Feb 05 #Python
You might like
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
2011/12/25 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
PHP不使用内置函数实现字符串转整型的方法示例
2017/07/03 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
2020/01/26 PHP
Display SQL Server Version Information
2007/06/21 Javascript
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
js中将字符串转换成json的三种方式
2011/01/12 Javascript
Express作者TJ告别Node.js奔向Go
2014/07/14 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
2015/06/11 Javascript
微信小程序  wx.request合法域名配置详解
2016/11/23 Javascript
使用node.js中的Buffer类处理二进制数据的方法
2016/11/26 Javascript
Bootstrap模态框(Modal)实现过渡效果
2017/03/17 Javascript
浅谈vue自定义全局组件并通过全局方法 Vue.use() 使用该组件
2017/12/07 Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
2018/08/27 Javascript
JavaScript文本特效实例小结【3个示例】
2018/12/22 Javascript
NodeJs之word文件生成与解析的实现代码
2019/04/01 NodeJs
vue中jsonp插件的使用方法示例
2020/09/10 Javascript
原生js实现自定义滚动条
2021/01/20 Javascript
[01:04]DOTA2上海特锦赛现场采访 FreeAgain遭众解说围攻
2016/03/25 DOTA
玩转python爬虫之爬取糗事百科段子
2016/02/17 Python
深入学习python的yield和generator
2016/03/10 Python
Python之py2exe打包工具详解
2017/06/14 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
2018/07/18 Python
基于python实现把图片转换成素描
2019/11/13 Python
Python求正态分布曲线下面积实例
2019/11/20 Python
通过实例解析Python调用json模块
2019/12/11 Python
Python参数传递对象的引用原理解析
2020/05/22 Python
python报错: 'list' object has no attribute 'shape'的解决
2020/07/15 Python
Steiff台湾官网:德国金耳釦泰迪熊
2019/12/26 全球购物
国贸专业个人求职信范文
2014/01/08 职场文书
《长城》教学反思
2014/02/14 职场文书
乡村卫生服务一体化管理实施方案
2014/03/30 职场文书
软件项目开发计划书
2014/05/01 职场文书
2015年全民国防教育日活动总结
2015/03/23 职场文书
解决numpy和torch数据类型转化的问题
2021/05/23 Python