Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django是否有即时http响应的异常?_Python_Django - Fatal编程技术网

Python Django是否有即时http响应的异常?

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):

Django Tastypie有
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
。是的,我知道是否。