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 相关文章推荐
pandas数值计算与排序方法
Apr 12 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
Jul 11 Python
Python 删除整个文本中的空格,并实现按行显示
Jul 24 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
Oct 22 Python
对Python实现简单的API接口实例讲解
Dec 10 Python
树莓派使用python-librtmp实现rtmp推流h264的方法
Jul 22 Python
Django app配置多个数据库代码实例
Dec 17 Python
Python子进程subpocess原理及用法解析
Jul 16 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
Jan 05 Python
Python用requests库爬取返回为空的解决办法
Feb 21 Python
pytorch 中forward 的用法与解释说明
Feb 26 Python
Python实战之用tkinter库做一个鼠标模拟点击器
Apr 27 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
谏山创故乡大分县日田市水坝将设立《进击的巨人》立艾伦、三笠以及阿尔敏的铜像!
2020/03/06 日漫
PHP 金额数字转换成英文
2010/05/06 PHP
PHP转换IP地址到真实地址的方法详解
2013/06/09 PHP
php上传后台无法收到数据解决方法
2019/10/28 PHP
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
JavaScript高级程序设计 读书笔记之十一 内置对象Global
2012/03/07 Javascript
javascript时区函数介绍
2012/09/14 Javascript
jquery实现的图片点击滚动效果
2014/04/29 Javascript
Jquery on方法绑定事件后执行多次的解决方法
2016/06/02 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
2016/06/24 Javascript
node.js实现回调的方法示例
2017/03/01 Javascript
react开发教程之React 组件之间的通信方式
2017/08/12 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
2018/03/06 Javascript
vue-router之nuxt动态路由设置的两种方法小结
2018/09/26 Javascript
vue实现Excel文件的上传与下载功能的两种方式
2019/06/28 Javascript
微信小程序实现拍照画布指定区域生成图片
2019/07/18 Javascript
React-redux实现小案例(todolist)的过程
2019/09/29 Javascript
通过js实现压缩图片上传功能
2020/02/25 Javascript
VueQuillEditor富文本上传图片(非base64)
2020/06/03 Javascript
vue组件中传值EventBus的使用及注意事项说明
2020/11/16 Javascript
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
python使用多线程不断刷新网页的方法
2015/03/31 Python
Python中super函数的用法
2017/11/17 Python
Python语言生成水仙花数代码示例
2017/12/18 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
利用Python半自动化生成Nessus报告的方法
2019/03/19 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
2020/03/16 Python
jupyter notebook 的工作空间设置操作
2020/04/20 Python
matlab中二维插值函数interp2的使用详解
2020/04/22 Python
Coggles美国/加拿大:高级国际时装零售商
2018/10/23 全球购物
香港现代设计家具品牌:Ziinlife Furniture
2018/11/13 全球购物
应届本科生推荐信范文
2013/12/25 职场文书
对公司的意见和建议
2015/06/04 职场文书
消费者理赔投诉书
2015/07/02 职场文书
pyqt5蒙版遮罩mask,setmask的使用
2021/06/11 Python
关于PHP数组迭代器的使用方法实例
2021/11/17 PHP