Pythonにてデータベースから取得したデータを、HTMLのテキストボックスにオートコンプリート機能で表示するという仕組みを実装したいと考えております。

このような仕組みはAjaxを利用して実装するのだと自分では思っています。
そこでPythonとAjaxの連携の情報がを検索したのですが、あまり無いようでよく分かりませんでした。

自分はAjaxを実装した事がありません。
Ajaxと言えば、JSON化されたデータが書かれたサーバ内のファイルを処理が発生した際に非同期で取得しにいく処理だと理解しております。
PHPの情報では、XMLHttpRequestを利用してJSONデータのやりとりを行うようですが。
どのようにPythonでAjaxと連携すればいいのか教えていただけないでしょうか?
簡単でも良いのでコードなど頂けたら幸いです。

また、上記のことを考えている際に以下の疑問が出てきました。
PythonからデータをJavaScriptに送れれば別にAjaxを実装する必要も無いのかなとも思いました。

以上長くなりましたがアドバイスいただけたら幸いです。
宜しくお願いいたします。

環境:
Python2.6
Django1.6.2
jQuery最新版

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/10/03 00:25:35

ベストアンサー

id:a-kuma3 No.1

回答回数4974ベストアンサー獲得回数2154

普通の HTML も、Ajax によるデータの取得も、Webサーバ側は、

  • 適切な response header を設定して
  • 正しい内容を response で返す

だけです。

Django を使ってるということは、response header に対する意識は、あまりしたことは無いでしょうか?


サーバ側の Python の例は、こちら。
http://rayed.com/wordpress/?p=1508

Django を使わず、素の CGI として動かすときの Python スクリプトは、こんな感じ。
http://datatables.net/forums/discussion/9920/python-backend-json-dump-via-jquery-ajax-call


クライアント側は、jQuery を使って良いなら、getJSON メソッドを使うのが良いと思います。
http://hayageek.com/jquery-ajax-json-parsejson-post-getjson/#get-json

もし、jQuery を使わないなら、こんな感じ。
https://mathiasbynens.be/notes/xhr-responsetype-json


PythonからデータをJavaScriptに送れれば別にAjaxを実装する必要も無いのかなとも思いました。

「送れれば」というのが、オートコンプリートを動作させるページを表示するときの Python スクリプトで、オートコンプリートに必要なデータをすべて埋め込んでおく、ということであれば、それも、ひとつのやり方だと思います。
必要なデータのサイズが、たいした大きさではない、という条件は付きます。
オートコンプリートの機能を使う必要が無い場合でも、毎回データが送られるわけですから。

データの取り直しは、通常はページのリフレッシュが必要です。
一度、表示されたページをリフレッシュすることなく、Python スクリプトを経由してデータを取り出す、という方法(のひとつ)が Ajax です。

他1件のコメントを見る
id:a-kuma3

こういうものはレンダリング出力するメインのもの(例えばdef main(request))とは”別に”def ajax(request)を作成しておいてJSONデータをAjaxにより引き受けるときだけアクセスするようにすると考えて宜しいのでしょうか?

そうです。
Python で、何種類もページを用意するときと同様に、そのうちのひとつ(というか、Ajax で実現したいことの数だけ)を Ajax ように実装します。

自分が試したところ、def ajax()から送られたJSONデータを拾い上げることが出来ませんでした。

まず、Ajax からではなく、ブラウザからリクエストを投げてみて、レスポンスを確認してください。
新しく Ajax 用に用意したリクエストの URL が http://mysite.com/ajax.html だったら、ブラウザのアドレスバーから、その Ajax 用の URL を打ち込んで、画面に、自分が出力してるであろう JSON 形式のデータが表示されることを確認してください。

  • 404 や 500 などのエラーが出ていないか
  • JSON として正しい形式になっているか

これが正しければ、javascript 側の実装が、どこかまずいのだと思います。
まずは、Python 側なのか、javascript 側なのかを切り分けましょう。

2014/10/02 17:40:00
id:supersudo

この度はまことにありがとうございました。
def ajax()に対応するページを作成してgetJSONにて読み込んでみたところ上手くデータを取得することが出来ました。
親切丁寧に教えていただきましてありがとうございました。

2014/10/03 00:24:15
  • id:Lhankor_Mhy
    ajaxを使わずAnguler.jsでサジェストをするコードの説明がありましたので、参考に貼っておきます。
    http://hryk224.github.io/2014-08-02-angularjs_suggest/
  • id:supersudo
    参考サイトを紹介して頂きましてありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません