إضافة رؤوس إلى جانغو كبف
-
02-01-2020 - |
سؤال
أريد أن أضيف X-Frame-Options
رأس إلى جانغو كريتيفيو.أنا بحاجة إلى هذا لأنني سوف تخدم النموذج الذي سيتم تحميله في علامات إفريم.
المشكلة هي ، هناك عدة طرق في وجهات النظر القائمة على فئة جانغو التي ترجع كائنات هتبريسبونس.هل هناك طريقة لإضافة الرأس إلى الردود دون الكتابة الكل تلك الأساليب?
class MyView(CreateView):
def get(self, request, *args, **kwargs):
resp = super(MyView, self).get(request, *args, **kwargs)
resp['X-Frame-Options'] = ''
return resp
# Same would go for form_invalid, post, put, etc...
المحلول
حسنا ، لقد أصلحته.إذا واجهت مشكلة مماثلة ، فإليك كيفية القيام بذلك.عليك أن الكتابة render_to_response
الطريقة بنفس الطريقة فعلت مع الحصول على رمز المثال أعلاه.
نصائح أخرى
حاولت الكتابة فوق تقديم لطريقة الاستجابة ، ولكن أردت الحل الذي يمكن أن تستخدم لجزء كامل من عناوين المواقع المعينة إلى عدة وجهات النظر ، وليس لديك للتعامل مع الكتابة فوق نفس الأسلوب على عدة وجهات النظر.
أنا جعلت الطبقة الوسيطة على أساس الخروج من جانغو-كورس-رؤوس حتى أتمكن من السماح إفريم جي جزء من بلدي جانغو التطبيق.وأظل middleware.py في بلدي دليل المشروع الرئيسي وحفظ بضع فئات الوسيطة عشوائية لقد جعلت هناك ، مثل هذا واحد هنا و استثناء استجابة القوة على سبيل المثال.
import re
from django import http
from django.conf import settings
class XFrameAllowMiddleware(object):
def process_request(self, request):
"""
If CORS preflight header, then create an
empty body response (200 OK) and return it
Django won't bother calling any other request
view/exception middleware along with the requested view;
it will call any response middlewares
"""
if (self.is_enabled(request) and
request.method == 'OPTIONS' and
"HTTP_ACCESS_CONTROL_REQUEST_METHOD" in request.META):
response = http.HttpResponse()
return response
return None
def process_response(self, request, response):
if self.is_enabled(request):
response['X-Frame-Options'] = 'ALLOWALL'
return response
def is_enabled(self, request):
return re.match(settings.XFRAME_URLS_REGEX, request.path)
إضافته إلى الطبقات المتوسطة الخاصة بك وتكوين التعبير العادي في الإعدادات الخاصة بك:
MIDDLEWARE_CLASSES = (
...
'your_django_app.middleware.XFrameAllowMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
...
)
XFRAME_URLS_REGEX = r'^/iframe_this_url/.*$'
من جانغو كورس رؤوس read.me:
كورس:تحديد عنوان ورل التعبير العادي الذي لتمكين إرسال رؤوس كورس;مفيدة عندما تريد فقط لتمكين كورس لعناوين محددة, البريد.g.لبابي ريست تحت / أبي/.مثال:
CORS_URLS_REGEX = r'^/api/.*$'
الافتراضي:
CORS_URLS_REGEX = '^.*$'