X

Django gehostete Webseite über iFrame einbinden

Ich habe mir in den letzten Tagen vermehrt Django angeschaut, da ich gerne über Python Webseiten bzw. Webapplikationen  bereitstellen möchte. Nicht nur, dass ich der Meinung bin, dass Django Anfragen schneller bearbeitet und ressourcenschonender ist als Apache (inbesondere hinter Nginx), sondern auch, dass die Performance und Sicherheit PHP überlegen ist. Darüber hinaus bietet Python weitreichendere Funktionalität, wenn es z.B. um Websockets oder NoSQL-Datenbanken geht.

Auf Django selbst bin ich über das Buch “Test-Driven Web Development with Python” von Harry Percival aufmerksam geworden. Eigentlich wollte ich mich nur in das Thema “Test-Driven Development” einarbeiten, konnte dann aber dem Angebot von O’Reilly nicht widerstehen.

Nachdem ich mich ein wenig eingearbeitet habe und die nächsten Webseiten mit Ausrichtung auf Statistiken und Monitoring in der Planung habe, fiel mir ein, wie schön es doch wäre diese bzw. einen Teil dieser Seiten per iFrame auf andere Webseiten, wie z.B. Blog einzubinden. Damit ich es nicht vergesse und vielleicht auch jemand anderes hiervon profitiert, schreibe ich einfach einen kleinen Blogartikel hierzu:

Nutzen wir einfach die Beispiel-Applikation aus dem oben genannten Buch. Während noch vor ein paar Monaten oder wenigen Jahren gerne Blogs als Programmiereinstiege verwendet wurden, sind es heute Todo-Listen. Warum sollte es hier also anders sein.

Wie müssen wir also vorgehen, um die Seite welche beim Aufruf von http://localhost:8000 durch Django bereitgestellt wird, auf einer anderen Seite innerhalb eines iFrames anzeigen zu lassen? Die View, welche das “home.html” template lädt und ausliefert, sieht folgendermaßen aus:

def home_page(request):
    return render(request, 'home.html')

Da iFrames besonderen Sicherheitsanfoderungen unterliegen, müssen wir nun “from django.views.decorators.clickjacking import xframe_options_exempt” der views.py hinzufügen und den Decorator “@xframe_options_exempt” der “home_page” view hinzufügen:

from django.views.decorators.clickjacking import xframe_options_exempt

@xframe_options_exempt
def home_page(request):
    return render(request, 'home.html')

Das Einbetten des iFrames gestaltet sich mit dem folgenden Code nun sehr einfach:

<body>
test vor iframe
    <iframe id="iframe" src="http://localhost:8000" style="border: none; width: 100%; height: 400px;"></iframe>
test nach iframe
</body>

Zu Berücksichtigen ist allerdings, dass in dem “Todo-List” Beispiel beim Eingeben eines neuen Todos ein html-form gesendet wird, welches anschließend auf eine andere URL und somit eine andere view führt. Soll nun im iFrame kein Fehler beim Senden des Formulars angezeigt werden, muss der iFrame-Decorator auch den anderen Views hinzugefügt werden.

Falls Ihr Verbesserungsvorschläge oder Ergänzungen habt, schreibt mir einfach in den Kommentaren.

Torsten Feld :

View Comments (2)

This website uses cookies.