[PYTHON] J'ai essayé de sauvegarder l'historique des demandes d'API DRF avec django-request

C'est une histoire d'utilisation de django-request dans DRF.

Ce que tu peux faire

--Enregistrer l'historique des demandes d'API

Choses impossibles

--Historique du contenu du corps de la requête tel que les paramètres POST ―― Puisqu'il y a aussi un point de vue sécurité, sauvegarder les paramètres POST est risqué, n'est-ce pas?

procédure

1 Installez avec pip etc.

pip install django-request

2 Ajoutez request à ʻINSTALLED_APPS`

3 Ajoutez request.middleware.RequestMiddleware à MIDDLEWARE

4 Exécution de la migration

manage.py migrate

La requête API est maintenant stockée dans la table request_request.

Personnaliser

Chemin d'exclusion

Même la demande de django-admin sera enregistrée, donc je pense qu'il vaut mieux l'exclure Je l'ai fait comme ça (la santé est un laissez-passer pour un bilan de santé)

REQUEST_IGNORE_PATHS = (
    r'^admin/', r'^docs/', r'^health$', r'\.ico$', r'^static/'
)

À propos de l'adresse IP

Étant donné que l'adresse IP utilise REMOTE_ADDR, elle ne peut pas être obtenue correctement s'il existe un équilibreur de charge. Je l'ai fait comme ça avec une mesure douce-amère (s'il vous plaît dites-moi s'il y a un meilleur moyen)

from request.middleware import RequestMiddleware

class XRequestMiddleware(RequestMiddleware):
    def process_response(self, request, response):
        # django-REMOTE en demande_J'ai enregistré ADDR en tant qu'IP, je suis donc obligé d'utiliser HTTP_X_FORWARDED_Changer pour FOR
        http_x_forwarded_for_ip = request.META.get('HTTP_X_FORWARDED_FOR')
        remote_addr_ip = request.META.get('REMOTE_ADDR')
        if http_x_forwarded_for_ip:
            request.META['REMOTE_ADDR'] = http_x_forwarded_for_ip

        response = super().process_response(request, response)

        if http_x_forwarded_for_ip:
            request.META['REMOTE_ADDR'] = remote_addr_ip

        return response

À propos, dans HTTP_X_FORWARDED_FOR, les adresses IP peuvent être entrées séparées par des virgules, donc si vous utilisez REQUEST_IGNORE_IP, vous devriez faire comme suit.

http_x_forwarded_for_ip = request.META.get('HTTP_X_FORWARDED_FOR').split(',')[0]

Impressions

C'est facile à intégrer et c'est essentiel pour les données. Un autre problème est la sauvegarde lorsque les données sont accumulées. Cependant, je veux que vous mettiez à jour l'adresse IP ...

Recommended Posts

J'ai essayé de sauvegarder l'historique des demandes d'API DRF avec django-request
J'ai essayé de frapper l'API avec le client python d'echonest
J'ai essayé le roman Naro API 2
J'ai essayé l'API du roman Naruro
J'ai essayé d'utiliser l'API checkio
J'ai essayé de toucher l'API COTOHA
J'ai essayé de jouer avec l'image avec Pillow
J'ai essayé d'utiliser l'API BigQuery Storage
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
J'ai essayé de "lisser" l'image avec Python + OpenCV
J'ai essayé d'accéder à l'API Qiita depuis le début
J'ai essayé de sauvegarder les données avec discorde
J'ai essayé d'utiliser l'API Google Cloud Vision
J'ai essayé de "binariser" l'image avec Python + OpenCV
J'ai essayé "Receipt OCR" avec l'API Google Vision
J'ai essayé de jouer avec la calculatrice avec tkinter
J'ai essayé d'entraîner la fonction péché avec chainer
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé de découvrir notre obscurité avec l'API Chatwork
J'ai essayé d'utiliser l'API de Sakenowa Data Project
J'ai essayé de résoudre le problème avec Python Vol.1
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé fp-growth avec python
J'ai essayé de gratter avec Python
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'ai essayé de simuler la propagation de l'infection avec Python
J'ai essayé d'analyser les émotions de tout le roman "Weather Child" ☔️
[Première API COTOHA] J'ai essayé de résumer l'ancienne histoire
J'ai essayé de publier automatiquement sur ChatWork au moment du déploiement avec Fabric et ChatWork Api
J'ai essayé d'utiliser la bibliothèque Python de Ruby avec PyCall
J'ai essayé de notifier les informations de retard de train avec LINE Notify
J'ai essayé Learning-to-Rank avec Elasticsearch!
J'ai essayé Google Sign-In avec Spring Boot + Spring Security REST API
J'ai essayé le clustering avec PyCaret
J'ai essayé la gestion du suivi avec l'API Twitter et Python (facile)
J'ai essayé de remplacer le disque dur Windows 10 par un SSD plus petit
J'ai essayé de toucher l'API Qiita
J'ai essayé la bibliothèque changefinder!
J'ai essayé de toucher la bibliothèque d'API de contrôle de routeur multi-fournisseur NAPALM
[Python] J'ai essayé de collecter des données en utilisant l'API de wikipedia
J'ai essayé l'API Google Cloud Vision pour la première fois
Appelez l'API avec python3.
J'ai essayé gRPC avec Python
J'ai essayé de gratter avec du python
J'ai essayé d'obtenir diverses informations de l'API codeforces
[Pour les débutants] J'ai essayé d'utiliser l'API Tensorflow Object Detection
J'ai essayé de vérifier l'identification du locuteur par l'API de reconnaissance du locuteur d'Azure Cognitive Services avec Python. # 1
J'ai essayé d'utiliser l'API Google avec Ruby et Python - Faites de la base de données une feuille de calcul et gérez-la avec Google Drive
J'ai essayé de vérifier l'identification du locuteur par l'API de reconnaissance du locuteur d'Azure Cognitive Services avec Python. # 2
J'ai essayé de gratter le classement du calendrier de l'avent Qiita avec Python
[AWS / Tello] J'ai essayé de faire fonctionner le drone avec ma voix Part2
J'ai essayé de décrire le trafic en temps réel avec WebSocket
J'ai essayé de résoudre l'édition du débutant du livre des fourmis avec python
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
J'ai essayé la validation croisée basée sur le résultat de la recherche de grille avec scikit-learn