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 代码是类似的

 

转载于:https://www.cnblogs.com/leon-zhu/p/4383989.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值