Как настроить X-Frame-Options в Django, чтобы разрешить iframe вложение одного вида?

Я пытаюсь включить django, чтобы разрешить создание определенного вида на внешних сайтах, предпочтительно без ограничений сайтов.

В моем файле views.py я добавил следующий код, где view futurebig - это тот, который я хочу включить:

from django.views.decorators.clickjacking import xframe_options_sameorigin
...
@xframe_options_sameorigin
def futurebig(request):
    ...
    return render_to_response('templates/iframe/future_clock_big.html', context_dict, context)

что не помогает, поскольку я понимаю, потому что это только позволяет встраивать в тот же сервер.

Как настроить заголовки для этого конкретного вида, чтобы он был встроен в любой веб-сайт?

Для записи я просто разработчик интерфейса, разработчик бэкэнда, который разработал сайт, больше не работает со мной и отказался документировать свой код, поэтому, если кто-нибудь сможет мне помочь и объяснить, где и какие изменения я должен делать, Я его очень одобрю.

Благодарю.

Насколько я знаю, версия Django - 1,6

Ответы

Ответ 1

Вы идете в правильном направлении, но точный декоратор, который вам нужно достичь, это "xframe_options_exempt".

from django.http import HttpResponse
from django.views.decorators.clickjacking import xframe_options_exempt

@xframe_options_exempt
def ok_to_load_in_a_frame(request):
    return HttpResponse("This page is safe to load in a frame on any site.")

PS: DJango 1.6 больше не поддерживается. Хорошее время для обновления.

Ответ 2

Очевидно, вы можете установить правило в своих настройках, указав следующее:

X_FRAME_OPTIONS = 'ALLOW-FROM https://example.com/'

Также в настоящее время вам стоит подумать о переходе на CSP

Content-Security-Policy: frame-ancestors 'self' example.com *.example.net ;

См. fooobar.com/info/108218/...