Django检查实例是否存在会导致内部服务器错误500

2024-05-29 02:38:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用以下代码检查数据库中是否有条目:

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")

但是,如果错误存在,则当错误到达组500时,返回check。在

我试着检查两组,一组存在,另一组不存在,在这两种情况下,我都得到了错误500。在

我怎样才能解决这个问题?为什么会这样?在


Tags: 代码name数据库jsondataversionemailrequest
3条回答

您的视图没有任何错误处理。快看,至少有两件事会出问题。请求正文可能不是有效的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框架。它的序列化程序将帮助您管理验证。在

检查Group是否存在的逻辑,即行:

if Group.objects.filter(group=group_name).exists()

不会在这里抛出错误。很可能是json_data缺少您期望它拥有的一个键,例如,'group'。在

我建议使用^{} method that dictionarieshave。当指定的键不在字典中时,这将提供默认值。当请求主体不是有效的JSON格式时,还应该有错误处理。在

下面是一个例子:

^{pr2}$

我将默认值设置为空字符串'',但您可能需要更改它。在

阿拉斯代尔/凯塞尔梅,看来你的观点是正确的。 尝试将ipdb放入代码中以便调试代码,然后可以打印请求数据看看请求中的内容。在

相关问题 更多 >

    热门问题