Djangoさんの表でAngularJSを使うときに最初に実装したこと。

 今の職場にお世話になってからもろもろ……、や、いいです、そんなの。相変わらず、というか、以前からの案件も継続しておりますし、新しい案件にもぶっこんだりしておりますので、表AngularJSさん、裏Djangoさんみたいなの進行中でございます。

 DjangoさんとAngularJSさんを一緒に使うときにおさえておきたいのは、DjangoさんにCSRF保護機能があって(Cross Site Request Forgery protection | Django documentation | Django)、リクエストがXMLHttpRequestであるかどうか判断するメソッドが用意されている(Request and response objects | Django documentation | Django)ことですよ。それらの機能を使わないのもありですが、どうせなら活用していきましょう。

 通信を行う度にごにょごにょすることもできはしますが、既定の挙動みたいなのも設定できますのでそちらで仕込みます。

angular.module('app', []);

function httpProviderConfig($httpProvider) {
  $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
  $httpProvider.defaults.xsrfCookieName = 'csrftoken';
  $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
}
angular.module('app').
  config(['$httpProvider', httpProviderConfig]);

 それっぽいところは適宜読み替えていただきたいですけども、だいたい上記みたいにしておけば大丈夫ですよ。意味的にはリクエストする際にもろもろヘッダー情報的に埋め込んでくれるようにお願いしているだけです。

 「むむむ、なんだかまどろっこしい書き方してるな」と思った方は、tama3bb/angularjs-styleguideとかをどうぞ。最近参考にしていたりします。感化されてるともいう。

 ちなみに、AngularJSさんで普通にPOSTとかPUTとかでJSONを仕込んでリクエストしますと、送ったJSONはRequest Bodyの方に入りますので、こちらも若干の注意が必要です。

def post(self, request, *args, **response_kwargs):
    data = json.loads(request.body)

    ...

    return Response

とかすればいいと思いますよ、DjangoさんのViewの方ではね。