Bagaimana saya dapat mengaktifkan CORS pada Django REST Framework saya? yang referensi tidak banyak membantu, ia mengatakan bahwa saya bisa melakukan dengan middleware, tapi bagaimana saya bisa melakukan itu?
python
django
cors
django-rest-framework
middleware
Julio Marins
sumber
sumber
Access-Control-Allow-Origin: *
Saya tidak mengerti mengapa memuat semuanya, saya akan memberikan cara lain untuk melakukan ini dalam jawaban Anda sehingga kedua metode dapat tersedia. referensi: [link (] enable-cors.org/server.html )django-cors-headers
jauh lebih fleksibel dari itu. Jika Anda lebih suka membuat kelas Anda sendiri, jadilah tamu saya. Tapi saya akan menggunakan perpustakaan itu.dan kemudian tambahkan ke aplikasi yang Anda instal:
INSTALLED_APPS = ( ... 'corsheaders', ... )
Anda juga perlu menambahkan kelas middleware untuk mendengarkan tanggapan:
MIDDLEWARE_CLASSES = ( ... 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', ... ) CORS_ORIGIN_ALLOW_ALL = True # If this is used then `CORS_ORIGIN_WHITELIST` will not have any effect CORS_ALLOW_CREDENTIALS = True CORS_ORIGIN_WHITELIST = [ 'http://localhost:3030', ] # If this is used, then not need to use `CORS_ORIGIN_ALLOW_ALL = True` CORS_ORIGIN_REGEX_WHITELIST = [ 'http://localhost:3030', ]
detail lebih lanjut: https://github.com/ottoyiu/django-cors-headers/#configuration
membaca dokumentasi resmi dapat menyelesaikan hampir semua masalah
sumber
CORS_ORIGIN_ALLOW_ALL = True
, tapiCORS_ORIGIN_WHITELIST
masih disetel? Dokumen tampaknya membuatnya tampak seperti ini tidak diperlukan dan tampaknya membingungkan untuk jawabannya di sini.'corsheaders.middleware.CorsMiddleware',
harus agak di bagian atas daftar, jika tidak koneksi mungkin ditolak sebelum mendapatkannya.Anda dapat melakukannya dengan menggunakan middleware kustom, meskipun mengetahui bahwa opsi terbaik adalah menggunakan pendekatan paket yang telah diuji
django-cors-headers
. Karena itu, inilah solusinya:buat struktur dan file berikut:
-
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
tambahkan ke
settings.py
garis yang ditandai: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 )
sumber
from . import corsMiddleware
Jika ada yang kembali ke pertanyaan ini dan memutuskan untuk menulis middleware mereka sendiri, ini adalah contoh kode untuk middleware gaya baru 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
sumber
Untuk versi Django> 1.10, menurut dokumentasinya , sebuah MIDDLEWARE kustom dapat ditulis sebagai fungsi, katakanlah dalam file:
yourproject/middleware.py
(sebagai saudara darisettings.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
dan terakhir, tambahkan jalur python dari fungsi ini (wrt root proyek Anda) ke daftar MIDDLEWARE di proyek Anda
settings.py
:MIDDLEWARE = [ . . 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'yourproject.middleware.open_access_middleware' ]
Sangat mudah!
sumber
open_access_middleware
.Yah, saya tidak tahu teman-teman tapi:
menggunakan di sini python 3.6 dan django 2.2
Mengganti nama MIDDLEWARE_CLASSES menjadi MIDDLEWARE di settings.py berhasil.
sumber
Di bawah ini adalah langkah-langkah kerja tanpa memerlukan modul eksternal:
Langkah 1: Buat modul di aplikasi Anda.
Misalnya, anggap saja kita memiliki aplikasi bernama user_registration_app . Jelajahi user_registration_app dan buat file baru.
Mari kita sebut ini sebagai custom_cors_middleware.py
Tempel definisi Kelas di bawah ini:
class CustomCorsMiddleware: def __init__(self, get_response): self.get_response = get_response # One-time configuration and initialization. def __call__(self, request): # Code to be executed for each request before # the view (and later middleware) are called. response = self.get_response(request) response["Access-Control-Allow-Origin"] = "*" response["Access-Control-Allow-Headers"] = "*" # Code to be executed for each request/response after # the view is called. return response
Langkah 2: Daftarkan middleware
Dalam file settings.py proyek Anda, tambahkan baris ini
'user_registration_app.custom_cors_middleware.CustomCorsMiddleware'
Misalnya:
MIDDLEWARE = [ 'user_registration_app.custom_cors_middleware.CustomCorsMiddleware', # ADD THIS LINE BEFORE CommonMiddleware ... 'django.middleware.common.CommonMiddleware', ]
Ingatlah untuk mengganti user_registration_app dengan nama aplikasi tempat Anda membuat modul custom_cors_middleware.py.
Anda sekarang dapat memverifikasi bahwa itu akan menambahkan header respons yang diperlukan ke semua tampilan dalam proyek!
sumber
Ikuti instruksi resmi tidak berhasil
Akhirnya gunakan cara lama untuk mengetahuinya.
MENAMBAHKAN:
# proj/middlewares.py from rest_framework.authentication import SessionAuthentication class CsrfExemptSessionAuthentication(SessionAuthentication): def enforce_csrf(self, request): return # To not perform the csrf check previously happening
#proj/settings.py REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'proj.middlewares.CsrfExemptSessionAuthentication', ), }
sumber