我正在尝试将请求发布到django视图,但它会一直返回INTERNAL SERVER ERROR 500
。
我的ajax帖子:
$.ajax({
url : "/loginAction/",
type : "POST",
async : false,
data : {action:'loginAction',
email:email,
password:password},
success : function(response) {
$.niftyNoty({
type:"success",icon:"",title:"Login Successful. Redirecting....",container:"floating",timer:5000
});
},
error : function(xhr,errmsg,err) {
console.log(xhr.status + ": " + xhr.responseText);
$.niftyNoty({
type:"danger",icon:"",title:"Wrong Email OR Password",container:"floating",timer:5000
});
}
});
我的django观点:
def loginAction(request):
print "Its workjing"
if request.method == 'POST' and 'loginButton' in request.POST:
email = request.POST.get('email')
password = request.POST.get('password')
print email, password
return HttpResponse(json.dumps({}),content_type="application/json")
我的urls.py
urlpatterns = [
url(r'^', views.loginPage, name='loginPage'),
url(r'^loginAction/', views.loginAction, name='loginAction')
]
ajax POST没有点击django视图。它不是在控制台中打印Its working
。所以它不会将json响应返回给ajax调用。我也试过普通的表格POST,但结果相同。我正在使用django 1.9.2。我无法弄清楚为什么会出现这个错误?
它返回此错误代码:
Internal Server Error: /loginAction/
Traceback (most recent call last):
File "/home/manish/Desktop/admin_picknbox/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 158, in get_response
% (callback.__module__, view_name))
ValueError: The view login_app.views.loginPage didn't return an HttpResponse object. It returned None instead.
编辑: ajax标题:
jQuery(document).ready(function($){
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
});
答案 0 :(得分:5)
似乎您的网址存在问题,因为在出现错误时,虽然您转到loginPage
,但仍会调用/loginAction/
视图。因此,请尝试在每个正则表达式的末尾添加$
,如下所示:
urlpatterns = [
url(r'^$', views.loginPage, name='loginPage'),
url(r'^loginAction/$', views.loginAction, name='loginAction')
]
因为您的第一个正则表达式r'^'
似乎捕获了任何网址。
答案 1 :(得分:1)
您的视图函数不会处理所有情况,如果if request.method == 'POST' and 'loginButton' in request.POST:
为False
,您查看函数不会返回任何内容,因此会出错。如果没有明确的return
语句,Python函数将返回None
。
修改强>
如果您的print
语句甚至没有执行,那么您必须从django获得403响应。当你进行ajax调用时,你需要传递csrf
令牌,以防止来自不明身份者的攻击。 Django会自动检查csrf
,但您需要将其作为数据的一部分传递:
data : {action:'loginAction',
email:email,
password:password,
csrfmiddlewaretoken: '{{ csrf_token }}'},
此外,您应该检查"action" in request.POST
而不是"loginAction" in request.POST
。
答案 2 :(得分:0)
我有一天收到此错误,但后来我意识到返回内部服务器错误的页面与我要返回的html页面同名。我只是更改了我不想返回的html页面的名称,并且一切正常