是否可以使用Python将JSON从服务器发送到我的iOS应用程序?
这样的东西是如何实现的?
(Django或Flask很好)
我在网上搜索过,但只找到PHP教程。
我尝试过返回JSON,但它不起作用,或者至少它从未被发送到应用程序
基本前提是客户端应用程序向请求发送URL,服务器使用JSON进行响应。
如何创建JSON文档并不那么重要。您可以使用任何语言(甚至javascript)来生成JSON并将其发送回。
对姜戈来说,这里有美味,姜戈休息和活塞。
对于烧瓶,您可以使用烧瓶。下面是一个完整的例子。
无论你使用哪个库,工作流程都是这样的:
- 您的应用程序请求URL
- 您的服务器应用程序(在上述任何框架中编写)会拦截此请求
- JSON文档由服务器应用程序生成,并作为响应发送回
- 您的客户端应用程序读取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)