Javascript 在Django中使用ajax保存数据是行不通的
我正在尝试使用Javascript 在Django中使用ajax保存数据是行不通的,javascript,jquery,python,ajax,django,Javascript,Jquery,Python,Ajax,Django,我正在尝试使用jquery$.ajax将javascript中的数据保存到django视图,但浏览器控制台将显示以下错误: 这是我的javascript内容,其中包含$。ajax: var url = $(this).attr('action'); $.ajax({ type: 'POST', url : url, dataType : 'json', data:{ firstname : $('#firstnam
jquery$.ajax
将javascript
中的数据保存到django视图
,但浏览器控制台将显示以下错误:
这是我的javascript
内容,其中包含$。ajax
:
var url = $(this).attr('action');
$.ajax({
type: 'POST',
url : url,
dataType : 'json',
data:{
firstname : $('#firstname').val(),
lastname : $('#lastname').val(),
gender : $('#gender').val(),
birthdate : $('#bdate').val(),
age : $('#age').val(),
address : $('#address').val(),
mobile_no : $('#mobile').val(),
home_no : $('#home').val(),
email : $('#email').val(),
csrfmiddlewaretoken : $('input[name=csrfmiddlewaretoken]').val(),
},
success:function(data){
$('.bvc-emp-list-item-result').html(data)
},
});
这是我的视图。py
:
def create_employee(request):
if request.method == 'POST':
firstname = request.POST['firstname']
lastname = request.POST['lastname']
gender = request.POST['gender']
bdate = request.POST['bdate']
age = request.POST['age']
address = request.POST['address']
home_no = request.POST['home_no']
mobile_no = request.POST['mobile_no']
email = request.POST['email']
Employee.objects.create(
firstname = firstname,
lastname = lastname,
gender = gender,
bdate = bdate,
age = age,
address = address,
mobile_no = mobile_no,
home_no = home_no,
email = email
)
# Get all employee from db.
employees = Employee.objects.all()
return render_to_response(
'payroll/employee/employee-list-item.html', # template
{'employees' : employees }, # context
context_instance=RequestContext(request) # request
)
如果你想查看我的url.py
,在这里
from django.conf.urls import url
from . import views
app_name = 'payroll'
urlpatterns = [
# ex: /payroll/employee/create/
url(r'^employee/create/$', views.create_employee, name='create_employee')
]
我是WebDev新手,Django请帮助
更新
控制台日志生成POST
错误,现在添加了一个
XHR已完成加载:POST”http://127.0.0.1:8000/payroll/employee/create/“
现在,cmd
生成此回溯
Internal Server Error: /payroll/employee/create/
Traceback (most recent call last):
File "C:\Users\Web\Desktop\PyDev\projects\bvc_env\lib\site-packages\django\utils\datastructures.py", line 83, in __getitem__
list_ = super(MultiValueDict, self).__getitem__(key)
KeyError: 'bdate'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\Web\Desktop\PyDev\projects\bvc_env\lib\site-packages\django\core\handlers\base.py", line 149, in get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\Web\Desktop\PyDev\projects\bvc_env\lib\site-packages\django\core\handlers\base.py", line 147, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Web\Desktop\PyDev\projects\bvc_env\src\payroll\views.py", line 21, in create_employee
bdate = request.POST['bdate']
File "C:\Users\Web\Desktop\PyDev\projects\bvc_env\lib\site-packages\django\utils\datastructures.py", line 85, in __getitem__
raise MultiValueDictKeyError(repr(key))
django.utils.datastructures.MultiValueDictKeyError: "'bdate'"
[20/Jul/2016 13:10:35] "POST /payroll/employee/create/ HTTP/1.1" 500 18952
首先,您必须在Ajax请求调用中传递csrf令牌,请参见
否则,它将不允许您进行POST请求,它将作为GET请求,并且您的全部数据将以
request.GET
而不是request.POST的形式出现。因此,请尝试打印request.data
和request.post
,并根据使用request.data['firstname']
和request.post['firstname']
根据@solarismoke>的建议,我将请求更改为request.post['bdate']
因为在js文件中,变量是生日
而不是bdate
然后,当我开始进行日期解析时,Django跟踪告诉我以下错误:
ValueError:时间数据“1989年11月28日”与格式不匹配
“%Y-%m-%d”
所以我用这一行修改了代码,根据:
现在最后一个问题是
render_to_response
函数,因为在中,不建议使用该函数,而且将来可能会被弃用。我使用的是最新版本django 1.9
:
return render_to_response(
'payroll/employee/employee-list-item.html', # template
{'employees' : employees }, # context
context_instance=RequestContext(request) # request
)
我将其替换为以下代码:
return render(request,
'payroll/employee/employee-list-item.html',
{'employees' : employees }
)
在js文件中,我将数据类型值替换为html
它现在工作正常。500错误意味着Django遇到了错误。检查控制台/错误日志以了解错误原因。通过查看,我可以看到您的代码中至少有一个错误-
Employee.object.create
应该是Employee.objects.create
。我怀疑我的js
文件中也有一个错误。您的js中的错误不会导致服务器响应500次。在任何情况下,您都需要一次修复一件事情…发布整个错误回溯,而不仅仅是最后的错误消息。它应该包含对导致错误的代码行的引用。您没有发布bdate
字段。。。因此出现了错误。您正在发布一个birthdate
字段,该字段可能是您需要在视图中获取的代码:bdate=request.POST['birthdate']
。
return render(request,
'payroll/employee/employee-list-item.html',
{'employees' : employees }
)