码迷,mamicode.com
首页 > Web开发 > 详细

Django处理HTTP 请求中装饰器的使用

时间:2015-04-01 17:07:48      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:

在学习Django的过程中,看见通过装饰器对view进行装饰,使得view可以提前处理Etag,if-modify-since以及检测请求的类型

 

先谈谈检测请求的类型:

我们知道Django的view是不区分请求的方法的,也就是说对于一个相同的URL,无论你是get或是post,你都会进入到一个相同的处理逻辑中。

当然我们可以自己在view中检测request.method. 但是如果提取到一个公共的需求的角度,可以认为每一个view都需要检测对应的方法。

 

首先看下我们希望如何使用:

 

#app.view file

@check_method("[‘GET‘,‘HEAD‘]")
def handle_view(request,*para,**kw):
    // handle request

 

我们的handle_view 期望只处理GET和HEAD过来的请求

分析下我们的装饰器,这个装饰器需要接受列表参数表明期望的方法的,该装饰器装饰的函数需要能处理任意的参数

 

#decorate

def check_method(method_list):
    def _deco(func):
        @functools.wrap(func)
        def    __deco(request,*para,**kw):
            if request.method in method_list:
                return func(request,*para,**kw)
            else:
                return "method not allowed"
        return __deco
    return _deco

 

可以看出来使用定义好的装饰器会非常方便

 

对于期望在view之前提前处理Etag,if-modify-since 代码是类似的

 

Django处理HTTP 请求中装饰器的使用

标签:

原文地址:http://www.cnblogs.com/leon-zhu/p/4383989.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!