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通过ftplib登录到ftp服务器的方法
May 08 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
Mar 16 Python
python编程嵌套函数实例代码
Feb 11 Python
python脚本作为Windows服务启动代码详解
Feb 11 Python
python实现京东秒杀功能
Jul 30 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
Nov 08 Python
关于win10在tensorflow的安装及在pycharm中运行步骤详解
Mar 16 Python
解决Jupyter无法导入已安装的 module问题
Apr 17 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
Oct 12 Python
Django集成MongoDB实现过程解析
Dec 01 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
Feb 25 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
Mar 03 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
递归列出所有文件和目录
2006/10/09 PHP
一个简单的php实现的MySQL数据浏览器
2007/03/11 PHP
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
php的ZipArchive类用法实例
2014/10/20 PHP
瀑布流布局并自动加载实现代码
2013/03/12 Javascript
JQuery对表格进行操作的常用技巧总结
2014/04/23 Javascript
JavaScript数据库TaffyDB用法实例分析
2015/07/27 Javascript
javascript原型继承工作原理和实例详解
2016/04/07 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
2016/05/16 Javascript
浅析BootStrap栅格系统
2016/06/07 Javascript
Vue引入Stylus知识点总结
2020/01/16 Javascript
Python学习笔记(二)基础语法
2014/06/06 Python
一个小示例告诉你Python语言的优雅之处
2014/07/04 Python
python集合类型用法分析
2015/04/08 Python
Python内置函数 next的具体使用方法
2017/11/24 Python
python实现扫描日志关键字的示例
2018/04/28 Python
使用Python获取网段IP个数以及地址清单的方法
2018/11/01 Python
Python sklearn KFold 生成交叉验证数据集的方法
2018/12/11 Python
总结Python图形用户界面和游戏开发知识点
2019/05/22 Python
Numpy与Pytorch 矩阵操作方式
2019/12/27 Python
python tkinter 设置窗口大小不可缩放实例
2020/03/04 Python
简单了解python调用其他脚本方法实例
2020/03/26 Python
python实现简单坦克大战
2020/03/27 Python
Python读取二进制文件代码方法解析
2020/06/22 Python
中国专业的综合网上购物商城:京东
2016/08/02 全球购物
澳大利亚儿童和婴儿产品在线商店:Lime Tree Kids
2017/10/05 全球购物
为您搜罗全球潮流時尚品牌:HBX
2019/12/04 全球购物
党课培训心得体会
2014/09/02 职场文书
争先创优心得体会
2014/09/12 职场文书
5.12护士节活动总结
2015/02/10 职场文书
卫生主题班会
2015/08/14 职场文书
导游词之藏龙百瀑景区
2019/12/30 职场文书
python3 hdf5文件 遍历代码
2021/05/19 Python
漫画「古见同学有交流障碍症」第25卷封面公开
2022/03/21 日漫
vue-cil之axios的二次封装与proxy反向代理使用说明
2022/04/07 Vue.js
Python爬取奶茶店数据分析哪家最好喝以及性价比
2022/09/23 Python