web-dev-qa-db-ja.com

DjangoでAngularJSを使用するためのベストプラクティスは何ですか

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

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

61
poiuytrez

興味深い最適化のために、Djangoテンプレートからクライアント側のテンプレートを強化する方法があります。ただし、DjangoとAngularJSのテンプレート言語の類似点を考えると、ここで努力する価値はほとんどありません。この種のほとんどのプロジェクトでは、AngularJSの静的な配信と Django REST Framework を組み合わせます。

私のurls.py操作の順序は、ほとんど常にDjango RESTフレームワークURLです(可能な限り厳密に記述されます)。次に、他のすべてをベースのAngularJSアプリケーションテンプレートローカルのテスト/開発シナリオ用の私のSTATIC_ROOT dir:

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フレームワークと通信するには、AngularJSアプリとDjango RESTフレームワークとの間でデータをマーシャリングするクラスのようなJSオブジェクトを使用することを好みます。このために、 angular-Django-rest-resource を使用して、Djangoフレームワークビューで公開しているRESTモデルクラスを表すクラスを生成します。

Angular-Django-rest-resourceがリソースに対して行うことができるクエリの柔軟性を最大限に高めるために、説明したようにRESTフレームワークにDjango-filterバックエンドをインストールします ここに 。これにより、JSリソースはパラメーター(例:/polls/?author=345&finished=1)に制約されたDjangoオブジェクトを要求できます。

DjangoおよびREST操作を、AngularJSメインテンプレートが提供されるサーバーの別のドメインに展開している場合(たとえば、異なるインターネットでサードパーティのCDNを使用している場合) HTMLのドメイン)、それらのリソースへのクロスドメインリクエストを許可することが重要です。このため、 Django-cors-headers ミドルウェアをお勧めします。

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

56

AngularjsとDjango=を参照してください。参照: https://docs.angularjs.org/api/ng/provider/ $ interpolateProvider

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

app.config(function($interpolateProvider) {
    $interpolateProvider.startSymbol('{[{');
    $interpolateProvider.endSymbol('}]}');
});
7
yeaske