【发布时间】:2014-10-14 20:11:45
【问题描述】:
是否可以在 django 中将 BadRequest 引发为异常?
我看到你可以提出 404 [1]。
用例:在辅助方法中,我从 request.GET 加载 json。如果在浏览器 (IE) 剪切 url 后 json 被剪切,我想提出一个匹配的异常。
BadRequest 异常看起来很合适,但到目前为止,django 中似乎没有这样的异常。
在 1.6 中有一个 SuspiciousOperation 异常。但这在我的情况下不匹配,因为它与安全无关。
当然,我可以在视图方法中的辅助方法周围放一个 try..except,但这不是 DRY。
有没有人解决我不需要尝试的解决方案。每次调用我的辅助方法时都会出现异常?
[1]https://docs.djangoproject.com/en/1.6/ref/exceptions/#django.core.urlresolvers.Resolver404
更新
代码示例:
def my_view(request):
data=load_data_from_request(request) # I don't want a try..except here: DRY
process_data(data)
return django.http.HttpResponse('Thank you')
def load_data_from_request(request):
try:
data_raw=json.loads(...)
except ValueError, exc:
raise BadRequest(exc)
...
return data
【问题讨论】:
-
为什么不直接返回
django.http.HttpResponseBadRequest? -
如果你想干,让你的帮助方法返回适当的
HttpResponse类,或者在它周围创建另一个快捷方式,比如load_json_or_bad_request()。 -
@ambi 我不想返回
django.http.HttpResponseBadRequest,因为我的方法返回解析后的数据,除了输入数据损坏。 -
@guettli 更新后,我认为您应该提出一个自定义异常并按照 Coldmind 的建议在中间件中处理它。这与
get_object_or_404使用的机制相同
标签: python django exception-handling httpresponse