Python のフレームワークで JSON のデータを送受したいことがあり、記述に困ったのでメモとして残しておきます。
同じように困っている人の助けになれば幸いです。
JSON をクライアントへ送信
“Data” というのはデータ保持しているクラスです。いわゆるモデルです。
from django.http.response import JsonResponse def api(request): ary = [] data = Data.objects.all() for d in data: ary.append( {"id" : "%d" % d.id, "name": d.text }) return JsonResponse( {"data":ary})
JSON を受け取る
django 側が JSON を受け取る場合です。以下のコードでは受け取ったものを表示しているだけになります。
import json from django.views.decorators.csrf import csrf_exempt @csrf_exempt def api2(request): b = request.body data = json.loads(b) return HttpResponse( data )
以下のように curl からテストをした際に CSRF 関連でエラーとしてはじかれるため、CRSF 無効にするデコレータをつけています。
$ curl 'url' -d '{"data" : "hello"}' -H 'Content-Type:application/json' -x POST