tutorial site para libro framework español book django django-models django-admin ip-address user-agent

site - Cómo almacenar la dirección IP en la base de datos y django admin



framework django para python (4)

Quisiera almacenar la dirección IP de todos los que vienen al sitio. ¿Cuál es el mejor enfoque para hacer esto. Digamos que tenemos modelo

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

¿Cuál sería el código en modelos o en vistas o en algún lugar donde lo guardaría en la base de datos? También me gustaría guardarlo con información de usuario-agente similar a esta.


Como desea guardar el agente de usuario independientemente de la URL o la Vista que se está llamando, no tiene ningún sentido escribir este código en las Vistas o Modelos.

Debería escribir un middleware que haría el trabajo por usted. Obtenga más información sobre el middleware Django: https://docs.djangoproject.com/en/1.6/topics/http/middleware/

Desea process_request() método process_request() de su middleware personalizado para obtener la dirección IP y el agente de usuario del objeto de solicitud y almacenarlo en el modelo IP

El enlace anterior le dará claridad absoluta sobre qué hacer.


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


He dado el ejemplo de @Sahil Kalra usando middleware,

Modelo:

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

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

Guarde el middleware en algún lugar de la carpeta de su proyecto y en el archivo de configuración agregue este middleware. Aquí está la referencia Cómo configurar el middleware django en el archivo de configuración


Puede obtener la dirección IP muy fácilmente en su 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)