[PYTHON] Obtenez l'adresse IP du client avec Django

Accès direct uniquement

Si vous décidez que le client accédera directement à Django, vous pouvez obtenir l'adresse IP en regardant simplement le `` REMOTE_ADDR '' dans l'en-tête HTTP.

views.py


from django.http import HttpResponse
from django.views import View

class MyView(View):
    def get(self, request):
        #À partir de l'objet de requête'REMOTE_ADDR'Obtenez l'en-tête.
        client_addr = request.META.get('REMOTE_ADDR')

        #L'adresse acquise est retournée telle quelle pour vérifier l'opération.
        return HttpResponse(client_addr)

Prise en charge du proxy inverse

Cependant, avec la méthode ci-dessus, s'il existe un proxy inverse tel que Nginx entre le client et Django, l'adresse IP qui peut être obtenue avec `` REMOTE_ADDR '' sera l'adresse proxy inverse (par exemple, Nginx est sur le même hôte). S'il y en a, ce sera 127.0.0.1).

Si le transfert est effectué plus d'une fois au milieu, vous pouvez également vous référer à l'en-tête HTTP `` HTTP_X_FORWARDED_FOR '' pour obtenir l'adresse IP de la route de transfert sous forme de chaîne séparée par des virgules, afin d'obtenir l'adresse IP du client à partir de ce premier élément. peut faire.

De plus, s'il n'y a pas d'en-tête HTTP_X_FORWARDED_FOR '', il s'agit d'un accès direct, alors obtenez-le avec REMOTE_ADDR '' comme ci-dessus.

views.py


from django.http import HttpResponse
from django.views import View

class MyView(View):
    def get(self, request):
        # 'HTTP_X_FORWARDED_FOR'Obtenez l'adresse IP de la route de transfert en vous référant à l'en-tête.
        forwarded_addresses = request.META.get('HTTP_X_FORWARDED_FOR')
        if forwarded_addresses:
            # 'HTTP_X_FORWARDED_FOR'S'il y a un en-tête:Obtenez le premier élément de l'itinéraire de transfert.
            client_addr = forwarded_addresses.split(',')[0]
        else:
            # 'HTTP_X_FORWARDED_FOR'S'il n'y a pas d'en-tête:Parce que c'est une connexion directe'REMOTE_ADDR'Reportez-vous à l'en-tête.
            client_addr = request.META.get('REMOTE_ADDR')

        #L'adresse acquise est retournée telle quelle pour vérifier l'opération.
        return HttpResponse(client_addr)

utiliser ipware

Installez django-ipware avec pip.

python


pip3 install django-ipware

Si vous l'importez et utilisez la fonction get_client_ip, vous pouvez obtenir l'adresse du client en une seule ligne, et bien sûr, il prend en charge le proxy inverse.

views.py


from django.http import HttpResponse
from django.views import View
from ipware import get_client_ip

class MyView(View):
    def get(self, request):
        client_addr, _ = get_client_ip(request)

        return HttpResponse(client_addr)

L'en-tête HTTP référencé obtient l'adresse du client avec la priorité suivante par défaut, ainsi que `` HTTP_X_FORWARDED_FOR' et'REMOTE_ADDR'`.

python


 # The default meta precedence order
 IPWARE_META_PRECEDENCE_ORDER = (
     'HTTP_X_FORWARDED_FOR', 'X_FORWARDED_FOR',  # <client>, <proxy1>, <proxy2>
     'HTTP_CLIENT_IP',
     'HTTP_X_REAL_IP',
     'HTTP_X_FORWARDED',
     'HTTP_X_CLUSTER_CLIENT_IP',
     'HTTP_FORWARDED_FOR',
     'HTTP_FORWARDED',
     'HTTP_VIA',
     'REMOTE_ADDR',
 )

Vous pouvez également remplacer la priorité par défaut par la priorité spécifiée lors de l'appel de la fonction get_client_ip.

python


client_addr, is_routable = get_client_ip(request, request_header_order=['X_FORWARDED_FOR', 'REMOTE_ADDR'])

Lien de référence

Stack Overflow "How do I get user IP address in django?" https://stackoverflow.com/questions/4581789/how-do-i-get-user-ip-address-in-django

GitHub - un33k/django-ipware "A Django application to retrieve client's IP address" https://github.com/un33k/django-ipware

Recommended Posts

Obtenez l'adresse IP du client avec Django
Récupérer la chaîne de requête (chaîne de requête) avec Django
Obtenez votre propre adresse IP en Python
Obtenir l'adresse IP locale
[Django] Changer l'adresse IP par défaut de la commande runserver
Obtenir toutes les adresses IP des instances du groupe d'autoscaling
Obtenez le chemin du bureau en Python
Obtenez le chemin du script en Python
Changer la langue affichée dans Django 1.9
Obtenez le chemin du bureau en Python
Obtenez le nom d'hôte en Python
Obtenir une adresse à partir d'un code postal
[OCI] Script Python pour obtenir l'adresse IP d'une instance de calcul dans Cloud Shell
Obtenez l'adresse IPv4 attribuée à l'interface réseau dans le code (Linux)
Django ~ Affichons-le sur le navigateur ~
Obtenez les nièmes valeurs les plus importantes dans Pandas
Résoudre l'erreur d'adresse déjà utilisée
Obtenir les paramètres de requête pour les requêtes GET avec Django
Pour obtenir une adresse IP locale par programme
Je ne peux pas obtenir l'élément dans Selenium!
Obtenir la liste de codes EDINET en Python
Obtenez l'adresse à partir de la latitude et de la longitude
Essayez d'accéder à l'API Spotify dans Django.
Récupérez uniquement le texte du formulaire Django.
Un script qui enregistre l'adresse IP utilisée par wercker dans le groupe de sécurité
[Python] Récupérez les fichiers dans le dossier avec Python
Obtenez la météo à Osaka via l'API Web (python)
Le moyen le plus simple de démarrer avec Django
Modèle dans Django
Récupérer l'appelant d'une fonction en Python
Obtenir uniquement les éléments de sous-classe dans une liste
Obtenez le titre de la fenêtre du système X Window en Python
Définir une adresse IP fixe dans l'environnement Linux
[Django] Créez un formulaire qui remplit automatiquement l'adresse à partir du code postal
Comment obtenir les fichiers dans le dossier [Python]
Spécifiez l'URL de la vue dans le modèle Django
Obtenir uniquement la partie adresse de la carte réseau (eth0)
L'histoire de l'affichage des fichiers multimédias dans Django
[Django] css dans le projet ne peut pas être lu
Connectez-vous avec json en utilisant pygogo.
Formulaire à Django
Outil pour insérer le nom du pays et le code du pays dans une partie de l'adresse IP
Notes d'apprentissage pour la fonction migrations dans le framework Django (2)
Comment obtenir le nom de la variable lui-même en python
Comment obtenir plusieurs objets de modèle au hasard dans Django
Obtenir le nom de fichier dans un dossier à l'aide de glob
Comment obtenir le nombre de chiffres en Python
[Python] Obtenez les nombres dans l'image graphique avec OCR
[python] Récupère la liste des classes définies dans le module
[Django] Perform Truncate Table (supprimer toutes les données de la table)
Définissez DateField du formulaire sur type = date dans Django
Obtenez des résultats au format dict avec Python psycopg2
Obtenir la taille (nombre d'éléments) de Union Find en Python
Obtenez la valeur sélectionnée dans le menu déroulant Selenium Python VBA
Notes d'apprentissage pour la fonction migrations dans le framework Django (3)
Notes d'apprentissage pour la fonction migrations dans le framework Django (1)
[Django 2.2] Trier et obtenir la valeur de la destination de la relation
Obtenez l'URL de la destination de la redirection HTTP en Python