🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

3061閲覧

djangoへajax通信した際のレスポンス受信について

akiba1210

総合スコア1

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2021/01/08 08:01

前提・実現したいこと

python初心者です。
ajaxでdjangoにリクエストを送信し、リクエスト受信したdjangoはMySQLから必要なデータを取得し、クライアントにJSON形式で返す処理を実装したいです。

発生している問題

djangoからのレスポンスが連想配列っぽい単純な文字列として返されてしまいます。
イメージ
{COL1:'XXXX',COL2:'IIII',COL3:'6666'}{COL1:'VVVV',COL2:'SSV',COL3:'8888'}・・・

出来ればJSON形式(以下の様な)で取得したいのですが、python側のコーディングが分かりません。

json

1data:[ 2 { 3 COL1:'XXXX', 4 COL2:'IIII', 5 COL3:'6666', 6 }, 7 { 8 COL1:'VVVV', 9 COL2:'SSV', 10 COL3:'8888', 11 } 12]

該当のソースコード

python側では以下のとおり取得しています。

python

1 connection = MySQLdb.connect( 2 host='host01', 3 user='root', 4 passwd='XXXXX', 5 db='python') 6 # データベースへの接続とカーソルの生成 7 cursor = connection.cursor(MySQLdb.cursors.DictCursor) 8 # ここに実行したいコードを入力します 9 cursor.execute("SELECT * FROM testtbl limit 100") 10 # fetchall()で全件取り出し 11 rows = cursor.fetchall() 12 # 接続を閉じる 13 connection.close() 14 return HttpResponse(rows)

jQuery

1 var Url = 'http://host01:8081/myapp/getData/?limit=' + $('#txtLimit').val(); 2 $.ajax({ 3 type: "GET", 4 url: Url, 5 docType:"json", 6 success: function (data) { 7 console.log('data:',data); //本当はJson等のオブジェクト構造でデータを取得したいが、ただの文字列で返される。 8 }, 9 error: function (data) { 10 console.error(data); 11 } 12 }); 13 14

試したこと

python側のresponseをListにしたり、いろいろ試しましたが、いずれも文字列としてしかresponse受信できませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

私は、上記のMySQLがらみのAPIは分からないのですが、例えば {"data":'XXXX'} という値をJSONでJavaScriptに送りたい場合は、

Python

1return JsonResponse({"data":'XXXX'})

で送信して(公式docs:https://docs.djangoproject.com/ja/3.1/ref/request-response/#id4)、受け取る側では、(自分のコードの一部なのですが)jQueryは詳しくないのでfetchで書いています。また、JavaScript側からのrequestはPOSTになっていますが、GETに置き換えてください(csrftokenとbodyが不要になります)。

JavaScript

1return fetch(url, { 2 method: 'post', 3 headers: { 4 'Content-Type': 'application/json', 5 "X-CSRFToken": csrfmiddlewaretoken, 6 }, 7 body: JSON.stringify(data) 8 }) 9 .then(function (response) { 10 return response.json(); 11 }) 12 .then(function (response) { 13 value = response['data']; // 'XXXX'をvalueに代入 14 }) 15      .catch( // エラー処理 16 });

一つ目の.thenで受け取ったresponseをResponseオブジェクトのjsonメソッドでJSONとしてパースするので、最後の.thenでresponseを上のように扱えます。

投稿2021/01/08 11:44

編集2021/01/08 12:44
MorningMushroom

総合スコア53

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問