我正在尝试使用以下代码检查数据库中是否有条目:
def device_update(request):
json_data = json.loads(request.body)
email = json_data['email']
imei = json_data['imei']
sdk_version = json_data['sdk_version']
date = json_data['updateDate']
rule = json_data['ruleName']
group_name = json_data['group']
if Group.objects.filter(group=group_name).exists():
print("group does exists")
else:
print("group doesn't exists")
return HttpResponse("Successful")
但是,当代码到达if语句以检查该组是否存在时,它将返回错误500。
我试图检查两组是否存在,而另一组则不存在,在两种情况下都出现错误500。
我该如何解决?为什么会这样?
答案 0 :(得分:2)
检查Group
是否存在的逻辑,即该行:
if Group.objects.filter(group=group_name).exists()
没有在这里抛出错误。 json_data
可能缺少您期望的键之一,例如'group'
。
我建议使用get
method that dictionaries have。当字典中不存在指定的键时,它将提供默认值。当请求正文不是有效的JSON格式时,您还应该进行错误处理。
这是一个例子:
def device_update(request):
try:
json_data = json.loads(request.body)
except json.JSONDecodeError:
return HttpResponse('Request body must be in valid JSON format')
email = json_data.get('email', '')
imei = json_data.get('imei', '')
sdk_version = json_data.get('sdk_version', '')
date = json_data.get('updateDate', '')
rule = json_data.get('ruleName', '')
group_name = json_data.get('group', '')
if Group.objects.filter(group=group_name).exists():
print("group does exists")
else:
print("group doesn't exists")
return HttpResponse("Successful")
我将默认值设置为空字符串''
,但您可能需要更改它。
答案 1 :(得分:1)
您的视图没有任何错误处理。快速查看,至少有两件事可能出错。请求正文可能不是有效的json,并且如果它是有效的json,则可能不包含必需的键。
def device_update(request):
try:
json_data = json.loads(request.body)
except ValueError:
return HttpResponse("Invalid json")
try:
email = json_data['email']
imei = json_data['imei']
sdk_version = json_data['sdk_version']
date = json_data['updateDate']
rule = json_data['ruleName']
group_name = json_data['group']
except KeyError as e:
return HttpResponse("Missing Key %s" % e[0])
...
像这样为单个视图编写自己的验证是可以的。随着变得越来越复杂,您可能需要查看django rest框架。它具有序列化程序,可帮助您管理验证。
答案 2 :(得分:0)
阿拉斯代尔/凯塞尔梅,看来您的观点是正确的。 尝试将ipdb放入代码中以调试代码,然后可以打印request.data并查看请求中的内容。