我正在用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!')
}
})
如果您能帮助我,我将不胜感激!
答案 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个错误。请尝试使用“尝试捕获”机制来避免这种情况。