Отримання IP-адреси користувача з запиту на Django може бути корисним для організації такого функціоналу сайту, як, наприклад, блокування хостів, з яких виконуються спроби підбору пароля до сайту або необхідність запам'ятати користувача по IP, щоб забезпечувати доступ до сайту тільки для певного користувача з певного IP адреси.
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 у будь-якому запиті та не писати окремий спеціальний код для перенаправлень для кожного віджету чи форми, з якою працює користувач.
Для Django рекомендую VDS-сервера хостера Timeweb .