Django RESTフレームワークでCORSを有効にするにはどうすればよいですか? reference はあまり役に立ちません。ミドルウェアでできると言っていますが、どうすればいいですか?
質問で参照したリンクは、 Django-cors-headers
の使用を推奨しています。この documentation は、ライブラリのインストールを指示しています
pip install Django-cors-headers
そして、インストールしたアプリに追加します:
INSTALLED_APPS = (
...
'corsheaders',
...
)
また、応答をリッスンするミドルウェアクラスを追加する必要があります。
MIDDLEWARE_CLASSES = (
...
'corsheaders.middleware.CorsMiddleware',
'Django.middleware.common.CommonMiddleware',
...
)
また、さまざまなCORS_Origin_
設定に特に注意して、ドキュメントの 構成セクション を参照することもできます。
pip install Django-cors-headers
そして、インストールしたアプリに追加します:
INSTALLED_APPS = (
...
'corsheaders',
...
)
また、応答をリッスンするミドルウェアクラスを追加する必要があります。
MIDDLEWARE_CLASSES = (
...
'corsheaders.middleware.CorsMiddleware',
'Django.middleware.common.CommonMiddleware',
...
)
CORS_Origin_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True
CORS_Origin_WHITELIST = [
'http://localhost:3030',
]
CORS_Origin_REGEX_WHITELIST = [
'http://localhost:3030',
]
詳細: https://github.com/ottoyiu/Django-cors-headers/#configuration
ほぼすべての問題を解決できる公式ドキュメントを読む
最適なオプションは、パッケージDjango-cors-headers
のテスト済みのアプローチを使用することであることを知っていても、カスタムミドルウェアを使用して実行できます。とはいえ、ここに解決策があります:
次の構造とファイルを作成します。
-myapp/middleware/__init__.py
from corsMiddleware import corsMiddleware
-myapp/middleware/corsMiddleware.py
class corsMiddleware(object):
def process_response(self, req, resp):
resp["Access-Control-Allow-Origin"] = "*"
return resp
マークされた行をsettings.py
に追加します。
MIDDLEWARE_CLASSES = (
"Django.contrib.sessions.middleware.SessionMiddleware",
"Django.middleware.common.CommonMiddleware",
"Django.middleware.csrf.CsrfViewMiddleware",
# Now we add here our custom middleware
'app_name.middleware.corsMiddleware' <---- this line
)
誰かがこの質問に戻って独自のミドルウェアを書くことにした場合、これはDjangoの新しいスタイルのミドルウェアのコードサンプルです-
class CORSMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
response["Access-Control-Allow-Origin"] = "*"
return response
Djangoバージョン> 1.10の場合、 documentation に従って、カスタムMIDDLEWAREは関数として記述できます。たとえば、ファイルにyourproject/middleware.py
(の兄弟として) settings.py
):
def open_access_middleware(get_response):
def middleware(request):
response = get_response(request)
response["Access-Control-Allow-Origin"] = "*"
response["Access-Control-Allow-Headers"] = "*"
return response
return middleware
最後に、この関数のpythonパス(プロジェクトのルート)をプロジェクトのsettings.py
のMIDDLEWAREリストに追加します。
MIDDLEWARE = [
.
.
'Django.middleware.clickjacking.XFrameOptionsMiddleware',
'yourproject.middleware.open_access_middleware'
]
簡単!
まあ、私はみんなを知りませんが:
ここpython 3.6およびDjango 2.2を使用
Settings.pyでMIDDLEWARE_CLASSESの名前をMIDDLEWAREに変更しました。
CorsModelモデルをデータベースに追加する必要がある場合もあります。そうでなければ、フラッシュしようとして例外が発生していました。
python3 manage.py makemigrations corsheaders
python3 manage.py migrate