文档章节

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

刘新全
 刘新全
发布于 2015/12/28 22:16
字数 430
阅读 3071
收藏 2
点赞 0
评论 0

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

© 著作权归作者所有

共有 人打赏支持
刘新全
粉丝 11
博文 56
码字总数 29105
作品 0
兰州
程序员
基于JSON RPC的一种Android跨进程调用解决方案了解一下?

基于JSON RPC的一种Android跨进程调用解决方案了解一下? 基于JSON RPC的一种Android跨进程调用解决方案了解一下? 简介 今天上午,看票圈有朋友分享爱奇艺的跨进程通信框架——Andromeda,觉...

流水不腐小夏 ⋅ 05/30 ⋅ 0

Android 面试技能树梳理

相信大家都有面试的经历,相对比面试官的问的一些问题其实都是基础的知识,但就是一些基础的知识我们也不是很完美的回答出来,我们也知道现在的开发人员很多,一家公司一个岗位就会有很多的开...

liu3364575 ⋅ 05/05 ⋅ 0

android h5 js 匿名函数通信

android js 互相调用 支持js匿名函数接收 支持js json对象接收 支持js函数返回值获取 通过注解注入js方法,支持自定义方法名 github https://github.com/lwugang/android-js-bridge Add it i...

liwg ⋅ 04/25 ⋅ 0

Retrofit源码之请求对象的转换

之前在Retrofit源码初探一文中我们提出了三个问题: 什么时候开始将注解中参数拼装成http请求的信息的? 如何产生发起http请求对象的? 如何将对象转换成我们在接口中指定的返回值的? 其中前...

低情商的大仙 ⋅ 05/13 ⋅ 0

Android AIDL浅析及异步调用

AIDL:Android Interface Definition Language,即 Android 接口定义语言。 AIDL 是什么 Android 系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信。 为了使其...

cspecialy ⋅ 05/20 ⋅ 0

一个Android路由框架的诞生之路

经过前面三篇文章,相信大家对组件化都有了一定程度的理解。 在这个过程中一直强调了组件化的一个基础设施:路由!没有它组件化可以说是寸步难行,本篇文章我们就来谈谈一个组件化路由框架诞...

浅吟且行的未来 ⋅ 05/15 ⋅ 0

LayoutInflater源码分析

在《(-)Android中的单例模式》分析中,我们分析了Android中单例模式的实现,且以LayoutInflater为实例,本博文就带大家来认识下我们常用的LayoutInflater源码。 1. setContentView 首先来看...

24K男 ⋅ 05/03 ⋅ 0

React Native 结合ScrollableTab、RefreshControl和FlatList实现新闻分类列表

正好刚开始学RN,熟悉一下控件和基本使用。 涉及的知识点: 1、fetch网络请求,get 拼接参数,解析json。 2、ScrollableTabView、ScrollableTabBar 分类布局。 3、FlatList 数据列表。 4、N...

八怪不姓丑 ⋅ 04/16 ⋅ 0

浅入浅出 Android 安全:第六章 Android 安全的其它话题

第六章 Android 安全的其它话题 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 在本章中,我们会涉及到与 Android 安全相关的其他主题,这些主题不直接属于已经...

apachecn_飞龙 ⋅ 2016/12/02 ⋅ 0

Android 8.0(Android O) AccountManager 行为变更

前言 在公司的项目中,使用 AccountManager 统一管理//获取帐号列表/或对应帐号类型的某个帐号 AccountManager#getAccounts()/getAccountsByType(String accountType) 获取不到 AccountManag...

xujun9411 ⋅ 05/02 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

VS2015配置并运行汇编(一步一步照图做)【vs2017的链接在最后】

x64: TITLE Add and Subtract (AddSub.asm) ; This program adds and subtracts 32-bit integers. ; Last update: 2/1/02 ;.MODEL flat,stdcall x64 not su......

simpower ⋅ 昨天 ⋅ 0

一起读书《深入浅出nodejs》-node模块机制

node 模块机制 前言 说到node,就不免得提到JavaScript。JavaScript自诞生以来,经历了工具类库、组件库、前端框架、前端应用的变迁。通过无数开发人员的努力,JavaScript不断被类聚和抽象,...

小草先森 ⋅ 昨天 ⋅ 0

Java桌球小游戏

其实算不上一个游戏,就是两张图片,不停的重画,改变ball图片的位置。一个左右直线碰撞的,一个有角度碰撞的。 左右直线碰撞 package com.bjsxt.test;import javax.swing.*;import j...

森林之下 ⋅ 昨天 ⋅ 0

你真的明白RPC 吗?一起来探究 RPC 的实质

你真的明白RPC 吗?一起来探究 RPC 的实质 不论你是科班出身还是半路转行,这么优秀的你一定上过小学语文,那么对扩句和缩句你一定不陌生。缩句就是去除各种修饰提炼出一句话的核心,而不失基...

AI9o後 ⋅ 昨天 ⋅ 0

z-index设置失效?

今天碰到了一个问题,就是在给li设置提示框的时候,有用到遮罩效果,本来想把对应的出现在最顶层,可是不管将li设置的z-index值设为多大,li都没有出现在遮罩层之上。 我在网上查了z-index设...

IrisHunag ⋅ 昨天 ⋅ 0

CyclicBarrier、CountDownLatch以及Semaphore使用及其原理分析

CyclicBarrier、CountDownLatch以及Semaphore是Java并发包中几个常用的并发组件,这几个组件特点是功能相识很容易混淆。首先我们分别介绍这几个组件的功能然后再通过实例分析和源码分析其中设...

申文波 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部