سؤال

أريد أن أضيف 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 = '^.*$'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top