Как сохранить 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-модели

Вышеуказанная ссылка даст вам абсолютную ясность в том, что делать.