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

