Das Abrufen der IP-Adresse des Benutzers aus einer Django-Anfrage kann nützlich sein, um die Website-Funktionalität zu organisieren, z. B. das Blockieren von Hosts, von denen Versuche zum Erraten von Passwörtern für die Website unternommen werden, oder die Notwendigkeit, sich den Benutzer anhand der IP zu merken, um sicherzustellen, dass nur ein bestimmter Benutzer von eine bestimmte IP kann auf die Site-Adressen zugreifen.
Die IP-Adresse kann entweder echt sein oder über einen Proxy-Server übertragen werden (in diesem Fall wird der Header HTTP_X_FORWARDED_FOR übertragen, über den die echte IP-Adresse abgerufen werden kann).
def get_client_ip(request): x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') if x_forwarded_for: ip = x_forwarded_for.split(',')[-1].strip() else: ip = request.META.get('REMOTE_ADDR') return ip
Das Abrufen der vorherigen URL, auf der sich der Benutzer befand, kann nützlich sein, wenn Sie den Benutzer auf die Seite umleiten müssen, von der der Benutzer nach der Autorisierung kam.
Diese Website hat beispielsweise auf jeder Seite ein Autorisierungs-Widget. Zur Autorisierung wird vom Widget eine POST-Anforderung an die Autorisierungs-URL gesendet, danach muss der Benutzer jedoch auf die Seite zurückgeleitet werden, von der er gekommen ist, damit der Benutzer mit dem Artikel oder Forum weiterarbeiten kann. Sie können dem Widget ein spezielles Feld hinzufügen, das die aktuelle URL enthält, und sie an die POST-Anforderung übergeben. Anfangs wurde dies getan, aber das verkompliziert den Code. Oder Sie können die Extraktion der Referrer-URL verwenden, von der der Benutzer kam, wie dies jetzt auf der Website erfolgt.
from django.utils.http import is_safe_url, urlunquote def get_next_url(request): next = request.META.get('HTTP_REFERER') if next: next = urlunquote(next) # HTTP_REFERER may be encoded. if not is_safe_url(url=next, host=request.get_host()): next = '/' return next
Mit dieser Funktion ist es möglich, die vorherige URL in jeder Anfrage abzurufen und keinen separaten benutzerdefinierten Umleitungscode für jedes Widget oder Formular zu schreiben, mit dem der Benutzer interagiert.
Für Django empfehle ich Timeweb-Hoster VDS-Server .