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获取Linux下文件版本信息、公司名和产品名的方法
Oct 05 Python
Python数据类型学习笔记
Jan 13 Python
Python切换pip安装源的方法详解
Nov 18 Python
Python 分享10个PyCharm技巧
Jul 13 Python
Python利用PyExecJS库执行JS函数的案例分析
Dec 18 Python
Python JSON编解码方式原理详解
Jan 20 Python
离线状态下在jupyter notebook中使用plotly实例
Apr 24 Python
jupyter notebook运行命令显示[*](解决办法)
May 18 Python
Django正则URL匹配实现流程解析
Nov 13 Python
python process模块的使用简介
May 14 Python
基于flask实现五子棋小游戏
May 25 Python
Python初识逻辑与if语句及用法大全
Aug 07 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 采集书并合成txt格式的实现代码
2009/03/01 PHP
PHP 字符串分割和比较
2009/10/06 PHP
PHP中构造函数和析构函数解析
2014/10/10 PHP
Yii2结合Workerman的websocket示例详解
2018/09/10 PHP
phpinfo无法显示的原因及解决办法
2019/02/15 PHP
JavaScript更改class和id的方法
2008/10/10 Javascript
基于JQuery的日期联动实现代码
2011/02/24 Javascript
jQuery打印指定区域Html页面并自动分页
2014/07/04 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
2015/02/28 Javascript
JavaScript实现简单的二级导航菜单实例
2015/04/15 Javascript
JS命令模式例子之菜单程序
2016/10/10 Javascript
smartupload实现文件上传时获取表单数据(推荐)
2016/12/12 Javascript
JavaScript中利用for循环遍历数组
2017/01/15 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
2017/02/16 Javascript
如何选择适合你的JavaScript框架
2017/11/20 Javascript
JS 中document.write()的用法和清空的原因浅析
2017/12/04 Javascript
vue数据控制视图源码解析
2018/03/28 Javascript
微信小程序npm引入vant-weapp的踩坑记录
2019/08/01 Javascript
vue中实现动态生成二维码的方法
2020/02/21 Javascript
详解vue beforeEach 死循环问题解决方法
2020/02/25 Javascript
pyqt和pyside开发图形化界面
2014/01/22 Python
python连接MySQL数据库实例分析
2015/05/12 Python
Python图算法实例分析
2016/08/13 Python
使用Django2快速开发Web项目的详细步骤
2019/01/06 Python
python+openCV利用摄像头实现人员活动检测
2019/06/22 Python
Python3+Appium实现多台移动设备操作的方法
2019/07/05 Python
tensorflow之自定义神经网络层实例
2020/02/07 Python
使用py-spy解决scrapy卡死的问题方法
2020/09/29 Python
英国最大的纸工艺品商店:CraftStash
2018/12/01 全球购物
国家励志奖学金获奖感言
2014/01/09 职场文书
大学生学年自我鉴定
2014/02/10 职场文书
《大禹治水》教学反思
2014/04/27 职场文书
教师职位说明书
2014/07/29 职场文书
优秀乡村医生先进事迹材料
2014/08/23 职场文书
整顿机关作风心得体会
2014/09/10 职场文书
分析SQL窗口函数之聚合窗口函数
2022/04/21 Oracle