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的Tornado框架的异步任务与AsyncHTTPClient
Jun 27 Python
Python字符串和字典相关操作的实例详解
Sep 23 Python
深入了解Python中pop和remove的使用方法
Jan 09 Python
如何使用Python的Requests包实现模拟登陆
Apr 27 Python
Python版名片管理系统
Nov 30 Python
python+pyqt5实现KFC点餐收银系统
Jan 24 Python
Python中asyncio模块的深入讲解
Jun 10 Python
python3.4+pycharm 环境安装及使用方法
Jun 13 Python
浅析python 中大括号中括号小括号的区分
Jul 29 Python
Django Admin中增加导出CSV功能过程解析
Sep 04 Python
django从后台返回html代码的实例
Mar 11 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
Apr 16 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编程获取音频文件时长的方法【基于getid3类】
2017/04/20 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
2017/08/18 PHP
laravel 中某一字段自增、自减的例子
2019/10/11 PHP
取得一定长度的内容,处理中文
2006/12/20 Javascript
JavaScript 原型链学习总结
2010/10/29 Javascript
判断用户的在线状态 onbeforeunload事件
2011/03/05 Javascript
基于jquery实现的类似百度搜索的输入框自动完成功能
2011/08/23 Javascript
javascript中xml操作实现代码
2011/11/21 Javascript
js 字符串转换成数字的三种方法
2013/03/23 Javascript
定时器(setTimeout/setInterval)调用带参函数失效解决方法
2013/03/26 Javascript
javaScript 页面自动加载事件详解
2014/02/10 Javascript
jQuery的text()方法用法分析
2014/12/20 Javascript
JS实现自适应高度表单文本框的方法
2015/02/25 Javascript
js实现数组转换成json
2015/06/26 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
js多个物体运动功能实例分析
2016/12/20 Javascript
原生JS实现图片左右轮播
2016/12/30 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
2017/01/19 Javascript
Angular2学习教程之TemplateRef和ViewContainerRef详解
2017/05/25 Javascript
jQuery validata插件实现方法
2017/06/25 jQuery
详解如何使用Node.js编写命令工具——以vue-cli为例
2017/06/29 Javascript
vue.js获得当前元素的文字信息方法
2018/03/09 Javascript
JS实现滑动拼图验证功能完整示例
2020/03/29 Javascript
vue实现简单学生信息管理
2020/05/30 Javascript
js实现翻牌小游戏
2020/07/31 Javascript
python读取html中指定元素生成excle文件示例
2014/04/03 Python
Python读取Excel的方法实例分析
2015/07/11 Python
python数据库编程 ODBC方式实现通讯录
2020/03/27 Python
python 使用三引号时容易犯的小错误
2020/10/21 Python
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
Foot Locker意大利官网:全球领先的运动鞋和服装零售商
2017/05/30 全球购物
Super-Pharm波兰:药房和香水在一个地方
2020/08/18 全球购物
拾金不昧锦旗标语
2014/06/27 职场文书
护理工作个人总结
2015/03/03 职场文书
2016年第十四个公民道德宣传日活动总
2016/04/01 职场文书
解决go在函数退出后子协程的退出问题
2021/04/30 Golang