আমি কীভাবে আমার জ্যাঙ্গো রেস্ট ফ্রেমওয়ার্কে CORS সক্ষম করতে পারি? রেফারেন্স অনেক সাহায্য করেন না, এটা বলে যে, আমি একজন মিডলওয়্যার করে করতে পারেন, কিন্তু আমি কিভাবে যে কি করতে পারেন?
আমি কীভাবে আমার জ্যাঙ্গো রেস্ট ফ্রেমওয়ার্কে 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: *
আমি কেন পুরো জিনিসটি লোড করি না, তাই আমি আপনার উত্তরে এটি করার জন্য আরও একটি উপায় রাখব যাতে উভয় পদ্ধতিই উপলব্ধ থাকে। উল্লেখ: [লিঙ্ক (] সক্ষম-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/# কনফিগারেশন
অফিসিয়াল ডকুমেন্টেশন পড়ুন প্রায় সমস্ত সমস্যা সমাধান করতে পারে
CORS_ORIGIN_ALLOW_ALL = True
, তবে CORS_ORIGIN_WHITELIST
এখনও সেট করা আছে? দস্তাবেজগুলি মনে হয় এটি দেখে মনে হচ্ছে এটি এর প্রয়োজন নেই এবং উত্তরটির জন্য বিভ্রান্তিকর বলে মনে হচ্ছে।
'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
যদি কেউ এই প্রশ্নে ফিরে আসে এবং তাদের নিজস্ব মিডলওয়্যারটি লেখার সিদ্ধান্ত নিয়েছে তবে এটি জাঙ্গোর নতুন স্টাইলের মিডলওয়্যারের জন্য একটি কোড নমুনা -
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
জাজানো সংস্করণ> ১.১০ এর জন্য ডকুমেন্টেশন অনুসারে একটি কাস্টম মিডলওয়্যার একটি ফাংশন হিসাবে লেখা যেতে পারে, আসুন ফাইলটিতে বলা যাক: 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
এবং পরিশেষে, এই প্রকল্পের অজগর পথটি (আপনার প্রকল্পের মূলটি অন্তর্ভুক্ত করুন) আপনার প্রকল্পের মিডলওয়্যার তালিকায় যুক্ত করুন settings.py
:
MIDDLEWARE = [
.
.
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'yourproject.middleware.open_access_middleware'
]
সহজ কিছু!
open_access_middleware
।
নীচে কোনও বাহ্যিক মডিউলগুলির প্রয়োজন ছাড়াই কাজের পদক্ষেপগুলি দেওয়া হল:
পদক্ষেপ 1: আপনার অ্যাপে একটি মডিউল তৈরি করুন।
উদাহরণস্বরূপ, ধরে নিই আমাদের কাছে ইউজার_রেগেশন_এপ নামে একটি অ্যাপ রয়েছে । ব্যবহারকারী_ নিবন্ধকরণ_এ্যাপ অন্বেষণ করুন এবং একটি নতুন ফাইল তৈরি করুন।
একে কাস্টম_কর্স_মিডালওয়্যার.পি হিসাবে কল করুন
নীচের শ্রেণীর সংজ্ঞাটি আটকে দিন:
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: একটি মিডওয়্যারের নিবন্ধন করুন
আপনার প্রজেক্টস সেটিংস.পি ফাইল এ, এই লাইনটি যুক্ত করুন
'ব্যবহারকারীর রেজিস্ট্রেশন_এপ.কাস্টম_কার্স_মিডলওয়ার.কাস্টমকর্সমিডলওয়্যার'
যেমন:
MIDDLEWARE = [
'user_registration_app.custom_cors_middleware.CustomCorsMiddleware', # ADD THIS LINE BEFORE CommonMiddleware
...
'django.middleware.common.CommonMiddleware',
]
প্রতিস্থাপন করতে মনে রাখুন user_registration_app যেখানে আপনি আপনার custom_cors_middleware.py মডিউল তৈরি করেছেন আপনার অ্যাপের নাম দিয়ে।
আপনি এখন যাচাই করতে পারেন এটি প্রকল্পের সমস্ত দর্শনগুলিতে প্রয়োজনীয় প্রতিক্রিয়া শিরোনাম যুক্ত করবে!
জ্যাঙ্গো = 2.2.12 জ্যাঙ্গো-কর্স-শিরোনাম = 3.2.1 জ্যাঙ্গোরস্ট্রেফ্র্যাম্ক = 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',
),
}