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制作微信跳一跳辅助
Jan 31 Python
python 将json数据提取转化为txt的方法
Oct 26 Python
Django渲染Markdown文章目录的方法示例
Jan 02 Python
利用selenium爬虫抓取数据的基础教程
Jun 10 Python
Django 实现前端图片压缩功能的方法
Aug 07 Python
利用python在大量数据文件下删除某一行的例子
Aug 21 Python
Python3 Tkinkter + SQLite实现登录和注册界面
Nov 19 Python
python创建学生管理系统
Nov 22 Python
用python爬取历史天气数据的方法示例
Dec 30 Python
基于python实现语音录入识别代码实例
Jan 17 Python
python实现取余操作的简单实例
Aug 16 Python
sublime3之内网安装python插件Anaconda的流程
Nov 10 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函数常用用法小结
2010/02/08 PHP
一个选择最快的服务器转向代码
2009/04/27 Javascript
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
asp.net中System.Timers.Timer的使用方法
2013/03/20 Javascript
JQuery中$.ajax()方法参数详解及应用
2013/12/12 Javascript
jQuery获得IE版本不准确webbrowser的解决方法
2014/02/23 Javascript
jQuery中closest和parents的区别分析
2015/05/07 Javascript
jQuery的事件预绑定
2016/12/05 Javascript
理解javascript中的Function.prototype.bind的方法
2017/02/03 Javascript
js中删除数组中的某一元素实例(无下标时)
2017/02/28 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
Angular中的interceptors拦截器
2017/06/25 Javascript
WebSocket的通信过程与实现方法详解
2018/04/29 Javascript
关于在vue 中使用百度ueEditor编辑器的方法实例代码
2018/09/14 Javascript
redux.js详解及基本使用
2019/05/24 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
2019/08/14 Javascript
vue项目使用.env文件配置全局环境变量的方法
2019/10/24 Javascript
python多线程抓取天涯帖子内容示例
2014/04/03 Python
python if not in 多条件判断代码
2016/09/21 Python
Python 正则表达式入门(中级篇)
2016/12/07 Python
Linux CentOS7下安装python3 的方法
2018/01/21 Python
Selenium 模拟浏览器动态加载页面的实现方法
2018/05/16 Python
python 多进程并行编程 ProcessPoolExecutor的实现
2019/10/11 Python
django框架auth模块用法实例详解
2019/12/10 Python
pytorch之inception_v3的实现案例
2020/01/06 Python
tensorflow 获取checkpoint中的变量列表实例
2020/02/11 Python
完美解决pycharm 不显示代码提示问题
2020/06/02 Python
Python如何测试stdout输出
2020/08/10 Python
宿舍卫生检讨书
2014/01/16 职场文书
少儿节目主持串词
2014/04/02 职场文书
个人三严三实对照检查材料
2014/09/25 职场文书
走群众路线学习笔记
2014/11/06 职场文书
暂住证证明
2015/06/19 职场文书
2015年教师节感言
2015/08/03 职场文书
禁毒心得体会范文
2016/01/15 职场文书
python办公自动化之excel的操作
2021/05/23 Python