我尝试在AJAX调用中使用Django,它给了我http500甚至多值dictkeyerror,即使没有什么问题?在
我发送了3个变量:sendmail,username,error
我可以使用请求.POST在3个变量上,得到以下输出:
sendmail=真
用户名=someUserName
错误=登录
但是,返回的网页带有http500
在视图.py以下内容:def loginUser(request):
username = ""
type = ""
logger = logging.getLogger('views.logger.login')
try:
username = request.POST['username'];
logger.info("User:" + username + " in Login Page")
except MultiValueDictKeyError:
logger.info("Cannot Identify User")
try:
type = request.POST['submit']
logger.info("User:" + username + " requests:" + type)
except MultiValueDictKeyError:
logger.info("Cannot Identify User's Request")
if(type=="Login"):
try:
username = request.POST['username']
password = request.POST['password']
logger.info("UserName:" + username + " is trying to login")
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
logger.info("User is active, and logged in")
return redirect('index.html')
else:
logger.info("User is not active, and will not be logged in")
return redirect('disabled.html')
else:
logger.info("User:" + username + " is not valid");
context = {'Status': "Please sign in", 'Error': "Invalid", 'username':username}
return render(request, 'webapp/login.html', context)
except MultiValueDictKeyError:
logger.info("The user have missing forms")
context = {'Status': "Please sign in", 'Error': "Null"}
return render(request, 'webapp/login.html', context)
except Exception as e:
context = {'Status': "Please sign in", 'Error': "Null"}
return render(request, 'webapp/register.html', context)
logger.error("Error occured in Registering user");
logger.error("Error:" + str(e.args))
elif(type == "Register"):
logger.info("Redirecting user to Register Page")
return redirect('/webapp/register.html')
else:
logger.info("Startup Login Page");
context = {'Status': "Please sign in", 'Error': "Null"}
return render(request, 'webapp/login.html', context)
def ajax_sendMail(request):
logger = logging.getLogger('views.logger.sendEmail')
sendEmail = request.POST['email']
username = request.POST['username']
error = request.POST['error']
logger.info("Sending email to admins, sendEmail:" + sendEmail + ", username:" + username + ", error:" + error)
if(sendEmail == "true"):
mail_admins("User:" + username + " failed to " + error, "The time of error is at:" + datetime.datetime.now())
return HttpResponse("Success in Sending Email")
在登录.html以下内容:
^{pr2}$
在网址.py以下内容:from django.conf.urls import patterns, include, url
from django.contrib import admin
from django.contrib.auth.views import logout
from WebApp import views
urlpatterns = patterns('',
url(r'^index', views.index, name='index'),
url(r'^login', views.loginUser, name='login'),
url(r'^logout', views.logoutUser, name='logout'),
url(r'^register', views.registerUser, name='register'),
url(r'^sendMail', views.ajax_sendMail, name='sendMail'),
)
在登录.js以下内容:var main = function()
{
if(errorMessage == "Invalid")
{
$('#myModal').modal("show");
}
else
{
$('#myModal').modal("hide");
};
$("#sendErrorEmail").click(function(event)
{
var csrftoken = getCookie('csrftoken');
event.preventDefault();
$.ajax(
{
type:"POST",
url:"sendMail/",
data:{
'email': "true",
'error': "login",
'username' : username,
'csrfmiddlewaretoken':csrftoken
}
});
$('#myModal').modal("hide");
return false;
});
};
//To get the csrf token
function getCookie(name)
{
var cookieValue = null;
if (document.cookie && document.cookie != '')
{
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++)
{
var cookie = jQuery.trim(cookies[i]);
if (cookie.substring(0, name.length + 1) == (name + '='))
{
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
$(document).ready(main);
我成功地发送了AJAX POST调用视图.py我能够得到我的数据。以下是记录器详细信息:2014-09-04 16:04:20,901 [INFO] views.logger.login: User:adfafasdfa requests:Login
2014-09-04 16:04:20,901 [INFO] views.logger.login: UserName:adfafasdfa is trying to login
2014-09-04 16:04:21,124 [INFO] views.logger.login: User:adfafasdfa is not valid
2014-09-04 16:04:22,095 [INFO] views.logger.sendEmail: Sending email to admins, sendEmail:true, username:adfafasdfa, error:login
我能够得到sendmail、username和Error,但是它仍然调用http500 multivaluedictkeyrerror。在MultiValueDictKeyError at /webapp/sendMail/
"'email'"
Request Method: GET
Request URL: http://127.0.0.1:8000/webapp/sendMail/
Django Version: 1.6.5
Exception Type: MultiValueDictKeyError
Exception Value:
"'email'"
Exception Location: C:\Python27\lib\site-packages\django\utils\datastructures.py in __getitem__, line 301
Python Executable: C:\Python27\python.exe
Python Version: 2.7.6
有人知道为什么会这样吗?很奇怪。。。在
更奇怪的是chrome inspect element工具
Chrome Inspect Element工具的屏幕截图:
上面说这是一个帖子,但是,当你进去的时候:
它显示了一个得到