Как сохранить IP-адрес в базе данных и администратор django
Хотите сохранить IP-адрес всех, кто приходит на сайт. Каков наилучший подход для этого. Допустим, модель
class ip(models.Model):
pub_date = models.DateTimeField('date published')
ip_address = models.GenericIPAddressField()
Каким будет код в моделях или в представлениях или где-то, что я сохранил бы его в базе данных, также хотел бы сохранить его с информацией о пользователе-агенте, подобной этому.
![django-admin-ip]()
Ответы
Ответ 1
В views.py:
views.py:
....
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ipaddress = x_forwarded_for.split(',')[-1].strip()
else:
ipaddress = request.META.get('REMOTE_ADDR')
get_ip= ip() #imported class from model
get_ip.ip_address= ipaddress
get_ip.pub_date = datetime.date.today() #import datetime
get_ip.save()
Ответ 2
Я привел пример от @Sahil Kalra, используя промежуточное ПО,
Модель:
class IpAddress(models.Model):
pub_date = models.DateTimeField('date published')
ip_address = models.IPAddressField()
Middleware:
import datetime
class SaveIpAddressMiddleware(object):
"""
Save the Ip address if does not exist
"""
def process_request(self, 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')
try:
IpAddress.objects.get(ip_address=ip)
except IpAddress.DoesNotExist: #-----Here My Edit
ip_address = IpAddress(ip_address=ip, pub_date=datetime.datetime.now())
ip_address.save()
return None
Сохраните промежуточное ПО в каком-либо месте в папке проекта, а в файле настроек добавьте это промежуточное программное обеспечение. Вот ссылка Как установить промежуточное ПО django в файл настроек
Ответ 3
Вы можете легко получить IP-адрес в своих views.py.
def get_ip_address(request):
""" use requestobject to fetch client machine IP Address """
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ip = x_forwarded_for.split(',')[0]
else:
ip = request.META.get('REMOTE_ADDR') ### Real IP address of client Machine
return ip
def home(request):
""" your vies to handle http request """
ip_address = get_ip_address(request)
Ответ 4
Как вы хотите сохранить пользовательский агент независимо от URL-адреса или вида, который называется ", не имеет смысла писать этот код в представлениях или моделях.
Вам следует написать промежуточное ПО, которое будет работать для вас.
Подробнее о промежуточном программном обеспечении Django: https://docs.djangoproject.com/en/1.6/topics/http/middleware/
Вы хотите перегрузить метод process_request()
своего настраиваемого промежуточного программного обеспечения, чтобы получить IPaddress и useragent из объекта запроса и сохранить его в IP-модели
Вышеуказанная ссылка даст вам абсолютную ясность в том, что делать.