문제

Django CreateView에 X-Frame-Options 헤더를 추가하고 싶습니다.iframe 태그에로드 될 양식을 제공하기 때문에 필자가 필요합니다.

문제는 httpresponse 객체를 반환하는 Django 클래스 기반 뷰에서 몇 가지 방법이 있습니다. 을 덮어 쓰지 않고 응답에 헤더를 추가하는 방법이 있습니까?

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 메소드를 덮어 쓸 필요가 있습니다.

다른 팁

Ressting 메서드로 덮어 쓰기 렌더링을 시도했지만 여러보기에 매핑 된 URL 전체 덩어리에 사용할 수있는 솔루션을 원했고 몇 가지보기에 대해 동일한 메소드를 겹쳐 쓰지 않아도됩니다.

나는 Django-pors를 기반으로 한 미들웨어 클래스를 만들었습니다. - 헤더 그래서 Django 앱의 일부를 iframe-ing을 허용 할 수 있습니다. My Main Project 디렉토리에 MiddleWare.py를 유지 하고이 여기 에서이 forceresponse 예외 예외 .

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에 추가하고 설정에서 정규식을 구성합니다.

MIDDLEWARE_CLASSES = (
    ...
    'your_django_app.middleware.XFrameAllowMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
)

XFRAME_URLS_REGEX = r'^/iframe_this_url/.*$'
.

django-cors-headers read.me에서 read.me :

CORS_URLS_REGEX : CORS 헤더를 송신 할 수있는 URL 정규식을 지정합니다. 특정 URL에 대해 CORS 만 활성화하려면 유용합니다. 지. REST API는 / API /. 예 :

CORS_URLS_REGEX = r'^/api/.*$'
.

기본값 :

CORS_URLS_REGEX = '^.*$'
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top