我正在尝试设置电子邮件错误记录,我想测试它。
在Django中触发500错误的简单方法是什么?令人惊讶的是,这里还没有讨论过。
答案 0 :(得分:25)
这样的测试视图将起作用:
from django.http import HttpResponse
def my_test_500_view(request):
# Return an "Internal Server Error" 500 response code.
return HttpResponse(status=500)
或使用烘焙错误类:
from django.http import HttpResponseServerError
def my_test_500_view(request):
# Return an "Internal Server Error" 500 response code.
return HttpResponseServerError()
答案 1 :(得分:3)
提高适当的Exception
是最可靠的测试方法。如@agconti的答案一样,返回任何形式的HttpResponse
都将不允许您测试错误 handling 的行为。您只会看到一个空白页。引发异常会触发正确的响应代码,并触发您期望的内部Django行为,并带有“真实”错误。
响应代码500表示服务器不知道要做什么。最简单的方法是写入测试或测试视图raise Exception('Make response code 500!')
。
除引发特定响应代码的异常外,还应引发其他大多数错误。这是您可能会提出的complete list of Django exceptions。
答案 2 :(得分:1)
古老的问题,但我希望这对以后的人有所帮助。接受的答案并不能真正回答原始问题... 您可以通过引发ApiException使用django rest框架轻松做到这一点:
from rest_framework.exceptions import APIException
try:
...
except ...:
raise ApiException('custom exception message')
这将从您的视图返回状态为500的响应。如果您要从API调用另一个函数,并且不想管理此函数的返回值来确定是否返回状态为500的响应,则该功能非常有用。 您可以像这样使用它:
raise ApiException
默认响应消息(在撰写本文时)将为“发生服务器错误”。
有一些预定义的ApiException子类会引发不同类型的错误,请检查文件rest_framework.exceptions,如果需要一个不存在的子类,则可以这样扩展ApiException:
from rest_framework.exceptions import APIException
class YourCustomApiExceptionName(APIException):
def __init__(self, status, detail):
self.status_code = status
self.detail = detail
用法:
raise YourCustomApiExceptionName(100, 'continue')
您还可以定义自定义状态和详细信息,但在大多数情况下没有太大意义。