本想做一个表单验证来熟悉一下ajax的功能,但是跟着教程敲一样的代码,自己的django却没法接收到页面ajax发送的数据,接收到的全是none,一步步调试过,也发现不了问题,后来自己另起一个app写了一个表单验证,django却能收到ajax的数据并返回data,不知道原先的代码出什么问题了,csrf也注释掉了,还是收不到ajax的数据。
已经试过加上{% csrf_token %} 了,没用,注释掉了setting.py里的csrf拦截了。
另外,把自己的代码和教程做了比对,是一样的,但是教程用的是django1.8,自己用的是2.0,不知道是不是版本问题?把自己的代码替换到教程里面的源码里也不行
// 请把代码文本粘贴到下方(请勿用图片代替代码)
views文件:
def ajax(request):
ret = {'status':True,'error':None,'data':None}
try:
h = request.POST.get('hostname')
i = request.POST.get('IP')
p = request.POST.get('port')
c = request.POST.get('agent')
print(type(h))
if h and len(h) > 5:
models.Host.objects.create(hostname = h,ip = i, port = p,b_id = c)
else:
ret['status'] = False
ret['error'] = '太短了'
except Exception as e:
ret['status'] = False
ret['error'] = '请求错误'
return HttpResponse(json.dumps(ret))
urls.py文件:
from django.contrib import admin
from django.urls import path,re_path
from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('host/',views.host),
re_path('business/',views.business),
path('ajax/',views.ajax),]
html代码:(<body>部分)
<form id="add_form" action="/host/" method="POST">
{% csrf_token %}
主机名:<input type="text" name="hostname" id="h1"><span id="error_msg"></span><br>
IP:<input type="text" name="IP" id="i1"><br>
端口:<input type="text" name="port" id="p1"><br>
<select name="agent" id="s1">业务线
{% for i in v2 %}
<option value="{{i.b_id}}">{{i.b__caption}}</option>
{% endfor %}
</select>
<input type="submit" value="提交" >
<input type="button" value="取消" >
<a id="a1">ajax提交</a>
</form>
<script src="/static/jquery-3.3.1.js"></script>
<script>
$(function(){
$('#a1').click(function(){
$.ajax({
url:"/ajax/",
type:'PSOT',
data:$('#add_form').serialize(),
success:function(data){
var obj = JSON.parse(data);
if(obj.status){
location.reload()
}else{
$('#error_msg').text(obj.error)
}
}
})
})
})
</script>
需要整个django文件测试的,希望留下邮箱,请各位大神帮个忙了!
斯蒂芬大帝
万千封印
相关分类