60

クライアント側にAngularJS 、サーバー側にDjangoを使用してプロジェクトを開始しようとしています。

それらを親友のように機能させるためのベスト プラクティスは何ですか (静的ファイル、認証、展開など)。

4

2 に答える 2

56

興味深い最適化のために、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ミドルウェアをお勧めします。

これがお役に立てば幸いです。これベスト プラクティス セットではありませんが、私にとってはうまくいったものです。

于 2013-08-12T20:57:02.287 に答える
7

Angularjs と Django の混同を防ぐには、https://docs.angularjs.org/api/ng/provider/ $interpolateProvider を参照して ください

基本的に、Django が {{ xyz }} 変数を使用し、angular が {[{ xyz }]} 変数を一緒に使用できるようにするには:

app.config(function($interpolateProvider) {
    $interpolateProvider.startSymbol('{[{');
    $interpolateProvider.endSymbol('}]}');
});
于 2014-12-03T22:07:09.030 に答える