AJAX异步请求Django数据
<script>//setInterval(
//function test() {
$.ajax({
type:"POST",
//提交方式
url:"{% url 'hello' %}",
//提交地址
data:{
'xixi':123
},
headers:{ "X-CSRFToken":$.cookie('csrftoken') },
//提交的数据
dataType:"text",
//传输格式
success:function(data){
//回调函数,data接收的为异步提交返回结果
//alert(data)
$("#FlowTest").html(data);
// "FlowTest"指的是需要刷新的div
},
error:function () {
alert("获取数据异常");
}
});
//},1000)
</script>
views.py
def hello(request):
context = {}
#context['hello']='hello world!'
#return render(request,'hello.html',context)
print(request.POST)
person = {
# 'UserName': 'balabala',
'Age': 18,
# 'Height': 187
}
#response = JsonResponse(person)
return JsonResponse(person)
小白参考网上的博文,想通过AJAX发送请求把Django数据传到js中,但是每次运行QueryDict总是为空(正常其中内容应该为我ajax发送的数据)
Not Found: /
"GET / HTTP/1.1" 404 1945
Not Found: /favicon.ico
"GET /favicon.ico HTTP/1.1" 404 1996
"GET /hello/ HTTP/1.1" 200 11
<QueryDict: {}> 这个排版。。我不知道你在说啥 jimo 发表于 2020-7-25 13:00
这个排版。。我不知道你在说啥
第一次发帖请见谅{:1_907:},就是想做到AJAX向Django发起请求,然后Django响应请求发送数据回去,但貌似在ajax发送请求处就出了问题{:1_924:} Url:
from django.conf.urls import url
from django.contrib import admin
from ajax_app import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index.html$', views.index),
url(r'^ajax1.html$', views.ajax1), #提交的数据
]
视图函数
from django.shortcuts import render,HttpResponse
def index(request): #主页面发送请求
return render(request,'index.html')
def ajax1(request): #接收ajax提交的数据
print(request.POST) #接收到:<QueryDict: {'xixi': ['123']}>
return HttpResponse('...')
Ajax
<script>
functionAjaxSubmit2() { {#Query_Ajax发送GET请求#}
$.ajax({
url: '/ajax1.html', {#传给ajax1.html#}
type:'POST', {#POST方式#}
data: {'xixi':123}, {#传输数据#}
success:function (arg) {
}
})
}
</script>
很简单基础的东西 结合自己的写吧 从你的终端信息来看,你ajax发送的是POST,但django收到的是GET,应该是这里的问题吧。排版弄好一点,才有人回你。 不忘初心哟 发表于 2020-7-25 17:06
Url:
from django.conf.urls import url
from django.contrib import admin
十分感谢!!!{:1_893:} thepoy 发表于 2020-7-26 18:43
从你的终端信息来看,你ajax发送的是POST,但django收到的是GET,应该是这里的问题吧。排版弄好一点,才有 ...
谢谢建议,下次发帖一定注意{:1_896:} 西方记者 发表于 2020-7-27 21:06
谢谢建议,下次发帖一定注意
问题解决了吗? 本帖最后由 thepoy 于 2020-7-27 23:40 编辑
你的视图函数里应该对不同的方法进行区分,比较好的是用类视图,拿一个我之前写的例子给你参考一下:
```python
# 这是一个模拟用户登录的类视图
class LoginView(View):
# 前端调用get时,类视图也调用get
def get(self, request):
return render(request, 'user/login.html')
# 前端调用post时,类视图也调用post,函数体内你可以写具体要实现的方法
def post(self, request):
login_form = UserLoginForm(request.POST)
if login_form.is_valid():
email = login_form.cleaned_data['email']
password = login_form.cleaned_data['password']
user = authenticate(username=email, password=password)
if user:
if user.is_start:
login(request, user)
url = request.COOKIES.get('url', '/')
response = redirect(url)
response.delete_cookie('url')
# return redirect(url).delete_cookie('url')
return response
else:
return HttpResponse('请点击邮件中的激活链接激活账号')
else:
return render(request, 'user/login.html', {'err': '邮箱或密码错误'})
else:
return render(request, 'user/login.html', context={'register_form': login_form})
```
你既然用ajax,我觉得你的使用环境可能是前后端分离,所以如果你用的是restfu的话,可以参考:
```python
class UsersAPIView(CreateAPIView):
serializer_class = UserSerializer
queryset = UserModel.objects.all()
def post(self, request, *args, **kwargs):
# action 是url中的参数
action = request.query_params.get('action')
if action == 'login':
name = request.data.get('name')
password = request.data.get('password')
try:
user = UserModel.objects.get(name=name)
if user.password != password:
raise exceptions.AuthenticationFailed
token = uuid.uuid4().hex
cache.set(token, user.id, timeout=60 * 60 * 24)
data = {
'status': 200,
'msg': '登录成功',
'token': token
}
return Response(data)
except UserModel.DoesNotExist:
raise exceptions.NotFound
elif action == 'register':
return self.create(request, *args, **kwargs)
else:
raise exceptions.ParseError
``` thepoy 发表于 2020-7-27 23:38
你的视图函数里应该对不同的方法进行区分,比较好的是用类视图,拿一个我之前写的例子给你参考一下:
...
是的,类视图检查起来很方便;之前的问题应该是出在请求方式和url上,已经解决了,感谢!{:1_893:}
页:
[1]