为了与 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)