Реклама

Django - Урок 015. Получение IP адреса и предыдущего URL из запроса

РуководствоDjangoHTTP, referer, Django, IP2203

Получение IP адреса пользователя из запроса на Django может быть полезно для организации такого функционала сайта, как например, блокировка хостов, с которых выполняются попытки подбора пароля к сайту или необходимость запомнить пользователя по IP, чтобы обеспечивать доступ к сайту только для определённого пользователя с определённого IP адреса.

IP адрес может быть как реальным, так и переданным через прокси-сервер (в данном случае будет передаваться заголовок HTTP_X_FORWARDED_FOR , по которому можно извлечь истинный IP адрес).

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

Получение же предыдущего URL, на котором был пользователь может быть полезно в том случае, если Вам необходимо сделать перенаправление пользователя на ту страницу, с которой пользователь пришёл после выполнения авторизации.

Например, на данном сайте имеется виджет авторизации на каждой странице. Для авторизации с виджета направляется POST запрос на URL авторизации, но после этого необходимо вернуть пользователя на ту страницу с которой он пришёл, чтобы пользователь мог дальше работать со статьей или форумом. Можно добавлять в виджет специальное поле, которое будет содержать текущий URL и передаёт его в POST запросе. Изначально так и было сделано, но это усложняет код. А можно воспользоваться извлечением реферального URL, с которого пользователь пришёл, как сделано сейчас на сайте.

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

С помощью данной функции можно будет получать предыдущий URL в любом запросе и не писать отдельный специальный код для перенаправлений для каждого виджета или формы, с которой работает пользователь.

Реклама

Комментарии

Комментарии

Только авторизованные пользователи могут оставлять комментарии.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
Последние комментарии
  • EVILEG
  • 13 июля 2017 г. 2:12

Qt/C++ - Урок 023. Перетаскивание QGraphicsItem на QGraphicsScene мышью

Ну например так можете сделать.void MoveItem::mousePressEvent(QGraphicsSceneMouseEvent *event){ if (QApplication::mouseButtons() == Qt::RightButton) { this->deleteLa...

  • Mark
  • 13 июля 2017 г. 1:26

Qt/C++ - Урок 023. Перетаскивание QGraphicsItem на QGraphicsScene мышью

Подскажите пожалуйста как в данном проекте по перетаскиванию организовать удаление объекта со scene методом delete item, допустим при щелчке ПКМ по объекту QGraphicsScene. Мои попытки оказалис...

  • EVILEG
  • 10 июля 2017 г. 21:34

Qt/C++ - Урок 048. QThread - работа с потоками с помощью moveToThread

А что делали? Повторяете урок или как? Пытались просто скачать проект в конце статьи и запустить?

Qt/C++ - Урок 048. QThread - работа с потоками с помощью moveToThread

У меня происходит переполнение счетчика count, появляется ошибка malloc(): memory corruption (fast). Не подскажите, как с этим бороться?

  • EVILEG
  • 9 июля 2017 г. 2:07

GameDev на Qt - Урок 3. Уничтожение противников

Поэтому в пятом уроке есть исходники всего проекта )))). Вообще, все эти материалы были не предыдущей версии сайта, которая на WordPress. Во время переноса мог что-то потерять.

Сейчас обсуждают на форуме

тестирование классов в QT

это вопрос.

Как реализовать отправку e-mail

Возможно что уже и нет необходимости в почтовом клиенте, но в своё время так же столкнулся с данной проблемой в QT. Нашел один интересный проект под названием libqxt, там реализовано дов...

  • Asteri
  • 14 июля 2017 г. 12:23

css

Делюсь, может, пригодится когда-нибудь) QTableView QHeaderView { background-color: #ffffff; } Вот так эта проблема лечится, градиент задать не получается, но хоть...

  • EVILEG
  • 12 июля 2017 г. 19:52

QSqlQuery выполнение sql запросов из файла

Мне думается, что это уже будет дело вкуса и вашего взгляда на проект. Если Вы действительно собираетесь просто скармливать своему софту SQL скрипты, которые должны будут выполняться для...

QML Canvas + Line. Bug?

Вот оно что, значит не баг) Спасибо