【问题标题】:In django, how can I get detailed error information in ajax?在 django 中,如何在 ajax 中获取详细的错误信息?
【发布时间】:2019-04-22 06:05:29
【问题描述】:

我正在学习使用 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】:

    这对初学者来说是一个相当大的问题。一般来说,后端部分应该确定一切是否正常,并将状态码/结果/等发送到 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”机制来避免它。

    【讨论】:

    • 非常感谢您的帮助!我已经按照您的建议更改了 view.py。终于成功了!!!
    猜你喜欢
    • 2021-12-23
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    相关资源
    最近更新 更多