用于覆盖 post 方法的 Django REST 框架自定义装饰器
Posted
技术标签:
【中文标题】用于覆盖 post 方法的 Django REST 框架自定义装饰器【英文标题】:Django rest framework custom decorator for overriden post method 【发布时间】:2016-04-28 21:57:14 【问题描述】:我的大部分 ModelViewSet 都覆盖了 create 方法(创建对象时需要执行额外的操作)。
class MyModelViewSet(serializers.ModelSerializer):
def create(self, *args, **kwargs ):
# some code
return Response(
serializer.data,
status=status.HTTP_201_CREATED,
headers=headers
)
我还想为那些创建方法定义一个装饰器函数,例如这样:
def post_shower(func):
@wraps(func)
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
print result
return result
return wrapper
基本上我需要响应状态、标头、新对象数据。当我运行这段代码时,我得到了
ContentNotRenderedError: The response content must be rendered before it can be accessed.
在
print result
关于如何在装饰器中获取数据有什么建议吗? 谢谢
【问题讨论】:
也许您可以提供更多关于哪个 sn-p 实际抛出错误的详细信息,第一次或第二次。在任何情况下,如果您的视图返回TemplateResponse
,您应该手动调用render()
来访问它的内容,因为它不会被自动调用See Manually calling a class based generic view
【参考方案1】:
通过response.data
访问新对象数据,通过response.status_code
访问状态。通过 Response 对象的 dict-like 接口,正式地一一访问标头。或通过response._headers
一次性非正式地全部完成。
【讨论】:
以上是关于用于覆盖 post 方法的 Django REST 框架自定义装饰器的主要内容,如果未能解决你的问题,请参考以下文章
如何覆盖 RetrieveAPIView 响应 django rest 框架
django-rest-framework - POST 请求返回“方法 \"GET\" 不允许。”