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
例外値: 「関数」オブジェクトに属性「status_code」がありません

at respone を見ると、ビューの応答ではなく関数 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 に答える