0

Pythonを使用してサーバーからiOSアプリにJSONを送信することは可能ですか?

このようなものはどのように実装されていますか?

(DjangoまたはFlaskで問題ありません)

オンラインで検索しましたが、PHPチュートリアルしか見つかりませんでした。


JSONを返そうとしましたが、機能しませんでした。少なくとも、アプリに送信されませんでした。

4

4 に答える 4

1

基本的な前提は、クライアントアプリがリクエストにURLを送信し、サーバーがJSONで応答することです。

JSONドキュメントを作成する方法はそれほど重要ではありません。任意の言語(JavaScriptも含む)を使用してJSONを生成し、送り返すことができます。

djangoには、 tastypiedjango-restpistonがあります。

フラスコの場合は、 flask-restfulを使用できます。これが完全な例です。

使用するライブラリに関係なく、ワークフローは次のようになります。

  1. アプリケーションがURLをリクエストします
  2. サーバーアプリケーション(上記のフレームワークのいずれかで記述されている)は、この要求をインターセプトします。
  3. JSONドキュメントはサーバーアプリケーションによって生成され、応答として返送されます。
  4. クライアントアプリケーションはJSONを読み取り、それを表示します。

ここで、 REST APIを実装する場合は、上記を拡張して、クライアントアプリからの操作を許可します。たとえば、特別に細工されたリクエストでは、新しいレコードを追加したり、レコードを削除したり、レコードのサブセットをクエリしたりできます。ただし、JSONドキュメントをアプリケーションに送り返すだけの場合は、これは必須ではありません。

于 2013-02-17T05:42:19.657 に答える
1

フラスコには、jsonify

from flask import jsonify

@app.route("/index/", methods=['GET'])
def index():
    return jsonify(result=result)
于 2013-02-17T05:55:47.173 に答える
0

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)
于 2013-02-17T08:13:22.937 に答える
0

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})
于 2013-02-17T09:43:58.077 に答える