如何通过Python将JSON从服务器发送回应用程序



是否可以使用Python将JSON从服务器发送到我的iOS应用程序?

这样的东西是如何实现的?

(Django或Flask很好)

我在网上搜索过,但只找到PHP教程。


我尝试过返回JSON,但它不起作用,或者至少它从未被发送到应用程序

基本前提是客户端应用程序向请求发送URL,服务器使用JSON进行响应。

如何创建JSON文档并不那么重要。您可以使用任何语言(甚至javascript)来生成JSON并将其发送回。

对姜戈来说,这里有美味,姜戈休息和活塞。

对于烧瓶,您可以使用烧瓶。下面是一个完整的例子。

无论你使用哪个库,工作流程都是这样的:

  1. 您的应用程序请求URL
  2. 您的服务器应用程序(在上述任何框架中编写)会拦截此请求
  3. JSON文档由服务器应用程序生成,并作为响应发送回
  4. 您的客户端应用程序读取JSON并显示它

现在,如果您想要实现REST API,那么您可以扩展上面的内容,以允许从客户端应用程序进行操作。例如,特制的请求可以添加新记录、删除记录或查询记录的子集。但是,如果您只想将JSON文档发送回您的应用程序,则这不是必需的。

对于烧瓶,可以使用jsonify

from flask import jsonify
@app.route("/index/", methods=['GET'])
def index():
    return jsonify(result=result)

从django服务器返回JSON的示例:

from django.http import HttpResponse, HttpResponseNotFound
class JsonResponse(HttpResponse):
    def __init__(self, content, **kwargs):
        kwargs['content_type'] = 'application/json'
        super(JsonResponse, self).__init__(json.dumps(content), **kwargs)
class JsonDataResponse(HttpResponse):
    """
    Returns a json dumped dict with fields 'message' and 'data'.
    """
    def __init__(self, *args, **kwargs):
        message = None
        data = None
        if len(args) > 0:
            message = args[0]
        if len(args) > 1:
            data = args[1]
        if 'message' in kwargs:
            message = kwargs['message']
        kwargs.pop('message')
        if 'data' in kwargs:
            data = kwargs['data']
            kwargs.pop('data')
        kwargs['content'] = json.dumps(dict(message=message, data=data))
        if 'content_type' not in kwargs:
            kwargs['content_type'] = 'application/json'
        super(JsonDataResponse, self).__init__(**kwargs)

在返回视图时使用上面定义的类:

from place.of.your.definition import JsonResponse
def example_view(request):
    number_of_foo = Foo.objects.filter(...)
    ...
    return JsonResponse({'number_of_foo': number_of_foo})

如果您使用django,以下可能会有所帮助:

#views.py
import json
from django.http import HttpResponse
def jsonview(request):
    ...
    return HttpResponse(json.dumps(result), mimetype='application/json')

更好的方法是使用而不是直接使用json

from django.core.serializers import serialize
serialize('json', result) #instead of json.dumps(result)

相关内容

最新更新