【问题标题】:How do I send JSON from the server back to the app via Python如何通过 Python 将 JSON 从服务器发送回应用程序
【发布时间】:2013-02-17 05:33:11
【问题描述】:

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

这样的事情是如何实现的?

(Django 或 Flask 都可以)

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


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

【问题讨论】:

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

标签: python ios django heroku flask


【解决方案1】:

基本前提是你的客户端应用发送请求一个 URL,服务器用 JSON 响应。

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

对于 django,有 tastypiedjango-restpiston

对于烧瓶,您可以使用flask-restful。这是complete example

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

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

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

【讨论】:

  • 非常非常非常感谢。我以前没有听说过 REST——我还年轻。我将尝试使用 REST 来实现它。 :)
【解决方案2】:

对于烧瓶,你可以使用jsonify

from flask import jsonify

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

【讨论】:

  • 感谢这个答案也很方便。
【解决方案3】:

从 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})

【讨论】:

    【解决方案4】:

    如果您使用 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      相关资源
      最近更新 更多