当前位置: 首页 > news >正文

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

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

用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的资源

转载于:https://my.oschina.net/liuxinquan/blog/552540

相关文章:

  • Lind.DDD.ExpressionExtensions动态构建表达式树,实现对数据集的权限控制
  • 在Visual Studio中用C++语言创建DLL动态链接库图文教程
  • 2015.12.30 日学习总结
  • 谈模块独立拆分上线一些经验
  • SpringMVC multipart文件上传
  • apache开源项目--ibatis
  • 快播活该被抓,跟公诉人是谁无关
  • 一则简单演示样例看Oracle的“无私”健壮性
  • 忘记Mysql的root密码怎么办?
  • Linux vim 命令
  • [转载]基于TFS实践敏捷-工作项跟踪
  • ODBC CRecordSet访问
  • mysql 常用函数以及常见查询语句
  • 在.Net MVC结构API接口中判断http头信息实现公共的权限验证过滤器示例
  • JAVA生成二维码(zxing)
  • [译] 怎样写一个基础的编译器
  • [译]CSS 居中(Center)方法大合集
  • 《剑指offer》分解让复杂问题更简单
  • docker python 配置
  • Java 内存分配及垃圾回收机制初探
  • JavaScript新鲜事·第5期
  • JavaScript异步流程控制的前世今生
  • js操作时间(持续更新)
  • Linux Process Manage
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • nodejs实现webservice问题总结
  • Node项目之评分系统(二)- 数据库设计
  • React-flux杂记
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • vue:响应原理
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 面试遇到的一些题
  • 盘点那些不知名却常用的 Git 操作
  • 普通函数和构造函数的区别
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 时间复杂度与空间复杂度分析
  • 使用 Xcode 的 Target 区分开发和生产环境
  • HanLP分词命名实体提取详解
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • (3)选择元素——(17)练习(Exercises)
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (MATLAB)第五章-矩阵运算
  • (第一天)包装对象、作用域、创建对象
  • (六)Hibernate的二级缓存
  • (生成器)yield与(迭代器)generator
  • (十六)Flask之蓝图
  • (算法二)滑动窗口
  • (转)大道至简,职场上做人做事做管理
  • ***详解账号泄露:全球约1亿用户已泄露
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET Core 通过 Ef Core 操作 Mysql
  • .Net Remoting常用部署结构
  • .net中应用SQL缓存(实例使用)
  • [ C++ ] STL_list 使用及其模拟实现