Python Django是否有即时http响应的异常?
Django Tastypie有Python Django是否有即时http响应的异常?,python,django,Python,Django,Django Tastypie有ImmediateHttpResponse异常,允许向客户端返回即时响应: raise ImmediateHttpResponse(response='a message') Django有,但我找不到一个更普遍的异常,比如ImmediateHttpResponse 您使用什么技术向客户返回即时400响应 例如,具有模型: class Subscriber(Model): def delete(self, *args, **kwargs):
ImmediateHttpResponse
异常,允许向客户端返回即时响应:
raise ImmediateHttpResponse(response='a message')
Django有,但我找不到一个更普遍的异常,比如ImmediateHttpResponse
您使用什么技术向客户返回即时400响应
例如,具有模型:
class Subscriber(Model):
def delete(self, *args, **kwargs):
raise ImmediateHttpResponse('Deleting subcribers is not allowed!')
尝试删除一个对象将向客户端返回一个带有给定消息的
400
响应。这不是一个例外,但有一个例外,这是您的正常HttpResponse
,但使用400
Http404
例外很简单,它没有什么特别之处:
class Http404(Exception):
pass
因此,如果您必须:
class Http400(Exception):
pass
与Http404
没有太大区别,因为它也是一个通用的异常
,但有一个特定的属性,这使得它更像HttpResponseBadRequest
:
class ImmediateHttpResponse(TastypieError):
"""
This exception is used to interrupt the flow of processing to immediately
return a custom HttpResponse.
Common uses include::
* for authentication (like digest/OAuth)
* for throttling
"""
_response = HttpResponse("Nothing provided.")
def __init__(self, response):
self._response = response
@property
def response(self):
return self._response
我想你想要的是一个实现了 它的工作原理是这样的:在视图上引发异常(例如,ImmediateHttpResponse)。如果中间件捕获到异常,中间件将返回一个响应,在您的示例中,状态为400。如果您没有捕获异常,Django最终将捕获它,返回状态500(服务器错误)或其他状态
最简单的例子是捕获Http404的中间件。如果在中间件中捕获到异常Http404,则可以返回任何想要的响应(状态200、400等)。如果您没有捕获(即中间件的process_exception方法返回None),Django将为您捕获它并返回状态为404的响应。这是一个
HttpResponse
类,我需要一个异常,我可以在任何地方提出,而不仅仅是在viewsDjango.http.Http404中,以一种特殊的方式处理django.http.Http404
异常,呈现404
模板。我想要另一个特殊的异常,它将返回给客户端一个带有给定消息的400
响应。我可以定义一个自定义异常并编写一个中间件来捕获它,并呈现一个400
响应,但我想知道Django中是否已经存在这样的异常;由于它是一个正常的HttpResponse
,因此您可以将任何额外的有效负载一起发送回。我可以使用HttpResponseBadRequest
,但是我需要将逻辑放入视图中。我不想触碰视图,我想在任何级别引发异常。在模型中放置立即HttPresponse
异常与在视图中放置逻辑是一样的。您的模型不应该知道实现层(HTTP?TCP?这有什么关系?),所以您应该创建自己的异常(例如,NotAllowedOperation
),然后您的视图将捕获此异常并返回一个HttpResponseBadRequest
。是的,我知道是否。