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重新引入被覆盖的自带function
Jul 16 Python
python快速查找算法应用实例
Sep 26 Python
利用Python的Django框架生成PDF文件的教程
Jul 22 Python
Python 40行代码实现人脸识别功能
Apr 02 Python
查找python项目依赖并生成requirements.txt的方法
Jul 10 Python
利用python求积分的实例
Jul 03 Python
Django多数据库的实现过程详解
Aug 01 Python
使用python爬取抖音app视频的实例代码
Dec 01 Python
python 如何对logging日志封装
Dec 02 Python
Python Socket多线程并发原理及实现
Dec 11 Python
python中Mako库实例用法
Dec 31 Python
Django debug为True时,css加载失败的解决方案
Apr 24 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
让你同时上传 1000 个文件 (一)
2006/10/09 PHP
php mysql Errcode: 28 终极解决方法
2009/07/01 PHP
PHP中去除换行解决办法小结(PHP_EOL)
2011/11/27 PHP
使用PHP实现蜘蛛访问日志统计
2013/07/05 PHP
php中的PHP_EOL换行符详细解析
2013/10/26 PHP
PHP中date与gmdate的区别及默认时区设置
2014/05/12 PHP
PHP的APC模块实现上传进度条
2015/10/27 PHP
PHP常用文件操作函数和简单实例分析
2016/06/03 PHP
php实现遍历文件夹的方法汇总
2017/03/02 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
2019/10/15 PHP
js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动)
2013/12/11 Javascript
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
javascript中$(function() {});写与不写有哪些区别
2015/08/10 Javascript
通过BootStrap-select插件 js jQuery控制select属性变化
2017/01/03 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
Node.js 8 中的重要新特性
2017/06/28 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
jQuery实现基本淡入淡出效果的方法详解
2018/09/05 jQuery
微信小程序车牌号码模拟键盘输入功能的实现代码
2018/11/11 Javascript
Vue实现购物车详情页面的方法
2019/08/20 Javascript
微信头像地址失效踩坑记附带解决方案
2019/09/23 Javascript
electron 安装,调试,打包的具体使用
2019/11/06 Javascript
完美解决通过IP地址访问VUE项目的问题
2020/07/18 Javascript
使用Python构建Hopfield网络的教程
2015/04/14 Python
python遍历数组的方法小结
2015/04/30 Python
python连接mongodb密码认证实例
2018/10/16 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
2020/03/17 Python
html5 svg 中元素点击事件添加方法
2013/01/16 HTML / CSS
项目建议书范文
2014/05/12 职场文书
奥林匹克运动会口号
2014/06/19 职场文书
安全生产目标管理责任书
2014/07/25 职场文书
2014年实习班主任工作总结
2014/11/08 职场文书
考博导师推荐信范文
2015/03/27 职场文书
工程移交协议书
2016/03/24 职场文书
2016年全国爱牙日宣传活动总结
2016/04/05 职场文书
mysql 子查询的使用
2022/04/28 MySQL