あなたはAJAXの話をしている中で、より効率的に処理することができますJSONのような別の形式にデータを変換します。 AJAXには常に3つのアイテムが必要です(技術的には2つしかありません:Javascriptは2重に機能します)。
- クライアント(この場合はJavascriptが)要求になります
- サーバー(この場合はDjangoのビュー)は、要求を処理し、戻りは(、再びJavascriptを)
- クライアントの応答レスポンスを受信し、それ
で何かをします
あなたは優先フレームワークを指定していませんが、何らかのJavascriptフレームワークなしでAJAXを実行するのは難しいでしょうから、jQueryを選択します。コードは、任意のJavaScriptフレームワークにかなり容易に適合することができます:私は、URLにGETリクエストを送信し、自動的にそれを回す、JSONとしてレスポンスを解析し、jQueryの便利なメソッドです$.getJSON
を、使用してい
$.getJSON('/url/to/ajax/view/', {foo: 'bar'}, function(data, jqXHR){
// do something with response
});
ここでdata
として渡されるJavascriptオブジェクトです。最初のパラメータは、リクエストが送られるURLです(これ以上の情報は必要ありません)。2番目のパラメータは、リクエストと共に送信されるデータを含むJavascriptオブジェクトです(必要がない場合は省略できます)。任意のデータを送信します)、3番目のパラメータは、成功した場合にサーバーからの応答を処理するコールバック関数です。したがって、この単純なコードは、上記のパート1とパート3をカバーしています。
次の部分はハンドラです。この場合はもちろんDjangoのビューになります。このビューが必要request
以外の任意の引数を取らないことを
from django.utils import simplejson
def my_ajax_view(request):
# do something
return HttpResponse(simplejson.dumps(some_data), mimetype='application/json')
注:ビューのための唯一の要件は、JSONレスポンスを返さなければならないということです。これは哲学的選択のビットです。 IMHOでは、実際のRESTのやり方では、データはリクエストではなくURLで渡されるべきですが、他の人はそれに同意できないし、そうでないこともあります。究極の選択はあなた次第です。
また、ここでは一般的なPythonデータ構造(リスト、辞書など)に最適なDjangoのsimplejsonライブラリを使用しました。 Djangoモデルのインスタンスまたはクエリーセットを返す場合は、代わりにシリアライザライブラリを使用する必要があります。 Djangoがどのようにルートリクエストをに知っているので、
from django.core import serializers
...
data = serializers.serialize('json', some_instance_or_queryset)
return HttpResponse(data, mimetype='application/json')
は今、あなたはビューを持っていることを、あなたがする必要があるのは、Djangoのurlpatternsにワイヤーそれまでです。
urlpatterns += patterns('',
(r'^/url/to/ajax/view/$', 'myapp.views.my_ajax_view'),
)
その哲学的な違いは出番これは、あなたがURL自体を介してデータを渡すことを選択した場合、あなたはURLPATTERNでそれをキャプチャする必要があります。その後
(r'^/url/to/ajax/view/(?P<some_data>[\w-]+)/$, 'myapp.views.my_ajax_view'),
、あなたのビューを変更引数としてそれを受け入れるために:
def my_ajax_view(request, some_data):
そして最後に、URLに含めるのJavascript AJAX方法を変更します。
$.getJSON('/url/to/ajax/view/'+some_data+'/', function(data, jqXHR){
あなたが要求したデータを渡すのルートを行く場合は、あなたがビューで適切にそれを盗んために世話をする必要があります。
def my_ajax_view(request):
some_data = request.GET.get('some_data')
if some_data is None:
return HttpResponseBadRequest()
ただの程度に取るために十分なあなたを与える必要がありますDjangoのAJAX機能あなたのビューがどのようにデータを取得するか(手動で作成するか、データベースに問い合わせるかなど)、JavascriptのコールバックメソッドがJSON応答をどのように処理するかについては、他のものがあります。その上、いくつかのヒントは:
data
オブジェクトは、一般的に一つだけのアイテムが含まれていても、リストになります。アイテムが1つしかないことがわかっている場合は、data[0]
を使用してください。そうでない場合は、各項目にアクセスするforループを使用:
form (var i=0; i<data.length; i++) {
// do something with data[i]
}
data
又はdata[i]
オブジェクト(AKA辞書、ハッシュ、キー付きアレイ、等)である場合は、処理することにより、キーの値にアクセスすることができ属性としてのキー、すなわち:あなたは、正確な応答を表示および/またはの構造を確認することができるように
data[i].some_key
一般的にはJSONレスポンスとAJAXを扱う、それは最初のブラウザで直接それをしようとするのが最善ですレスポンス。ブラウザでJSONレスポンスを表示するには、恐らく誇張が必要です。 JSONView(FirefoxとChromeの両方で使用可能)を使用すると、JSONを理解してウェブページのように表示できます。リクエストがGETの場合、クエリ文字列(通常はhttp://mydomain.com/url/to/ajax/view/?some_data=foo
)を使用して、通常のGET形式でURLにデータを渡すことができます。 POSTの場合は、RESTテストクライアントが必要です。 RESTClientはFirefox用の優れたアドオンです。 Chromeの場合はPostmanを試すことができます。これらは、Twitter、FacebookなどからのサードパーティAPIの学習にも最適です。
これはちょうど標準のDjangoのURL /ビューコードです。このコンテキストでは、Ajaxリクエストは通常のリクエストと同じです。 –
AJAXとDjangoについての基本的な質問であるにもかかわらず(そしてその理由から)、私はこの質問が非常に有用であることを発見しました。このような「開始方法」の質問は、StackOverflowで(基本的な読み書きのチュートリアルでも)見つけるのが難しく、初心者にはかなりの労力をかけません。ありがとうxhassassin! – viridis