吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1027|回复: 9
收起左侧

[求助] AJAX异步请求Django数据

[复制链接]
西方记者 发表于 2020-7-25 11:31
<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: /
[25/Jul/2020 11:15:30] "GET / HTTP/1.1" 404 1945
Not Found: /favicon.ico
[25/Jul/2020 11:15:30] "GET /favicon.ico HTTP/1.1" 404 1996
[25/Jul/2020 11:15:37] "GET /hello/ HTTP/1.1" 200 11
<QueryDict: {}>

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

jimo 发表于 2020-7-25 13:00
这个排版。。我不知道你在说啥
 楼主| 西方记者 发表于 2020-7-25 15:22
jimo 发表于 2020-7-25 13:00
这个排版。。我不知道你在说啥

第一次发帖请见谅,就是想做到AJAX向Django发起请求,然后Django响应请求发送数据回去,但貌似在ajax发送请求处就出了问题
不忘初心哟 发表于 2020-7-25 17:06
Url:
[Python] 纯文本查看 复制代码
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),                  #提交的数据
]


视图函数
[Python] 纯文本查看 复制代码
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
[Python] 纯文本查看 复制代码
 <script>
        function  AjaxSubmit2() {                                {#Query_Ajax发送GET请求#}
            $.ajax({
                url: '/ajax1.html',                              {#传给ajax1.html#}
                type:'POST',                                     {#POST方式#}
                data: {'xixi':123},                              {#传输数据#}
                success:function (arg) {
                }
            })
        }
    </script>


很简单基础的东西 结合自己的写吧
thepoy 发表于 2020-7-26 18:43
从你的终端信息来看,你ajax发送的是POST,但django收到的是GET,应该是这里的问题吧。排版弄好一点,才有人回你。
 楼主| 西方记者 发表于 2020-7-27 21:05
不忘初心哟 发表于 2020-7-25 17:06
Url:
[mw_shl_code=python,true]from django.conf.urls import url
from django.contrib import admin

十分感谢!!!
 楼主| 西方记者 发表于 2020-7-27 21:06
thepoy 发表于 2020-7-26 18:43
从你的终端信息来看,你ajax发送的是POST,但django收到的是GET,应该是这里的问题吧。排版弄好一点,才有 ...

谢谢建议,下次发帖一定注意
thepoy 发表于 2020-7-27 23:27
西方记者 发表于 2020-7-27 21:06
谢谢建议,下次发帖一定注意

问题解决了吗?
thepoy 发表于 2020-7-27 23:38
本帖最后由 thepoy 于 2020-7-27 23:40 编辑

你的视图函数里应该对不同的方法进行区分,比较好的是用类视图,拿一个我之前写的例子给你参考一下:
# 这是一个模拟用户登录的类视图
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的话,可以参考:

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
 楼主| 西方记者 发表于 2020-7-28 11:27
thepoy 发表于 2020-7-27 23:38
你的视图函数里应该对不同的方法进行区分,比较好的是用类视图,拿一个我之前写的例子给你参考一下:
[md] ...

是的,类视图检查起来很方便;之前的问题应该是出在请求方式和url上,已经解决了,感谢!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 14:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表