axios & Django REST framework でJSONをGET/POST
axios & Django REST framework でJSONをGET/POST:
前回の記事↓
Django REST framework でJSONをGET/POST/PUT/DELETE
サーバーサイドは前回の記事で作ったものを利用します
クライアントサイドからのhttp通信にはaxiosを使います
クライアントサイド内のaxiosを使うファイルには以下を追記しておきます
クライアントサイドのGETしたい場所に以下を記述します
サーバーサイドを起動した状態で、クライアントサイドを実行してみてください
chromeの開発者モードでコンソールを開いてクライアントサイドのログを確認してみると
こんなエラーメッセージが出力されているかと思います
CORSというのはCross-Origin Resource Sharingの略で、異なるオリジンへの通信を行うことです
脱・とりあえず動く[CORS編] - Qiita
そのため、特定のurlからの通信のみ許可する必要があります
django-cors-headersの設定で軽くハマった話。 - 自称フルスタックエンジニアのぶろぐ。
サーバーサイドにdjango-cors-headersをインストールします
settings.py内の INSTALLED_APPという項目にcorsheadersを追記します
MIDDLEWAREにも2つ追加します
また新しく
apiにアクセスする許可をクライアントサイドに与えました
ポート番号の部分はそれぞれの環境に合わせてください
これでもう一度GETしてみてください
jsonを取得できました
クライアントサイドのPOSTしたい場所に以下を記述します
サーバーサイドを起動した状態で、クライアントサイドを実行してみてください
プラウザのコンソールにPOSTしたデータが表示されます
確認のためにもう一度GETしてみましょう
データベースに id:4 が追加されていることを確認できました
前回の記事↓
Django REST framework でJSONをGET/POST/PUT/DELETE
サーバーサイドは前回の記事で作ったものを利用します
axiosの導入
クライアントサイドからのhttp通信にはaxiosを使います$ npm install axios --save-dev
import axios from 'axios'
GET
クライアントサイドのGETしたい場所に以下を記述しますaxios.get("http://localhost:8000/api/books/") .then(response=>{ console.log("status:",response.status) console.log("axiosGetData:",response.data) }) .catch(err=>{ console.log("axiosGetErr",err) })
chromeの開発者モードでコンソールを開いてクライアントサイドのログを確認してみると
Access to XMLHttpRequest at 'http://localhost:8000/api/books/' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
こんなエラーメッセージが出力されているかと思います
CORSというのはCross-Origin Resource Sharingの略で、異なるオリジンへの通信を行うことです
脱・とりあえず動く[CORS編] - Qiita
オリジンとは「プロトコル」+「ホスト」+「ポート番号」の組み合わせのことです異なるオリジンへの通信をすべて許可してしまうと、セキュリティ的に問題が出てきます
そのため、特定のurlからの通信のみ許可する必要があります
django-cors-headersの設定で軽くハマった話。 - 自称フルスタックエンジニアのぶろぐ。
サーバーサイドにdjango-cors-headersをインストールします
$ pip install django-cors-headers
..... INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'myapp', 'rest_framework' + 'corsheaders' #追加行 ] .....
..... MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'corsheaders.middleware.CorsMiddleware', #追加行 + 'django.middleware.common.CommonMiddleware', #追加行 ] .....
CORS_ORIGIN_WHITELIST
という項目をsettings.py
内に作成します..... CORS_ORIGIN_WHITELIST = ( 'localhost:3000/', 'localhost:3000', ) .....
ポート番号の部分はそれぞれの環境に合わせてください
これでもう一度GETしてみてください
jsonを取得できました
POST
クライアントサイドのPOSTしたい場所に以下を記述しますaxios.post("http://localhost:8000/api/books/",{"title":"urasima tarou","contents":"ryu-gu no tsukai"}) .then(response=>{console.log("body:",response.data)})
プラウザのコンソールにPOSTしたデータが表示されます
確認のためにもう一度GETしてみましょう
データベースに id:4 が追加されていることを確認できました
コメント
コメントを投稿