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中的zip函数使用示例
Jan 29 Python
Python中__new__与__init__方法的区别详解
May 04 Python
python3实现指定目录下文件sha256及文件大小统计
Feb 25 Python
python3 map函数和filter函数详解
Aug 26 Python
Django--权限Permissions的例子
Aug 28 Python
python实现身份证实名认证的方法实例
Nov 08 Python
利用python实现.dcm格式图像转为.jpg格式
Jan 13 Python
Pytorch maxpool的ceil_mode用法
Feb 18 Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
Feb 26 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
May 23 Python
Python爬虫获取页面所有URL链接过程详解
Jun 04 Python
python tkinter模块的简单使用
Apr 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
Protoss兵种对照表
2020/03/14 星际争霸
编译问题
2006/10/09 PHP
解析php中反射的应用
2013/06/18 PHP
php四种基础算法代码实例
2013/10/29 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(一)
2014/06/23 PHP
Laravel 5框架学习之表单验证
2015/04/08 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
JQuery中使用on方法绑定hover事件实例
2014/12/09 Javascript
NodeJS使用jQuery选择器操作DOM
2015/02/13 NodeJs
js同源策略详解
2015/05/21 Javascript
javascript日期操作详解(脚本之家整理)
2015/09/05 Javascript
小巧强大的jquery layer弹窗弹层插件
2015/12/06 Javascript
Bootstrap每天必学之标签页(Tab)插件
2020/08/09 Javascript
深入理解React Native原生模块与JS模块通信的几种方式
2017/07/24 Javascript
react 创建单例组件的方法
2018/04/26 Javascript
angular 组件通信的几种实现方式
2018/07/13 Javascript
Swiper.js实现移动端元素左右滑动
2019/09/08 Javascript
[02:12]Dota 2 推出全新英雄—— 电炎绝手
2019/08/23 DOTA
Python实现的金山快盘的签到程序
2013/01/17 Python
用Python实现换行符转换的脚本的教程
2015/04/16 Python
获取Django项目的全部url方法详解
2017/10/26 Python
Python利用递归实现文件的复制方法
2018/10/27 Python
利用python脚本如何简化jar操作命令
2019/02/24 Python
使用PyCharm进行远程开发和调试的实现
2019/11/04 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
2020/07/13 Python
Python如何把字典写入到CSV文件的方法示例
2020/08/23 Python
python自动化测试三部曲之unittest框架的实现
2020/10/07 Python
CSS3 实现弹跳的小球动画
2020/10/26 HTML / CSS
HTML5获取当前地理位置并在百度地图上展示的实例
2020/07/10 HTML / CSS
加利福尼亚州威尼斯的女性奢侈品设计师服装和概念店:Mona Moore
2018/09/13 全球购物
企业元宵节主持词
2014/03/25 职场文书
户籍证明模板
2014/09/28 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书
《社戏》教学反思
2016/02/22 职场文书
Java8利用Stream对列表进行去除重复的方法详解
2022/04/14 Java/Android
基于Redission的分布式锁实战
2022/08/14 Redis