मैं अपने Django REST फ्रेमवर्क पर CORS को कैसे सक्षम कर सकता हूं? संदर्भ ज्यादा मदद नहीं करता है, यह दर्शाता है कि मैं एक मध्यस्थ द्वारा कर सकते हैं, लेकिन मैं कैसे कर सकते हैं?
मैं अपने Django REST फ्रेमवर्क पर CORS को कैसे सक्षम कर सकता हूं? संदर्भ ज्यादा मदद नहीं करता है, यह दर्शाता है कि मैं एक मध्यस्थ द्वारा कर सकते हैं, लेकिन मैं कैसे कर सकते हैं?
जवाबों:
आपके प्रश्न में संदर्भित लिंक का उपयोग करने की अनुशंसा करता है django-cors-headers
, जिसका प्रलेखन पुस्तकालय को स्थापित करने के लिए कहता है
pip install django-cors-headers
और फिर इसे अपने इंस्टॉल किए गए ऐप्स में जोड़ें:
INSTALLED_APPS = (
...
'corsheaders',
...
)
प्रतिक्रियाओं पर सुनने के लिए आपको एक मिडलवेयर क्लास जोड़ना होगा:
MIDDLEWARE_CLASSES = (
...
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
...
)
कृपया अपने दस्तावेज़ के कॉन्फ़िगरेशन अनुभाग को ब्राउज़ करें , विभिन्न CORS_ORIGIN_
सेटिंग्स पर विशेष ध्यान दें । आपको अपनी आवश्यकताओं के आधार पर उनमें से कुछ को सेट करना होगा।
Access-Control-Allow-Origin: *
मुझे नहीं दिखता है कि एक पूरी चीज को क्यों लोड किया जाए, मैं आपके जवाब में ऐसा करने का एक और तरीका रखूंगा ताकि दोनों तरीके उपलब्ध हो सकें। संदर्भ: [लिंक (] enable-cors.org/server.html )
django-cors-headers
बहुत अधिक लचीला है। यदि आप अपना स्वयं का वर्ग बनाना चाहते हैं, तो मेरे अतिथि बनें। लेकिन मैं उस पुस्तकालय का उपयोग करूंगा।
pip install django-cors-headers
और फिर इसे अपने इंस्टॉल किए गए ऐप्स में जोड़ें:
INSTALLED_APPS = (
...
'corsheaders',
...
)
प्रतिक्रियाओं पर सुनने के लिए आपको एक मिडलवेयर क्लास जोड़ना होगा:
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',
]
अधिक जानकारी: https://github.com/ottoyiu/django-cors-headers/#configuration
आधिकारिक दस्तावेज को पढ़ने से लगभग सभी समस्याएँ हल हो सकती हैं
'corsheaders.middleware.CorsMiddleware',
कि सूची में सबसे ऊपर होना चाहिए, अन्यथा इसे प्राप्त करने से पहले कनेक्शन को अस्वीकार कर दिया जा सकता है।
आप कस्टम मिडलवेयर का उपयोग करके कर सकते हैं, भले ही यह जानते हुए कि पैकेज के परीक्षण किए गए दृष्टिकोण का उपयोग करना सबसे अच्छा विकल्प है 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
)
from . import corsMiddleware
यदि कोई इस प्रश्न पर वापस जा रहा है और अपना मिडलवेयर लिखने का निर्णय ले रहा है, तो यह 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, प्रलेखन के अनुसार , एक कस्टम 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
और अंत में, इस फ़ंक्शन के अजगर पथ (अपनी परियोजना की जड़ को) को अपने प्रोजेक्ट के MIDDLEWARE सूची में जोड़ें settings.py
:
MIDDLEWARE = [
.
.
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'yourproject.middleware.open_access_middleware'
]
बहुत आसान!
open_access_middleware
।
नीचे किसी भी बाहरी मॉड्यूल की आवश्यकता के बिना काम कर रहे कदम हैं:
चरण 1: अपने ऐप में एक मॉड्यूल बनाएं।
उदाहरण के लिए, मान लेते हैं कि हमारे पास एक ऐप है जिसे कहा जाता है user_registration_app। User_registration_app एक्सप्लोर करें और एक नई फ़ाइल बनाएँ।
इस रूप में कहते हैं custom_cors_middleware.py कहते हैं
नीचे वर्ग की परिभाषा चिपकाएँ:
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
चरण 2: एक मिडलवेयर पंजीकृत करें
अपने प्रोजेक्ट सेटिंग्स फ़ाइल में, इस लाइन को जोड़ें
'User_registration_app.custom_cors_middleware.CustomCorsMiddleware'
उदाहरण के लिए:
MIDDLEWARE = [
'user_registration_app.custom_cors_middleware.CustomCorsMiddleware', # ADD THIS LINE BEFORE CommonMiddleware
...
'django.middleware.common.CommonMiddleware',
]
याद रखें कि user_registration_app को बदलना हैअपने ऐप के नाम के साथ जहाँ आपने अपना custom_cors_middleware.py मॉड्यूल बनाया है।
अब आप यह सत्यापित कर सकते हैं कि यह परियोजना में सभी विचारों के लिए आवश्यक प्रतिक्रिया हेडर जोड़ देगा!
Django = 2.2.12 django-cors-headers = 3.2.1 djangorestframework = 3.11.0
आधिकारिक निर्देश का पालन न करें
अंत में इसका पता लगाने के लिए पुराने तरीके का उपयोग करें।
जोड़ें:
# 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',
),
}