Evgenii Legotckoi
Evgenii Legotckoi30. Dezember 2016 00:30

Django - Tutorial 015. Ermitteln der IP-Adresse und der vorherigen URL aus der Anfrage

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 .

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
A
ALO1ZE19. Oktober 2024 08:19
Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken