クライアント側にAngularJS 、サーバー側にDjangoを使用してプロジェクトを開始しようとしています。
それらを親友のように機能させるためのベスト プラクティスは何ですか (静的ファイル、認証、展開など)。
興味深い最適化のために、Django テンプレートからクライアント側テンプレートを強化する方法があります。ただし、Django と AngularJS のテンプレート言語の類似点を考えると、ここで努力する価値はほとんどありません。この種のほとんどのプロジェクトでは、AngularJS の静的サービスとDjango REST フレームワークを組み合わせます。
私の操作の順序は、ほとんどの場合、Django REST フレームワークの URL が最初 (可能な限り厳密に記述されている) であり、その後に、ローカル テスト/開発シナリオ用
のディレクトリurls.py
にある基本の AngularJS アプリケーション テンプレートを指す一般的なパターンが続きます。STATIC_ROOT
if settings.DEBUG:
urlpatterns += patterns('django.contrib.staticfiles.views',
url(r'', 'serve', {
'document_root': settings.STATIC_ROOT,
'path': '/base.html'}
),
)
一致しないすべてのリクエストを同じアプリ/テンプレートに向けることで、URL の履歴ハック方式の使用を開始し、ハッシュタグよりも優先する場合はルーティングを開始できます。ハッシュタグのみに固執する予定の場合、最終的な URL の一致はより厳密になる可能性があります (たとえば、/
(URL ルート) と の一致r'^$'
)。
本番環境では、nginx のようなリバース プロキシまたは低速クライアント HTTP サーバーを使用して AngularJS (静的) コンテンツを提供し、REST サービスの要求を Django WSGI アプリにプロキシします。
Django REST フレームワークと通信するには、クラスのような JS オブジェクトを使用して、AngularJS アプリと Django REST フレームワークとの間でデータをマーシャリングすることを好みます。このために、angular-django-rest-resourceを使用して、REST フレームワーク ビューで公開している Django モデル クラスを表すクラスを生成します。
angular-django-rest-resource がリソースに対して作成できるクエリの柔軟性を最大限に高めるために、ここで説明されているように、REST フレームワーク用にdjango-filterバックエンドをインストールします。これにより、JS リソースは、パラメーター (例: ) によって制約された Django オブジェクトを要求できます。/polls/?author=345&finished=1
Django および REST 操作を、AngularJS メイン テンプレートが提供されるサーバーの別のドメインにデプロイする場合 (たとえば、HTML 用に別のインターネット ドメインでサードパーティの CDN を使用している場合)、それはこれらのリソースへのクロスドメイン リクエストを許可することが重要です。これには、django-cors-headersミドルウェアをお勧めします。
これがお役に立てば幸いです。これはベスト プラクティス セットではありませんが、私にとってはうまくいったものです。
Angularjs と Django の混同を防ぐには、https://docs.angularjs.org/api/ng/provider/ $interpolateProvider を参照して ください。
基本的に、Django が {{ xyz }} 変数を使用し、angular が {[{ xyz }]} 変数を一緒に使用できるようにするには:
app.config(function($interpolateProvider) {
$interpolateProvider.startSymbol('{[{');
$interpolateProvider.endSymbol('}]}');
});