Django处理HTTP 请求中装饰器的使用
在学习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 代码是类似的