0

我在视图上有一个自定义装饰器,我必须在处理一些请求变量后缓存该视图。我的装饰器代码是这样的

def custom_dec(view_func):
    @wraps(view_func, assigned=available_attrs(view_func))
    def wrapper(request,filters,*args,**kwargs):
        # do some processing on request and filters
        return csrf_exempt(cache_page(900, view_func))
return wrapper

我已将装饰器应用为:

@custom_dec
def myview(request,filters,*args,**kwargs):
    # view code here

问题是运行此代码在通过中间件时给我一个错误:

异常类型:AttributeError
异常值:“function”对象没有属性“status_code”

当我查看响应时,它是函数 myview 而不是视图的响应。
回复<function myview at 0xb549e534>

我的代码有什么问题?

更新:如果我将 warpper 函数中的返回值更改为,代码运行良好, return view_func这意味着我在应用缓存页面装饰器时必须做错事。

4

1 回答 1

0

原来我必须返回一个 HttpResponse 对象。当我将代码更改为:

def custom_dec(view_func):
    @wraps(view_func, assigned=available_attrs(view_func))
    def wrapper(request,filters,*args,**kwargs):
        # do some processing on request and filters
        cached_func = cache_page(900, view_func)
        return cached_func(request,filters,*args,**kwargs) #this returns an HttpResponse object
        # the above two line could also be written as cache_page(900, view_func)(request,filters,*args,**kwargs)
return wrapper 
于 2013-08-29T12:46:33.953 回答