首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ajax与django采用json进行数据交互

ajax与django采用json进行数据交互

作者头像
菲宇
发布2019-06-13 11:03:18
发布2019-06-13 11:03:18
2.3K00
代码可运行
举报
文章被收录于专栏:菲宇菲宇
运行总次数:0
代码可运行

1新建django项目名为json_ajax,应用名为app,在templates模板中新建ajax.html文件

ajax.html

代码语言:javascript
代码运行次数:0
运行
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ajax</title>
    {% load staticfiles %}
    <script type="text/javascript" src="{% static 'js/jquery-3.3.1.min.js' %}"></script>
</head>
<body>
<button id="send">发送</button>
<script>
    $("#send").click(function () {
        {#json数据#}
        var post_data={
            "name":"weihu",
        };

        $.ajax({
            url:"http://127.0.0.1:8000/ajax",
            type:"POST",
            {#发送json数据到服务器#}
            data:post_data,

            {#请求成功回调函数#}
            success:function (data) {
                alert(data)
                alert("请求成功")
            },
            {#请求失败回调函数#}
            error:function () {
                alert("服务器请求超时,请重试!")
            }

        });
    });
</script>
</body>
</html>

2.在settings配置文件中,注释

1

# 'django.middleware.csrf.CsrfViewMiddleware',

代码语言:javascript
代码运行次数:0
运行
复制
STATIC_URL = '/static/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

3.在urls.py文件中,配置path路径

代码语言:javascript
代码运行次数:0
运行
复制
"""json_ajax URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/2.0/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from app import views


urlpatterns = [
    path('admin/', admin.site.urls),
    path('test',views.test),
    path('ajax',views.ajax),
]

4.在views.py中,实现逻辑代码

代码语言:javascript
代码运行次数:0
运行
复制
from django.shortcuts import render,HttpResponse
import json

def test(request):
    return render(request,'ajax.html')

def ajax(request):
    if request.method=="POST":
        name=request.POST.get('name')
        print("ok")
        status=1
        result="sucuss"
        return HttpResponse(json.dumps({
            "status":status,
            "result":result,
            "name":name
        }))

Django将数据库查询数据QuerySet转换成JSON格式

1.采用Django Model层,ORM技术 转换成JSON格式

代码语言:javascript
代码运行次数:0
运行
复制
1 def getdata(request):
2    # 使用ORM
3    # all()返回的是QuerySet 数据类型;values()返回的是ValuesQuerySet 数据类型
4    data = models.VM.objects.values('id', 'ip', 'host', 'username')
5    data = serializers.serialize("json", tomcats)
6    return JsonResponse(list(data), safe=False)

2.完全弃用Django Model层,纯SQL 转换成JSON格式

代码语言:javascript
代码运行次数:0
运行
复制
1 def getdata(request):
2 # 使用SQL
3     with connection.cursor() as cursor:
4         cursor.execute('select id, machine, tomcathome, ipaddress, description from tomcatData')
5         data = dictfetchall(cursor)
6     return JsonResponse(data, safe=False, json_dumps_params={'ensure_ascii': False})
代码语言:javascript
代码运行次数:0
运行
复制
1 # 将返回结果转换成字典
2 def dictfetchall(cursor):
3     "Return all rows from a cursor as a dict"
4     columns = [col[0] for col in cursor.description]
5     return [
6         dict(zip(columns, row))
7         for row in cursor.fetchall()
8     ]

JsonResponse 对象:

class JsonResponse(data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None,**kwargs)

这个类是HttpRespon的子类,它主要和父类的区别在于:

1.它的默认Content-Type 被设置为: application/json

2.第一个参数,data应该是一个字典类型,当 safe 这个参数被设置为:False ,那data可以填入任何能被转换为JSON格式的对象,比如list, tuple, set。 默认的safe 参数是 True. 如果你传入的data数据类型不是字典类型,那么它就会抛出 TypeError的异常。

3.json_dumps_params参数是一个字典,它将调用json.dumps()方法并将字典中的参数传入给该方法。

通过以上的解释,上面两个方法的JsonResponse()里面传入的参数就很清晰明了。

这样数据就会以JSON格式传入到前端,前端就能用AJAX获取到,并进行处理或者展示了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年01月07日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档