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 相关文章推荐
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
Aug 16 Python
Linux系统上Nginx+Python的web.py与Django框架环境
Dec 25 Python
Python求算数平方根和约数的方法汇总
Mar 09 Python
python读取图片并修改格式与大小的方法
Jul 24 Python
python同时遍历数组的索引和值的实例
Nov 15 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
Jan 29 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
Jun 24 Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
Aug 09 Python
python2和python3实现在图片上加汉字的方法
Aug 22 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
Jun 17 Python
python可视化大屏库big_screen示例详解
Nov 23 Python
python神经网络 使用Keras构建RNN训练
May 04 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中替换字符串中的空格为逗号','的方法
2014/06/09 PHP
PHP基于IMAP收取邮件的方法示例
2017/08/07 PHP
JavaScript 学习笔记(十一)
2010/01/19 Javascript
ASP.NET jQuery 实例9  通过控件hyperlink实现返回顶部效果
2012/02/03 Javascript
js判断屏幕分辨率的代码
2013/07/16 Javascript
js获取日期:昨天今天和明天、后天
2014/06/11 Javascript
javascript使用正则表达式检测IP地址
2014/12/03 Javascript
javascript自动恢复文本框点击清除后的默认文本
2016/01/12 Javascript
Angular.js回顾ng-app和ng-model使用技巧
2016/04/26 Javascript
vue实现重置表单信息为空的方法
2018/09/29 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
小程序实现按下录音松开识别语音
2019/11/22 Javascript
使用vue构建多页面应用的示例
2020/10/22 Javascript
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
为Python的web框架编写MVC配置来使其运行的教程
2015/04/30 Python
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
python读取文本中数据并转化为DataFrame的实例
2018/04/10 Python
Python基于多线程实现ping扫描功能示例
2018/07/23 Python
解决新django中的path不能使用正则表达式的问题
2018/12/18 Python
python爬虫之爬取百度音乐的实现方法
2019/08/24 Python
python lambda表达式(匿名函数)写法解析
2019/09/16 Python
pytorch 实现在预训练模型的 input上增减通道
2020/01/06 Python
Python return语句如何实现结果返回调用
2020/10/15 Python
Django-simple-captcha验证码包使用方法详解
2020/11/28 Python
Bibloo荷兰:女士、男士和儿童的服装、鞋子和配饰
2019/02/25 全球购物
.NET remoting中对象激活的两种方式
2015/06/08 面试题
大学生活学习的自我评价
2013/12/03 职场文书
大学生职业生涯规划书模板
2014/01/03 职场文书
防灾减灾日活动总结
2014/08/26 职场文书
小学生作文批改评语
2014/12/25 职场文书
2016年清明节网上祭英烈活动总结
2016/04/01 职场文书
分析MySQL抛出异常的几种常见解决方式
2021/05/18 MySQL
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python
实操Python爬取觅知网素材图片示例
2021/11/27 Python
Vue h函数的使用详解
2022/02/18 Vue.js
JS轻量级函数式编程实现XDM二
2022/06/16 Javascript