質問

Django CreateViewにX-Frame-Optionsヘッダーを追加したい。iFrameタグにロードされるフォームにサービスを提供するため、これが必要です。

問題は、Httpresponseオブジェクトを返すDjangoクラスベースのビューにいくつかのメソッドがあります。 all これらのメソッドを上書きせずにヘッダーを追加する方法はありますか?

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...
.

役に立ちましたか?

解決

大丈夫、私はそれを修正しました。あなたが似た問題に遭遇した場合は、それを行う方法です。 上記の例のコード例にgetを使ったのと同じ方法でrender_to_responseメソッドを上書きする必要があります。

他のヒント

上書きレンダリングをレスポンス方法にしましたが、私はいくつかのビューにマッピングされたURL全体の塊を使用することができ、いくつかのビューで同じメソッドを上書きするために対処する必要はありませんでした。

私は Django-Corlsに基づいてミドルウェアクラスを作った。 -headers そのため、私のDjangoアプリの一部のIFRAMEを許可することができました。私はMiddleWare.pyをメインプロジェクトディレクトリに保存し、このようなランダムなミドルウェアクラスをここにあります。たとえば、Nofollow "> ForcereSesponse例外。

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:

cors_urls_regex:CORSヘッダーの送信を有効にするためのURL正規表現を指定してください。特定のURLのCORを有効にしたい場合は、e。 g。 / API / APIの下のREST APIの場合。 例:

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

デフォルト:

CORS_URLS_REGEX = '^.*$'
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top