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

问题描述 投票:0回答:1

我正在学习Django的网络编程。目前我正在尝试构建一个用户可以更新其用户配置文件的网页(例如电子邮件,昵称)。我正在使用ajax来处理这些数据。但我想出了一个问题,我怎样才能获得详细的ajax错误信息?

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

我的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!')
                }
            })

如果你能帮助我,我将非常感激!

jquery html ajax django
1个回答
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个错误作为其功能的一部分。尝试使用“Try-catch”机制来避免它。

© www.soinside.com 2019 - 2024. All rights reserved.