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基于BeautifulSoup实现抓取网页指定内容的方法
Jul 09 Python
Python中字符串格式化str.format的详细介绍
Feb 17 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
Jan 20 Python
PyQt5每天必学之关闭窗口
Apr 19 Python
python 实现在Excel末尾增加新行
May 02 Python
python批量导入数据进Elasticsearch的实例
May 30 Python
使用python验证代理ip是否可用的实现方法
Jul 25 Python
python SQLAlchemy 中的Engine详解
Jul 04 Python
python实现简单聊天室功能 可以私聊
Jul 12 Python
对Python函数设计规范详解
Jul 19 Python
基于Python新建用户并产生随机密码过程解析
Oct 08 Python
PyTorch 如何自动计算梯度
May 23 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
PHP页面中文乱码分析
2013/10/29 PHP
php构造函数实例讲解
2013/11/13 PHP
Zend Guard使用指南及问题处理
2015/01/07 PHP
PHP框架Laravel插件Pagination实现自定义分页
2020/04/22 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
2019/10/30 PHP
javascript实现仿银行密码输入框效果的代码
2007/12/13 Javascript
IE和Firefox在JavaScript应用中的兼容性探讨
2008/04/01 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
2013/05/07 Javascript
jQuery搜索同辈元素方法
2015/02/10 Javascript
7个有用的jQuery代码片段分享
2015/05/19 Javascript
AngularJS的一些基本样式初窥
2015/07/27 Javascript
深入解析JavaScript中的数字对象与字符串对象
2015/10/21 Javascript
javascript实现的网站访问量统计代码
2015/12/20 Javascript
Bootstrap Table使用方法解析
2016/10/19 Javascript
js正则表达式惰性匹配和贪婪匹配用法分析
2016/12/26 Javascript
React-router中结合webpack实现按需加载实例
2017/05/25 Javascript
vue上传图片组件编写代码
2017/07/26 Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
2018/03/02 Javascript
angular4 共享服务在多个组件中数据通信的示例
2018/03/30 Javascript
解决vue 项目引入字体图标报错、不显示等问题
2018/09/01 Javascript
node全局变量__dirname与__filename的区别
2019/01/14 Javascript
Vue是怎么渲染template内的标签内容的
2020/06/05 Javascript
vue点击Dashboard不同内容 跳转到同一表格的实例
2020/11/13 Javascript
[02:47]3.19DOTA2发布会 国服成长历程回顾
2014/03/25 DOTA
[04:26]2014DOTA2国际邀请赛-Newbee顺利进入胜者组决赛 独家专访战神7
2014/07/19 DOTA
Python psutil模块简单使用实例
2015/04/28 Python
在Python中使用poplib模块收取邮件的教程
2015/04/29 Python
python Pygame的具体使用讲解
2017/11/03 Python
TensorFlow Autodiff自动微分详解
2020/07/06 Python
创意活动策划书
2014/01/15 职场文书
电视购物广告词
2014/03/19 职场文书
幼儿园中班个人总结
2015/02/28 职场文书
2015年高二班主任工作总结
2015/05/25 职场文书
2015年中学团委工作总结
2015/07/22 职场文书
2016公务员年度考核评语
2015/12/01 职场文书
人工智能深度学习OpenAI baselines的使用方法
2022/05/20 Python