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实现的去除win下文本文件头部BOM的代码
Feb 10 Python
Python中的lstrip()方法使用简介
May 19 Python
python统计cpu利用率的方法
Jun 02 Python
利用ctypes提高Python的执行速度
Sep 09 Python
浅析python3字符串格式化format()函数的简单用法
Dec 07 Python
PyCharm 设置SciView工具窗口的方法
Jan 15 Python
python 字典 setdefault()和get()方法比较详解
Aug 07 Python
基于Python实现大文件分割和命名脚本过程解析
Sep 29 Python
使用Keras加载含有自定义层或函数的模型操作
Jun 10 Python
Python 实现键盘鼠标按键模拟
Nov 18 Python
解决numpy数组互换两行及赋值的问题
Apr 17 Python
Python Flask实现进度条
May 11 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中array_merge和array相加的区别分析
2013/06/17 PHP
关于PHP堆栈与列队的学习
2013/06/21 PHP
mantis安装、配置和使用中的问题小结
2014/07/14 PHP
php中getservbyport与getservbyname函数用法实例
2014/11/18 PHP
CI框架实现优化文件上传及多文件上传的方法
2017/01/04 PHP
PHP htmlspecialchars() 函数实例代码及用法大全
2018/09/18 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
2020/03/23 PHP
JavaScript Event学习第二章 Event浏览器兼容性
2010/02/07 Javascript
js 函数的副作用分析
2011/08/23 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox
2014/05/02 Javascript
浅谈javascript回调函数
2014/12/07 Javascript
预防网页挂马的方法总结
2016/11/03 Javascript
js实现文字选中分享功能
2017/01/25 Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
一个小时快速搭建微信小程序的方法步骤
2019/04/15 Javascript
Node.js API详解之 timer模块用法实例分析
2020/05/07 Javascript
vue router-link 默认a标签去除下划线的实现
2020/11/06 Javascript
[06:25]DOTA2英雄梦之声_第17期_大地之灵
2014/06/20 DOTA
Python使用chardet判断字符编码
2015/05/09 Python
python利用有道翻译实现&quot;语言翻译器&quot;的功能实例
2017/11/14 Python
Python实现检测文件MD5值的方法示例
2018/04/11 Python
详解Python装饰器
2019/03/25 Python
pycharm新建一个python工程步骤
2019/07/16 Python
Python 字符串类型列表转换成真正列表类型过程解析
2019/08/26 Python
Python操作Excel把数据分给sheet
2020/05/20 Python
HTML5 语音搜索只需一句代码
2013/01/03 HTML / CSS
html5教程调用绘图api画简单的圆形代码分享
2013/12/04 HTML / CSS
法国春天百货官网:Printemps.com
2020/06/29 全球购物
科室工作个人总结的自我评价
2013/10/29 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
高校群众路线教育实践活动剖析材料
2014/10/10 职场文书
商超业务员岗位职责
2015/02/13 职场文书
鉴史问廉观后感
2015/06/10 职场文书
赞助商致辞
2015/07/30 职场文书
Apache Hudi的多版本清理服务彻底讲解
2022/03/31 Servers