2009-12-02 14 views
14

現在構築中のajax重いDjangoアプリケーションの最適なアーキテクチャを探しています。私はフォーム、検証、データの取得、JSONメッセージフォーマットの一貫した方法を保っていますが、一貫して使用できるソリューションを見つけるのは非常に難しいと感じています。DjangoアプリケーションのAjaxアーキテクチャ

誰かが正しい方向に向けるか、ベストプラクティスを共有することはできますか?

+6

Ajaxでは何が特別ですか? djangoの観点からは、これらは単なる要求です。 – GabiMe

+1

通常のリクエスト/レスポンスサイクルとajaxリクエストからのコンテンツを使用してコンテンツのテンプレートレンダリングを混在させることは何も嫌いです。それは汚れているように感じます。 –

答えて

2

私はDjangoアプリケーションにajaxを挿入するための標準的な方法は考えていませんが、これを見ることができますtutorial

あなたはまた、上で詳細を見つけるでしょうdjango's page about Ajax

2

2週間前に私が作った私は(Djangoのために、それは同じである)「ノーマル」と「AJAX」の要求にそれらを使用するサブテンプレートの実装方法write up。多分それはあなたのために役立つでしょう。

4

ブラウザで通常表示されるすべてのものを通常の表示にします。これには、AJAXリクエスト(サブページ)に対するすべての返信が含まれます。

サイトのビットをよりダイナミックにしたいときは、jQueryを使用してAJAXを実行するか、この場合はAJAHを実行し、サブページのdivの1つの内容を要求ページにロードします。

このテクニックはうまくいきます。サブページを通常のページと同じようにデバッグするのは非常に簡単です.jQueryはAJA [XH]エディットページの一部としてこれらを使用することで非常に簡単です。

+0

これは妥当だと思います。しかし、AJAXリクエストと通常のリクエストに対して別々のビュー関数を作成するか、if_ajax()を使って異なるレスポンスを返すのですか?フォームについては、フォームデータを送信する通常のリクエストを使用するのですか、それともAJAXを使用して行いますか? –

+0

私はブラウザで最初に動作するビューを作成し、次にjQueryを使用して該当するビットを取り出し、要求しているページに挿入します。私は 'is_ajax'をまだ使用していません。フォームに関しては、動的ページyesのためにjQueryフォームの送信を使用します。これらのPOSTは通常のジャンゴビューになります。 –

+0

私はajax/django初心者ですが、あなたの方法は非常に非効率的ではありませんか?これは、実際に必要なものより多くのものを返すことを意味します(実際のデータではなく、周囲のすべてのHTML)。または私は何かを逃していますか? –

2

ブラウザに通常表示されているページの+1。それが最善の出発点だと思われます。

Nickやvikingosegundoなどの最も単純なAJAXアプローチの問題は、JavaScriptのinnerHTMLプロパティに依存する必要があるということです。これは、JSONで送信された新しいHTMLをダンプする唯一の方法です。いくつかはこれをバッド・シングと考えます。

残念ながら、私はDjangoレンダリングと一致するJavascriptを使用してフォームの表示を複製する標準的な方法を認識していません。私がやっているアプローチは、Django Formクラスをサブクラス化して、JavaScriptと一緒にas_p()などのHTMLを出力するようにすることです。これらはDOMを操作するフォームを複製します。

2

私が知っているのは、サーバー側でHTMLを生成し、ページに挿入するだけで悪夢になるアプリケーションを管理していることです。 Djangoテストフレームワークを使ってテストすることも不可能です。 Seleniumなどのツールを使用している場合は問題ありませんが、Ajaxリクエストが返されるのを待ってテストスクリプトでスリープ状態にする必要があります。テストスイートが遅くなる可能性があります。

Ajaxのテクニックを使用する目的が良いユーザーインターフェイスを作成することであるならば、私はGMailインターフェイスのようにすべてを行い、JavaScriptでブラウザのすべてを実行することをお勧めします。私はjQuery以外の何も使っていないアプリケーションをいくつか書いてきました。バックエンドでReSTを使ってUI状態とJSONを管理するためのステートマシンです。この場合、Django、IMHOはバックエンドに最適です。あなたのモデルにReSTインターフェイスを生成するためのサードパーティのソフトウェアもありますが、それは自分自身を使ったことはありませんが、私が知っている限り、彼らは簡単なことですばらしいですが、もちろんあなた自身のビジネスロジック。

このアプローチでは、フォーム処理、検証など、JSとバックエンドでコードを複製する問題にぶつかります。私はJSで使用できるフォームと検証ロジックに関する構造化された情報を生成することでこれを解決することを考えてきました。これはデプロイ時にコンパイルされ、他のJSファイルとしてロードされます。

また、XMLを使用しないでください。ブラウザはそれを構文解析するのが遅く、生成する苦痛であり、ブラウザで動作する苦痛である。 JSONを使用します。

4

これに関するすべての回答について、誰も言及されていないと私は信じられません。django-piston主にREST APIを構築するために使用されていますが、JSON(jQueryなど)を出力することができます。また、リクエストで何かできるのと同じように動作し、AJAXインタラクションを実装するのに最適ですまたはAJAJ [JSON]、AJAHなど)。 form validationもサポートしています。

1

イム現在テスト:

  • jQueryの& BACKBONE.JSをクライアント側

  • ジャンゴ・ピストン(中間層)

は私のブログで、後で私の調査結果を書きますhttp://blog.sserrano.com

関連する問題