【忘備録】DjangoとJSONとAjax
Djangoで、AjaxでDBからデータを取得、JSON形式で返すためのメモ。
まず、AjaxをDjangoでするには、postだと下記ページのような処理が必要。
Django公式:https://docs.djangoproject.com/ja/1.10/ref/csrf/
DjangoにはデフォルトでJSONresponseやserializeのようなJSON変換用のライブラリが存在するが、Modelのデータを直接取ってJSON化するため、pk等の不要なデータまで送られてしまい微妙である。気になったら公式に例があるので動かしてください。
そこで今回は、Pythonのライブラリを使って、Ajaxのために別でJson変換用の関数を定義し、そこへurls.pyで飛ばすように制御することを考えた。
sample/models.py
class Sample(models.Model):
name = models.CharField(max_length=30)
first = models.CharField(max_length=30)
sample/ajax.py(views.pyの代わり)
def SampleListAjax(request):
objs = Sample.objects.all()
data = [dict(name = obj.name, first = obj.first) for obj in objs]
json = json.dumps(data)
return HttpResponse(json, content_type="application/json")
sample/urls.py
class urlpatterns=[
url(r'^sample/',ajax.SampleListAjax)
]
後は普段通り、JavaScript系の何かでAjaxして設定したurlにリクエストしてJSONデータを取得するだけ。