Python-Anfänger versucht, dem Administrator von Django eine grundlegende Authentifizierung hinzuzufügen

Zweck

Ich wollte eine grundlegende Authentifizierung vor dem Anmeldebildschirm der Administrationsseite von Django durchführen. Aber ich wollte nicht auf andere Seiten gehen. Ich weiß nicht viel über Python und Django, aber ich denke, ich könnte es vorerst tun, also werde ich es offenlegen. Ich denke nicht, dass es die beste Lösung ist, also lassen Sie mich bitte wissen, ob es einen besseren Weg gibt.

python: 3.5.2 Django==1.11.4

Es ist ein Gefühl, dass ich nicht sagen kann, dass das Ergebnis von Versuch und Irrtum für ungefähr zwei Tage super einfach ist.

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)
]

Es ist so. スクリーンショット.png

yourproject/my_admin_site.py


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

Die Standardauthentifizierung kann ohne diesen Teil durchgeführt werden. Ohne diesen Teil wird jedoch ein trauriger Bildschirm angezeigt, der besagt, dass bei der Eingabe von admin kein Vorgang ausgeführt werden kann. Die Liste der Modelle, die bedient werden können, wird von außen im _register von django.contrib.admin.sites.site registriert. Wenn Sie also nur das Modell erben, können Sie diese Informationen anscheinend nicht abrufen. Es wird also gelöst, indem Sie django.contrib.admin.sites.site kopieren. \ _Registrieren Sie sich bei self. \ _ Registrieren Sie Ihre eigene Klasse. Ich habe Lust dazu. Ich mag es nicht, auf die implizite private Methode zuzugreifen, aber es hat funktioniert. Vielleicht. Im Moment gibt es keine Unannehmlichkeiten.

Ich finde es gut und schlecht, dass es keinen klaren Unterschied zwischen Python gibt, öffentlich und privat.

Referenz https://bitstar.jp/blog/basic%E8%AA%8D%E8%A8%BC

Recommended Posts

Python-Anfänger versucht, dem Administrator von Django eine grundlegende Authentifizierung hinzuzufügen
Versuchen Sie, RPN mit Python zu berechnen (für Anfänger)
Versuchen Sie Debian + Python 3.4 + django1.7 ……
(Python) Versuchen Sie, eine Webanwendung mit Django zu entwickeln
Einführung in Python Django (2) Win
Versuchen Sie, Python selbst zu verstehen
3 Gründe für die Programmierung Anfänger sollten mit Python beginnen
Grundlegende Python-Grammatik für Anfänger
~ Tipps für Python-Anfänger mit Liebe von Pythonista ③ ~
[AWS] Versuchen Sie, die Python-Bibliothek mit SAM + Lambda (Python) zur Ebene hinzuzufügen.
Versuchen Sie, Facebook mit Python zu betreiben
Versuchen Sie, Trace in Python zu berechnen
Versuchen Sie, die cloudmonkey-CLI in python3 -1 zu konvertieren
Versuchen Sie, Ihrer IFC-Datei mit IfcOpenShell Python eine Wand hinzuzufügen
Python-Anfänger versuchten es herauszufinden
Einführung in Python Django (2) Mac Edition
Versuchen Sie es mit Pythons Webframework Django (1) - Von der Installation bis zum Serverstart
Migrieren Sie Django-Anwendungen, die unter Python 2.7 ausgeführt werden, auf Python 3.5
Versuchen Sie, Farbfilme mit Python zu reproduzieren
Versuchen Sie, sich mit Python bei qiita anzumelden
Antwort auf AtCoder Beginners Selection von Python3
[Django] Möchten Sie die Administrationsseite anpassen?
Versuchen Sie, Excel mit Python (Xlwings) zu betreiben.
10 Python-Fehler, die Anfängern häufig sind
Python Amateur versucht die Liste zusammenzufassen ①
Ich habe versucht, Python zu berühren (grundlegende Syntax)
Hinzufügen von Serien zur Spalte in Python-Pandas
[Für Anfänger] Versuchen Sie Web Scraping mit Python
[Python] Führen Sie UIKit3 in das Django-Projekt ein
Versuchen Sie Python
Hinzufügen einer Pre-Save-Verarbeitung beim Hinzufügen eines Objekts auf der Django-Verwaltungssite
Der schnellste Weg für Anfänger, um Python zu beherrschen
Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑦ (Customize Admin)
Erste Schritte zum Testen von Google CloudVision in Python
Versuchen Sie, Oni Mai Tsuji Miserable mit Python zu implementieren
Versuchen Sie, dem Bild die Verzerrung des Fischaugenobjektivs hinzuzufügen
Versuchen Sie, Metriken über Python DogStatsD an datadog zu senden
Berechnen wir das statistische Problem mit Python
3,14 π Tag, versuchen Sie also, in Python auszugeben
Versuchen Sie, mit django-import-export csv-Daten zu django hinzuzufügen
Versuchen Sie automatisch, Enum in Python 3.6 automatisch zu bewerten
Python für Super-Anfänger Super-Anfänger Python # Einfach loszuwerden
Versuchen Sie, das Problem der Python-Klassenvererbung zu lösen
Python-Anfänger haben versucht, einen Energy-Drink zu codieren
Versuchen Sie, das Mensch-Maschine-Diagramm mit Python zu lösen
Django Tutorial Zusammenfassung für Anfänger von Anfängern ② (Model, Admin)
KI-Anfänger versuchen, professionelle Studenten Bot zu machen
Versuchen Sie, mit Python eine Lebenskurve zu zeichnen
Memo Nr. 3, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
Memo Nr. 1, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Versuchen Sie, Python-Dokumente automatisch mit Sphinx zu generieren
"Cython" Tutorial, um Python explosiv zu machen: Grundkonfiguration
Memo Nr. 2, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Python-Mock, um AWS IoT Device Shadow auszuprobieren
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Python-Anfänger süchtig nach Django
Memo Nr. 7, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Von 0 bis Django Entwicklungsumgebung Konstruktion bis Grundbetrieb
Einführung in die Programmierung (Python) TA Tendenz für Anfänger
Memo Nr. 6 für Python-Anfänger zum Lesen von "Detaillierte Erklärung der Python-Grammatik"