如何在Django中返回HTTP 400响应?

mar*_*mnl 54 django python-2.7

如果请求GET数据无效且无法解析,我想从我的django视图函数返回HTTP 400响应.

我该怎么做呢?似乎没有Exception像404这样的相应类:

raise Http404
Run Code Online (Sandbox Code Playgroud)

Amb*_*ise 44

从我之前的评论:

您可以返回HttpResponseBadRequest

此外,您可以创建一个像Http404这样的Exception子类来拥有自己的Http400异常.

问候,

  • 你能说明如何创建一个Exception子类吗?Django`BaseHandler`专门查找`Http404`类型并始终使用状态代码404,我看不到一种干净的方法来连接您自己的异常和状态代码 (11认同)

Bri*_*man 24

您可以执行以下操作:

from django.core.exceptions import SuspiciousOperation
raise SuspiciousOperation("Invalid request; see documentation for correct paramaters")
Run Code Online (Sandbox Code Playgroud)

SuspiciousOperation映射到https://github.com/django/django/blob/master/django/core/handlers/base.py第207行的400响应


mim*_*imo 18

从 Django 3.2 开始,您还可以引发BadRequest异常:

from django.core.exceptions import BadRequest

raise BadRequest('Invalid request.')
Run Code Online (Sandbox Code Playgroud)

在某些情况下,这可能比SuspiciousOperation另一个答案中提到的更好,因为它不记录安全事件;请参阅有关例外的文档


rgi*_*gan 12

如果您使用的是Django Rest Framework,则有两种方法可以在视图中引发400响应:

from rest_framework.exceptions import ValidationError, ParseError

raise ValidationError

# or 
raise ParseError
Run Code Online (Sandbox Code Playgroud)

  • 此外,如果您想引用特定字段:`raise ValidationError({"some_field": "some error"})` (3认同)
  • 您还可以使用 raise ValidationError("some message")` 来渲染带有响应的数据。 (2认同)