前提・実現したいこと
axiosを用いて、ajax通信を行いたいです。
発生している問題・エラーメッセージ
デベロッパーツールのコンソールに以下のようなエラーが発生してしまいました。
Access to XMLHttpRequest at 'http://127.0.0.1:8000/polls/check/' from origin 'http://localhost:8080' has been blocked by CORS policy: Request header field access-control-allow-origin is not allowed by Access-Control-Allow-Headers in preflight response.
該当のソースコード
App.Vue
<template> <div id="app"> <h3>掲示板に投稿する</h3> <label for="name">ニックネーム:</label> <input id="name" type="text" v-model="name"> <br> <label for="comment">コメント:</label> <textarea id="comment" v-model="comment"></textarea> <br> <button @click="createComment">コメントをサーバーに送る</button> <h2>掲示板</h2> </div> </template> <script> import axios from 'axios'; export default { data(){ return{ name:'', comment:'', }; }, methods: { createComment(){ axios.post( 'http://127.0.0.1:8000/polls/check/', { name:this.name, comment:this.comment }, { headers: { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET, POST, PATCH, PUT, DELETE, OPTIONS", "Access-Control-Allow-Headers": "Origin, Content-Type, X-Auth-Token" } }, ) .then(response => { console.log(response); }) .catch(error => { console.log(error); }) console.log('hello') this.name = ''; this.comment = ''; } }, } </script> <style> #app { font-family: 'Avenir', Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } </style>
Vies.py
def check(request): if request.method == "GET": print('ok') return redirect("polls:index") json_dict = json.loads(request.body) print(json_dict) json_str = json.dumps(json_dict, ensure_ascii=False, indent=2) return HttpResponse(json_str)
試したこと
Django側では、こちらやこちらのサイトを参考に、pip install django-cors-headers
を行いsettings.pyを以下の部分を追記しました。
INSTALLED_APPS = [ 'corsheaders', ] MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', ] CORS_ORIGIN_WHITELIST = ( 'http://localhost:8080', 'http://127.0.0.1:8080', 'http://127.0.0.1:8000', ) CORS_ALLOW_CREDENTIALS = True CORS_ALLOW_CREDENTIALS = True
また、App.vue
ファイルの以下hedder部分を削除した状態で、postするとPOST http://127.0.0.1:8000/polls/check/ 403 (Forbidden)
とエラーが発生してしまっている状況です。
{ headers: { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET, POST, PATCH, PUT, DELETE, OPTIONS", "Access-Control-Allow-Headers": "Origin, Content-Type, X-Auth-Token" } },
補足情報(FW/ツールのバージョンなど)
エディター:VScode,OS:Mac OS
どなたか、エラー解決の為、アドバイス頂けましたら幸いです。
追記
Qiita記事を参考に、axiosにwithCredentials: true
を追記しましたがPOST http://127.0.0.1:8000/polls/check/ 403 (Forbidden)
が表示されている状態です。
axios.post( 'http://127.0.0.1:8000/polls/check/', { name:this.name, comment:this.comment }, { withCredentials: true }, )
追記2
こちらの記事を参考に以下の部分をApp.vueに追記しましたが、エラーは解決されていない状況です。
import axios from 'axios'; const headers = {"X-CSRFTOKEN": "<csrf_token_very_long_string_goes_here>"}
axios.postメソッドには、 {headers: headers},
を引数に追加しました
回答2件
あなたの回答
tips
プレビュー