【忘備録】DjangoとJSONとAjax

Djangoで、AjaxでDBからデータを取得、JSON形式で返すためのメモ。

 

 

まず、AjaxDjangoでするには、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データを取得するだけ。