我的问题与Django REST Framework中的机制有关,我们可以通过调用request.data字典获取请求数据。问题是当我们要读取字典中没有的键时。当然,我们可以尝试检查request.data是否包含所需的密钥,如下所示:
if not 'time_begin' in request.data:
raise APIException()
如您所见,如果所需密钥没有数据,Django REST Framework将通过响应API显示以下信息:
{
"detail": "A server error occurred."
}
否则,如果我不使用if-instruction来检查字典中键的存在,我有以下错误:
MultiValueDictKeyError at /address/
"'time_begin'"
我的问题是:我可以不使用代码检查密钥的存在吗?它有臭不使用吗?如果我关闭Django调试并且字典中没有想要的密钥,服务器响应HTTP 500 - 所以在某些方面它是可以的。另一方面,如果我必须检查字典中的许多字段,我的代码会非常重复。你觉得怎么样?
感谢您的帮助
答案 0 :(得分:2)
500s并不是一个很有意义的回应。你应该验证几乎所有事情。为了保持DRY,您可以创建辅助函数来解决一般问题。类似的东西:
def validate_request(req, keys):
for key in keys:
if key not in request.data:
raise APIException('request.data missing key "{}"'.format(key))
编辑:您必须处理异常并将验证错误返回到请求来自的位置。如果您尝试使用RESTful,那么您可以将status codes用于任何消息,或者使用带有验证错误的JSON响应等。取决于您的用例。