在django中,如何在ajax中获取详细的错误信息?

时间:2019-04-22 06:05:29

标签: jquery html ajax django

我正在用Django学习网络编程。目前,我正在尝试建立一个页面,用户可以更新其用户配置文件(例如电子邮件,昵称)。我正在使用ajax处理此数据。但是我只是想出一个问题,如何获得详细的Ajax错误信息?

例如,用户想要更新其昵称或电子邮件,但是他发布的昵称或电子邮件已存在于数据库中。在ajax中,我使用error:function (XMLHttpRequest, textStatus, errorThrown) {}来获取错误信息。但是我只会收到类似“ 500 Internal server error”的信息。但是,在浏览器控制台中,我可以看到“昵称”或“电子邮件”是否重复。所以我想知道我该如何知道哪一个是重复的?

我的 view.py 是:

@login_required
def edit_usr_profile(request):
    user = request.user
    objs = UserProfile.objects.filter(usr=user)
    usr_objs = UserProfile.objects.get(usr=user)
    if request.method == 'POST':
        if request.is_ajax():
            usr_objs.nickname = request.POST.get('nickname')
            usr_objs.email = request.POST.get('email')
            usr_objs.save()
    return render(request, 'account/edit_profile.html', {'objs':objs})

我的 ajax 代码是:

            $.ajax({
                type:'POST',
                url:'./',
                data:{
                    async: false,
                    nickname:usr_nickname,
                    email:usr_email,
                    csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val()
                },
                success:function () {
                    alert('New profile saved!')
                    //window.location.reload()
                },
                error:function (XMLHttpRequest, textStatus, errorThrown) {
                    alert('Error! Please check your entry and try again!')
                }
            })

如果您能帮助我,我将不胜感激!

1 个答案:

答案 0 :(得分:0)

这对于初学者来说是一个很大的问题。通常,后端部分应确定一切是否正常,然后将状态代码/结果/等发送给JavaScript部分。

#THIS CODE MAY NEEDS SOME MODIFY TO PUT IN USE.

@login_required
def edit_usr_profile(request):
    # AN RESULT DICT THAT SAVES YOUR STATUS INFO
    result = collections.OrderedDict()
    result['code'] = "-1"
    result['message'] = ""
    result['data'] = ""

    user = request.user
    objs = UserProfile.objects.filter(usr=user)
    usr_objs = UserProfile.objects.get(usr=user)

    if request.method == 'POST':
        if request.is_ajax():
            try:
                usr_objs.nickname = request.POST.get('nickname')
                usr_objs.email = request.POST.get('email')
                usr_objs.save()
                # CHANGE THE INFO AND STATUS AS YOUR WISH
                result['code'] = "1"
                result['message'] = "Success"
            except Exception as e:
                # SAVES THE ERROR INFO 
                result['code'] = "-1"
                result['message'] = "Failed with error:"+str(e)
    # RETURN THE RESULT DICT 
    return render(request, 'account/edit_profile.html', {'objs':objs,'resultInfo':result})

然后,您只需要判断JavaScript中的“代码”部分并确定是否显示信息即可。

通常,Web应用程序不应将其作为功能的一部分而出现500个错误。请尝试使用“尝试捕获”机制来避免这种情况。