python débutant essaie d'ajouter une authentification de base à l'administrateur de Django

Objectif

Je voulais faire une authentification de base avant l'écran de connexion de la page d'administration de Django. Mais je ne voulais pas aller sur d'autres pages. Je ne connais pas grand chose à Python ni à Django, mais je pense que je pourrais le faire pour le moment, alors je vais l'exposer. Je ne pense pas que ce soit la meilleure solution, alors faites-moi savoir s'il existe une meilleure solution.

python: 3.5.2 Django==1.11.4

C'est un sentiment que je ne peux pas dire que le résultat d'essais et d'erreurs pendant environ deux jours est super simple.

yourproject/my_admin_site.py


from django.http import HttpResponse
from django.views.decorators.cache import never_cache
from django.contrib.admin.sites import site, AdminSite
import base64

class MyAdminSite(AdminSite):

    def __init__(self, name='admin'):
        super().__init__()

    def get_urls(self):
        self._registry = site._registry
        return super().get_urls()

    @never_cache
    def login(self, request, extra_context=None):
        if not self._basicAuth(request):
            return self._http401()
        return super().login(request, extra_context)

    def _basicAuth(self, request):
        if 'HTTP_AUTHORIZATION' not in request.META:
            return False
        (authscheme, base64_idpass) = request.META['HTTP_AUTHORIZATION'].split(' ', 1)
        if authscheme.lower() != 'basic':
            return _http401()
        idpass = base64.decodestring(base64_idpass.strip().encode('ascii')).decode('ascii')
        (id_, password) = idpass.split(':', 1)
        if id_ == "foo" and password == "bar":
            return True
        else:
            return False

    def _http401(self):
        response = HttpResponse("Unauthorized", status=401)
        response['WWW-Authenticate'] = 'Basic realm="basic auth test"'

        return response


my_site = MyAdminSite()

yourproject/urls.py


from django.conf.urls import url, include
from yourproject import my_admin_site

urlpatterns = [
    #url(r'^admin/', admin.site.urls),
    url(r'^admin/', my_admin_site.my_site.urls)
]

C'est comme ça. スクリーンショット.png

yourproject/my_admin_site.py


    def get_urls(self):
        self._registry = site._registry
        return super().get_urls()

L'authentification de base peut être effectuée sans cette partie, mais sans cela, un écran triste apparaît indiquant qu'aucune opération ne peut être effectuée lors de la saisie d'admin. La liste des modèles qui peuvent être exploités est enregistrée de l'extérieur dans _register de django.contrib.admin.sites.site, il semble donc que vous ne pouvez pas extraire ces informations si vous héritez simplement du modèle? Donc, il est résolu en copiant django.contrib.admin.sites.site. \ _Register to self. \ _ Register de votre propre classe. J'ai envie de le faire. Je n'aime pas accéder à la méthode privée implicite, mais cela a fonctionné. Peut-être. Il n'y a aucun inconvénient pour le moment.

Je pense qu'il est bon et mauvais qu'il n'y ait pas de différence claire entre python, public et privé.

Référence https://bitstar.jp/blog/basic%E8%AA%8D%E8%A8%BC

Recommended Posts

python débutant essaie d'ajouter une authentification de base à l'administrateur de Django
Essayez de calculer RPN avec Python (pour les débutants)
Essayez Debian + Python 3.4 + django1.7 ……
(Python) Essayez de développer une application Web en utilisant Django
Introduction à Python Django (2) Win
Essayez de comprendre Python soi
3 raisons pour lesquelles les débutants en programmation devraient commencer avec Python
Grammaire de base Python pour les débutants
~ Conseils pour les débutants de Python présentés avec amour par Pythonista ③ ~
[AWS] Essayez d'ajouter la bibliothèque Python à la couche avec SAM + Lambda (Python)
Essayez d'exploiter Facebook avec Python
Essayez de calculer Trace en Python
Essayez de convertir la CLI cloudmonkey en python3 -1
Essayez d'ajouter un mur à votre fichier IFC avec IfcOpenShell python
les débutants en python ont essayé de le découvrir
Introduction à Python Django (2) Édition Mac
Essayez d'utiliser le framework web de Python Django (1) - De l'installation au démarrage du serveur
Migrer les applications Django exécutées sur Python 2.7 vers Python 3.5
Essayez de reproduire un film couleur avec Python
Essayez de vous connecter à qiita avec Python
Réponse à la sélection des débutants d'AtCoder par Python3
[Django] Vous souhaitez personnaliser la page d'administration?
Essayez d'utiliser Excel en utilisant Python (Xlwings)
10 erreurs Python communes aux débutants
Python amateur tente de résumer la liste ①
J'ai essayé de toucher Python (syntaxe de base)
Ajouter une série à la colonne dans les pandas python
[Pour les débutants] Essayez le web scraping avec Python
[Python] Présentez UIKit3 au projet Django
Essayez Python
Comment ajouter un traitement de pré-sauvegarde lors de l'ajout d'un objet sur le site d'administration de Django
Le moyen le plus rapide pour les débutants de maîtriser Python
Résumé du tutoriel Django pour les débutants par les débutants ⑦ (Personnaliser l'administrateur)
Premiers pas pour essayer Google CloudVision en Python
Essayez d'implémenter Oni Mai Tsuji Miserable avec python
Essayez d'ajouter la distorsion de l'objectif fisheye à l'image
Essayez d'envoyer des métriques à datadog via python, DogStatsD
Calculons en fait le problème statistique avec Python
3.14 π jour, alors essayez de sortir en Python
Essayez d'utiliser django-import-export pour ajouter des données csv à django
Essayez auto pour évaluer automatiquement Enum dans Python 3.6
Python pour les super débutants Super débutants Python # Facile à éliminer
Essayez de résoudre le problème de l'héritage de classe Python
Un débutant en Python a essayé de coder une boisson énergisante
Essayez de résoudre le diagramme homme-machine avec Python
Résumé du tutoriel Django pour les débutants par les débutants ② (Modèle, Admin)
Les débutants en IA essaient de faire des étudiants professionnels Bot
Essayez de dessiner une courbe de vie avec python
Mémo n ° 3 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Essayez de créer un code de "décryptage" en Python
Mémo n ° 1 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Essayez de générer automatiquement des documents Python avec Sphinx
Tutoriel "Cython" pour rendre Python explosif: configuration de base
Mémo n ° 2 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Python simulé pour essayer AWS IoT Device Shadow
Essayez de créer un groupe de dièdre avec Python
Débutants en Python accro à Django
Mémo n ° 7 que les débutants Python lisent "Explication détaillée de la grammaire Python"
De 0 à la construction de l'environnement de développement Django à l'exploitation de base
Introduction à la programmation (Python) TA Tendency pour les débutants
Mémo n ° 6 pour les débutants Python à lire "Explication détaillée de la grammaire Python"