How to store IP address in the database and django admin How to store IP address in the database and django admin django django

How to store IP address in the database and django admin


In 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()


I have gave the example from @Sahil Kalra using middleware,

Model:

class IpAddress(models.Model):    pub_date = models.DateTimeField('date published')    ip_address = models. GenericIPAddressField()

Middleware:

import datetimeclass 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

Save the middleware some place in your project folder and In settings file add this middleware. Here is reference How to set django middleware in settings file


You can fetch IP Address very easily into your views.py.

def get_ip_address(request):    """ use requestobject to fetch client machine's 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)