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脚本使得web页面上的代码高亮显示
Apr 24 Python
python3实现windows下同名进程监控
Jun 21 Python
PyQt5实现五子棋游戏(人机对弈)
Mar 24 Python
python3中利用filter函数输出小于某个数的所有回文数实例
Nov 24 Python
基于h5py的使用及数据封装代码
Dec 26 Python
Pandas —— resample()重采样和asfreq()频度转换方式
Feb 26 Python
解决windows下python3使用multiprocessing.Pool出现的问题
Apr 08 Python
python实现每天自动签到领积分的示例代码
Aug 18 Python
分享一个python的aes加密代码
Dec 22 Python
Python列表元素删除和remove()方法详解
Jan 04 Python
Python基础之tkinter图形化界面学习
Apr 29 Python
opencv用VS2013调试时用Image Watch插件查看图片
Jul 26 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 minixml详解
2008/07/19 PHP
一组PHP可逆加密解密算法实例代码
2014/01/21 PHP
js+php实现静态页面实时调用用户登陆状态的方法
2015/01/04 PHP
PHP实现阳历到农历转换的类实例
2015/03/07 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
PHP中的日期时间处理利器实例(Carbon)
2017/06/09 PHP
PHP中phar包的使用教程
2017/06/14 PHP
php curl发送请求实例方法
2019/08/01 PHP
php提供实现反射的方法和实例代码
2019/09/17 PHP
基于jQuery的动态表格插件
2011/03/28 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
AngularJS模块管理问题的非常规处理方法
2015/04/29 Javascript
Bootstrap CSS组件之大屏幕展播
2016/12/17 Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
2016/12/28 Javascript
VUE 实现复制内容到剪贴板的两种方法
2019/04/24 Javascript
详解使用uni-app开发微信小程序之登录模块
2019/05/09 Javascript
一文快速了解JQuery中的AJAX
2019/05/31 jQuery
原生js实现简单轮播图
2020/10/26 Javascript
python机器学习案例教程——K最近邻算法的实现
2017/12/28 Python
python for和else语句趣谈
2019/07/02 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
Python安装与卸载流程详细步骤(图解)
2020/02/20 Python
Python爬虫简单运用爬取代理IP的实现
2020/12/01 Python
伦敦最著名的老字号百货公司:Selfridges(塞尔福里奇百货)
2016/07/25 全球购物
Lookfantastic德国官网:英国知名美妆购物网站
2017/06/11 全球购物
Gretna Green中文官网:苏格兰格林小镇
2019/10/16 全球购物
最新远光软件笔试题面试题内容
2013/11/08 面试题
计算机本科生自荐信
2013/10/15 职场文书
酒店管理专业毕业生自我鉴定
2014/09/29 职场文书
民事诉讼代理授权委托书
2014/10/11 职场文书
幼儿园老师新年寄语2015
2014/12/08 职场文书
2014年小学辅导员工作总结
2014/12/23 职场文书
2016年“世界气象日”广播稿
2015/12/17 职场文书
使用 Apache Dubbo 实现远程通信(微服务架构)
2022/02/12 Servers
JAVA springCloud项目搭建流程
2022/05/11 Java/Android
Moment的feature导致线上bug解决分析
2022/09/23 Javascript