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中lambda的用法及其与def的区别解析
Jul 28 Python
在Python中操作字符串之rstrip()方法的使用
May 19 Python
python获取各操作系统硬件信息的方法
Jun 03 Python
python简单猜数游戏实例
Jul 09 Python
Python数据类型详解(三)元祖:tuple
May 08 Python
python编码总结(编码类型、格式、转码)
Jul 01 Python
Python、 Pycharm、Django安装详细教程(图文)
Apr 12 Python
python3.5安装python3-tk详解
Apr 26 Python
简单了解python变量的作用域
Jul 30 Python
python内存管理机制原理详解
Aug 12 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
Mar 20 Python
用python发送微信消息
Dec 21 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
利用static实现表格的颜色隔行显示的代码
2007/09/02 PHP
PHP学习散记_编码(json_encode 中文不显示)
2011/11/10 PHP
使用PHP静态变量当缓存的方法
2013/11/13 PHP
php socket实现的聊天室代码分享
2014/08/16 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
javascript prototype 原型链
2009/03/12 Javascript
让浏览器DOM元素最后加载的js方法
2014/07/29 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
jQuery实现根据类型自动显示和隐藏表单
2015/03/18 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
JS实现点击按钮后框架内载入不同网页的方法
2015/05/05 Javascript
javascript事件冒泡和事件捕获详解
2015/05/26 Javascript
JQuery查找DOM节点的方法
2015/06/11 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
2016/12/14 Javascript
深入理解Javascript箭头函数中的this
2017/02/13 Javascript
Vue如何引入远程JS文件
2017/04/20 Javascript
详解用webpack把我们的业务模块分开打包的方法
2017/07/20 Javascript
jQuery事件对象的属性和方法详解
2017/09/09 jQuery
vue中使用cookies和crypto-js实现记住密码和加密的方法
2018/10/18 Javascript
Vue CL3 配置路径别名详解
2019/05/30 Javascript
Python subprocess模块学习总结
2014/03/13 Python
python实现定时同步本机与北京时间的方法
2015/03/24 Python
Python中处理时间的几种方法小结
2015/04/09 Python
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
Sanic框架蓝图用法实例分析
2018/07/17 Python
Django的用户模块与权限系统的示例代码
2019/07/24 Python
大学生年度自我鉴定
2013/10/31 职场文书
总经理秘书岗位职责
2014/03/17 职场文书
年终奖发放方案
2014/06/02 职场文书
好的促销活动方案
2014/08/21 职场文书
房屋租赁协议书(标准版)
2014/10/02 职场文书
课外活动总结
2015/02/04 职场文书
2015年信访工作总结
2015/04/07 职场文书
公司职员入党自传书
2015/06/26 职场文书