标签: django-drf-renderer

Django Rest Framework:从 mixin 的 dispatch 方法返回响应

为了与 slack 交互,服务器需要能够基于某种加密散列验证请求。如果此检查返回 false,则服务器应以 400 响应。将其作为 mixin 执行此操作似乎是明智的:

class SlackValidationMixin:
    def dispatch(self, request, *args, **kwargs):
        if validate_slack_request(request):
            return super().dispatch(request, *args, **kwargs)
        else:
            return Response(status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)

这给出了错误“accepted_renderer not set on Response”基于一个SO问题,我添加了以下内容:

class SlackValidationMixin:
    def dispatch(self, request, *args, **kwargs):
        if validate_slack_request(request):
            return super().dispatch(request, *args, **kwargs)
        else:
            response = Response(status=status.HTTP_400_BAD_REQUEST)
            response.accepted_renderer = JSONRenderer
            response.accepted_media_type = "application/json"
            response.renderer_context = {}
            return response
Run Code Online (Sandbox Code Playgroud)

但这给出了错误: AttributeError: 'NoneType' object has no attribute 'get_indent'

为什么它需要一个accepted_renderer,因为它只响应一个HTTP 状态代码,没有额外的数据?解决这个问题的最简单方法是什么?

以下建议使 EmptyResponse 对象从 Response 继承:

Traceback (most recent call last):
  File "path/lib/python3.8/site-packages/django/core/handlers/exception.py", line …
Run Code Online (Sandbox Code Playgroud)

django dispatch django-rest-framework django-drf-renderer

2
推荐指数
1
解决办法
1020
查看次数