gpt4 book ai didi

python - 如何为 REST View 类使用 @condition 装饰器

转载 作者:行者123 更新时间:2023-11-28 22:44:23 24 4
gpt4 key购买 nike

我正在尝试使用 ETAG HTTP header 发送 304 NOT MODIFIED 响应。使用以下代码:

class MyView(GenericAPIView):
serializer_class = MySerializer

@condition(etag_func=get_language_etag)
def get(self, request, *args, **kwargs):
return Response(self.get_cached_response())

问题出在get方法的'self'参数上。这会在条件方法的开头混淆 @condition 生成器方法中的参数:

def condition(etag_func=None, last_modified_func=None):
def decorator(func):
@wraps(func, assigned=available_attrs(func))
def inner(request, *args, **kwargs):

现在“self”被分配给请求,实际请求以 *args 结束。

有没有人遇到过关于装饰器及其预期参数顺序的类似问题?

最佳答案

drf-extensions提供缓存和 ETag 混入,您可以在 View 中使用它们,而不是使用 Django 提供的那些。

https://chibisov.github.io/drf-extensions/docs/#cache-etag-mixins

在DRF没有使用标准的HttpResponse类之前,是不可能使用Django提供的方法的,大多数装饰者都期待它。

关于python - 如何为 REST View 类使用 @condition 装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29557374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com