文档章节

django返回json的几种方法以及android调用

刘新全
 刘新全
发布于 2015/12/28 22:16
字数 430
阅读 3419
收藏 2

用django做android后台,必不可缺少的就是返回json数据。返回json挺方便的,有以下几种方法:

1.最简单的一种(推荐)


model.py

class Click(models.Model):
    count = models.IntegerField()
    time = models.CharField(max_length=64, default="")
views.py

def json1(request):   
    all = Click.objects.values()
    return JSONResponse(all)
结果:


可能你需要的形式不是这样的,常用的是:

{“res”:"success", "msg":[{"count":1,"id":1,"time":"2015-12-12"},{"count":2,"id":2,"time":"2015-12-2"},{"count":3,"id":3,"time":"2015-12-3"}]}

需要修改views.py:


views.py

def json1(request):   
    all = Click.objects.values()
    return JSONResponse({"res":"success", "msg":all})
结果:


2.可以用框架djangorestframework.具体怎么用看官网,这只是个例子


model.py

class Click(models.Model):
    count = models.IntegerField()
    time = models.CharField(max_length=64, default="")
新建一个api.py文件,有点像struts2中的实例化



class ClickSerializer(serializers.ModelSerializer):
    class Meta:
        model = Click
        fields = ('id', 'count', 'time')
注意:id字段django会自动帮你创建(就是pk)


最后就是views.py


views.py

@csrf_exempt
def snippet_list(request):
    """
    List all code snippets, or create a new snippet.
    """
    if request.method == 'GET':
        snippets = Click.objects.all()
        serializer = ClickSerializer(snippets, many=True)
        return JSONResponse(serializer.data)

    elif request.method == 'POST':
        data = JSONParser().parse(request)
        serializer = ClickSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return JSONResponse(serializer.data, status=201)
        return JSONResponse(serializer.errors, status=400)
@csrf_exempt
def snippet_detail(request, pk):
    """
    Retrieve, update or delete a code snippet.
    """
    try:
        snippet = Click.objects.get(pk=pk)
    except Click.DoesNotExist:
        return HttpResponse(status=404)

    if request.method == 'GET':
        serializer = ClickSerializer(snippet)
        return JSONResponse(serializer.data)

    elif request.method == 'PUT':
        data = JSONParser().parse(request)
        serializer = ClickSerializer(snippet, data=data)
        if serializer.is_valid():
            serializer.save()
            return JSONResponse(serializer.data)
        return JSONResponse(serializer.errors, status=400)

    elif request.method == 'DELETE':
        snippet.delete()
        return HttpResponse(status=204)
结果:


3.如果你只是想把一个字典返回,用simplejson.dumps就可以了。


def jsonTest(request):
    #主要是返回需要的结构类型
    data = []
    data1 = {}
    data1["name"] = "me"
    data1["age"] = "23"
    json_data = serializers.serialize("json", all)
    data.append(data1)
    jsons = simplejson.dumps({"res":"success", "msg":data})
    return HttpResponse(jsons, content_type="application/json")
结果:


更多的资源可以查看我的另一篇博客---------django推荐书籍--------有一些使用django的资源

© 著作权归作者所有

共有 人打赏支持
刘新全
粉丝 13
博文 57
码字总数 29105
作品 0
兰州
程序员
私信 提问
django做android后台,怎么返回json数据。

在网上找了很多例子,试试不行: jsons = simplejson.dumps(data) return HttpResponse(jsons, content_type="application/json") 和 json_data = serializers.serialize("json", all) retur......

刘新全
2015/12/27
595
1
喜闻乐见-Android LaunchMode

launchMode,通俗点说,就是定义了Activity应该如何被launch的。那么这几种模式的区别以及应用场景,会有何不同呢?谷歌是基于什么原因设计这几种模式的呢?这几种模式背后的工作原理是什么呢...

Q吹个大气球Q
2018/10/01
0
0
Android Volley框架的几种post提交请求方式

首先简单描述一下Google的Android开发团队在2013年推出的一个网络通信框架Volley.它的设计目标是进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如下载文件等,Volley的...

gaolu
2014/08/08
0
1
【Android基础】页面跳转与传值(Activity跳转与传值)

一个Android应用程序很少会只有一个Activity对象,如何在多个Activity之间进行跳转,而且能够互相传值是一个很基本的要求。 本次我们就讲一下,Android中页面跳转以及传值的几种方式! Acti...

晨曦之光
2012/03/01
5.9K
0
Android onSaveInstanceState和onRestoreInstanceState触发的时机

先看Application Fundamentals上的一段话: Android calls onSaveInstanceState() before the activity becomes vulnerable to being destroyed by the system, but does not bother calling......

鉴客
2011/12/19
330
1

没有更多内容

加载失败,请刷新页面

加载更多

centos7重置密码、单用户模式、救援模式、ls命令、chmod命令

在工作当中如果我们错误的配置了文件使服务器不能正常启动或者忘记密码不能登录系统,如何解决这些问题呢?重装系统是可以实现的,但是往往不能轻易重装系统的,下面用忘记密码作为例子讲解如...

李超小牛子
今天
3
0
Python如何开发桌面应用程序?Python基础教程,第十三讲,图形界面

当使用桌面应用程序的时候,有没有那么一瞬间,想学习一下桌面应用程序开发?行业内专业的桌面应用程序开发一般是C++,C#来做,Java开发的也有,但是比较少。本节课会介绍Python的GUI(图形用...

程序员补给栈
今天
5
0
kafka在的使用

一、基本概念 介绍 Kafka是一个分布式的、可分区的、可复制的消息系统。它提供了普通消息系统的功能,但具有自己独特的设计。 这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统...

狼王黄师傅
今天
3
0
Android JNI总结

0x01 JNI介绍 JNI是Java Native Interface的缩写,JNI不是Android专有的东西,它是从Java继承而来,但是在Android中,JNI的作用和重要性大大增强。 JNI在Android中起着连接Java和C/C++层的作...

天王盖地虎626
昨天
3
0
大数据教程(11.8)Hive1.2.2简介&初体验

上一篇文章分析了Hive1.2.2的安装,本节博主将分享Hive的体验&Hive服务端和客户端的使用方法。 一、Hive与hadoop直接的关系 Hive利用HDFS存储数据,利用MapReduce查询数据。 二、Hive与传统数...

em_aaron
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部