我正在编写几个视图,并希望验证请求主体。常见的情况是主体必须是一个JSON对象,并且存在某些键。我写了一个视图,代码如下:
try:
body = json.loads(request.body)
except ValueError:
return InvalidInputResponse("Could not load request body")
if not isinstance(body, dict):
return InvalidInputResponse("Request body was not a JSON object")
if set(body.keys()) != {'author', 'title', 'content'}:
return InvalidInputResponse("Request object missing keys")
InvalidInputResponse
是http.HttpResponse
的子类。在
我想在其他视图中重用此代码。我真正想做的是:
^{pr2}$然而,由于现在的代码,我不能这样做。我要做的是:
body = process_body(request.body, required_keys={'author', 'title', 'content'})
if isinstance(body, http.HttpResponse):
return body
# rest of code here ...
这有点难看。在
在Flask中,我可以创建一个自定义异常,名为InvalidInputException
,然后register an error handler for it。。。比如说,比如:
@app.errorhandler(InvalidInputException)
def handle_invalid_input(error):
return InvalidInputResponse(error.reason)
在Django中有没有一个等效的机制?如果没有等效的机制,那么处理这个问题的等效方法是什么?在
Django也有自定义的异常处理程序。它们可以附加via middleware。在
Django将返回任何中间件返回的第一个响应。注意,响应阶段以相反的顺序运行中间件。在
如果全局使用,只需添加到^{} 的末尾。对于非全局的情况,我使用了一个(稍微邪恶的)
^{pr2}$middleware_on_class
monkey patcher来完成这个任务:用作
相关问题 更多 >
编程相关推荐