[PYTHON] [Django] Über Benutzer, die für Vorlagen verwendet werden können

Einführung

Wenn Sie in Django den Namen des aktuell angemeldeten Benutzers auf dem Bildschirm anzeigen möchten, können Sie dies tun, indem Sie "{{user.username}}" oder "{{user.get_username}}" in der Vorlage ausführen. Aber warum kann ich diese "Benutzervariable" verwenden, wenn ich sie nicht mit der Funktion "Rendern" in views.py an Vorlagen übergeben oder "get_context_data ()" überschrieben habe, um die Variable hinzuzufügen? Ich hatte hier eine Frage, also habe ich einige Nachforschungen angestellt.

Fazit

Die Variablen, die in der Vorlage verwendet werden können, werden im Kontext gespeichert (= {: , .....}), und dieser Kontext enthält ungefähr die folgenden zwei Arten von Variablen.

  1. Variablen, die mit der Renderfunktion usw. in views.py übergeben wurden
  2. Variablen, die in der Datei definiert sind, die von 'context_processers' angegeben wird, die in der OPTION von TEMPLATES in settings.py angegeben sind

user ist eine Variable, die der Erläuterung von 2 entspricht. Es gibt andere Hauptvariablen, die verwendet werden können, ohne sie in views.py anzugeben, z. B. request, perm und message.

Wo es aufbewahrt wird

Schauen Sie sich zunächst settings.py an.

config/setting.py


#
#Kürzung
#

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

#
#Kürzung
#

Die folgenden vier Dateien werden von TEMPLATES.OPTIONS.context_processors in settings.py angegeben. django.template.context_processors.debug django.template.context_processors.request Der Speicherort von django.contrib.auth.context_processors.auth user ・ ・ ・ user user user django.contrib.messages.context_processors.messages

Speicherort des Benutzers

python:django.contrib.auth.context_processors


#
#Kürzung
#

def auth(request):
    """
    Return context variables required by apps that use Django's authentication
    system.

    If there is no 'user' attribute in the request, use AnonymousUser (from
    django.contrib.auth).
    """
    if hasattr(request, 'user'):
        user = request.user
    else:
        from django.contrib.auth.models import AnonymousUser
        user = AnonymousUser()

    return {
        'user': user,
        'perms': PermWrapper(user),
    }

'User': user kann in der Vorlage durch return` verwendet werden. Verwenden Sie nach dem Abrufen des Attributs "Benutzername" in "Benutzer" als "Benutzer.Nutzername" oder dem Instanziieren der AnonymousUser-Klasse die Methode "get_user" in der Klasse, um "Benutzer.get_Benutzername" festzulegen und den angemeldeten Benutzernamen zu ändern Es kann angezeigt werden.

(Referenz)

Unten befindet sich die Funktion get_username.

python:django.contrib.auth.models


class AnonymousUser:
    id = None
    pk = None
    username = ''
    is_staff = False
    is_active = False
    is_superuser = False
    _groups = EmptyManager(Group)
    _user_permissions = EmptyManager(Permission)

    def __str__(self):
        return 'AnonymousUser'

    def __eq__(self, other):
        return isinstance(other, self.__class__)

    def __hash__(self):
        return 1  # instances always return the same hash value

    def __int__(self):
        raise TypeError('Cannot cast AnonymousUser to int. Are you trying to use it in place of User?')

    def save(self):
        raise NotImplementedError("Django doesn't provide a DB representation for AnonymousUser.")

    def delete(self):
        raise NotImplementedError("Django doesn't provide a DB representation for AnonymousUser.")

    def set_password(self, raw_password):
        raise NotImplementedError("Django doesn't provide a DB representation for AnonymousUser.")

    def check_password(self, raw_password):
        raise NotImplementedError("Django doesn't provide a DB representation for AnonymousUser.")

    @property
    def groups(self):
        return self._groups

    @property
    def user_permissions(self):
        return self._user_permissions

    def get_user_permissions(self, obj=None):
        return _user_get_permissions(self, obj, 'user')

    def get_group_permissions(self, obj=None):
        return set()

    def get_all_permissions(self, obj=None):
        return _user_get_permissions(self, obj, 'all')

    def has_perm(self, perm, obj=None):
        return _user_has_perm(self, perm, obj=obj)

    def has_perms(self, perm_list, obj=None):
        return all(self.has_perm(perm, obj) for perm in perm_list)

    def has_module_perms(self, module):
        return _user_has_module_perms(self, module)

    @property
    def is_anonymous(self):
        return True

    @property
    def is_authenticated(self):
        return False

    def get_username(self):
        return self.username

Recommended Posts

[Django] Über Benutzer, die für Vorlagen verwendet werden können
Python-Standardmodul, das in der Befehlszeile verwendet werden kann
Über die Angelegenheit, dass das re.compiled-Objekt für das re.match-Muster verwendet werden kann
Ich habe eine generische Python-Projektvorlage erstellt
Blenden Sie die Warnung aus, dass zsh auf dem Mac standardmäßig verwendet werden kann
Dateitypen, die mit Go verwendet werden können
Funktionen, die in der for-Anweisung verwendet werden können
[Hackason] Über das Erstellen eines Werkzeugs, das auf Raspberry Pi gedruckt werden kann [Praktisches Werkzeug]
Grundlegende Algorithmen, die bei Wettkampfprofis eingesetzt werden können
Hinweise zu Python-Kenntnissen, die mit AtCoder verwendet werden können
ANTs Bildregistrierung, die in 5 Minuten verwendet werden kann
Deep Learning Kurs, der vor Ort zerquetscht werden kann
So filtern Sie die externen Schlüssel, die auf dem Django-Verwaltungsbildschirm ausgewählt werden können
Goroutine (parallele Steuerung), die im Feld eingesetzt werden kann
Goroutine, die im Feld verwendet werden kann (errgroup.Group Edition)
Skripte, die bei der Verwendung von Bottle in Python verwendet werden können
Installieren Sie Mecab und CaboCha auf ubuntu16.04LTS, damit es aus der Python3-Serie verwendet werden kann
[Django] Feldnamen, die für das Benutzermodell, die Benutzerregistrierung und die Anmeldemethoden verwendet werden können
So legen Sie Variablen fest, die in der gesamten Django-App verwendet werden können ~ Praktisch für Vorlagen usw. ~
Welches Oktalliteral verwendet werden kann, hängt von der Programmiersprache ab
Umgang mit Zeichenketten in der JSON-Kommunikation
Bestätigung, dass rkhunter installiert werden kann
Zusammenfassung der Standardeingabe von Python, die in Competition Pro verwendet werden kann
Über die Sache, dass Fackelzusammenfassung wirklich verwendet werden kann, wenn ein Modell mit Pytorch erstellt wird
Einfaches Auffüllen von Daten, die in der Verarbeitung natürlicher Sprache verwendet werden können
Akustisches Signalverarbeitungsmodul, das mit Python-Sounddevice ASIO [Anwendung] verwendet werden kann
Python-Sound Gerät ASIO akustisches Signalverarbeitungsmodul [Basic]
Django: Testen Sie eine Middleware, die von einer anderen Middleware abhängt
Ich wollte schnell einen Mailserver erstellen, der mit postfix + dovecot auf EC2 frei verwendet werden kann
Persönliche Notizen zu Pandas-bezogenen Vorgängen, die in der Praxis verwendet werden können
Einfache Programminstallation und automatische Programmaktualisierung, die in jeder Sprache verwendet werden kann
Django # 2 (Vorlage)
Zusammenfassung der Scikit-Learn-Datenquellen, die beim Schreiben von Analyseartikeln verwendet werden können
So installieren Sie die Python-Bibliothek, die von Pharmaunternehmen verwendet werden kann
Linux-Befehl (Basic Edition), der ab heute verwendet werden kann, wenn Sie wissen
Kratzmodul "Gaspacho", das einfacher zu verwenden ist als Beautiful Soup
Bis Sie youtube-dl mit Synology (DS120j) verwenden können
Erstellen von Sphinx, das mit Markdown geschrieben werden kann
Sogar ein Affe kann verstehen! Über Absichten in discord.py!
Listen Sie Pakete auf, die mit pip aktualisiert werden können
Das Problem, dass der Befehl ifconfig nicht verwendet werden kann
Übersicht und nützliche Funktionen von Scikit-Learn, die auch für Deep Learning verwendet werden können
Einführung des Befehls "Glances", eines auf einen Blick verständlichen Überwachungstools, auf den Mac
Konvertieren Sie Bilder aus dem FlyCapture SDK in ein Formular, das mit openCV verwendet werden kann
Zusammenfassung der statistischen Datenanalysemethoden mit Python, die im Geschäftsleben verwendet werden können
Einführung des automatischen Bildersammlungspakets "icrawler" (0.6.3), das beim maschinellen Lernen verwendet werden kann
[Python] Einführung in das WEB-Scraping | Zusammenfassung der Methoden, die mit dem Webdriver verwendet werden können
Morphologische Analyse und tfidf (mit Testcode), die in ca. 1 Minute durchgeführt werden können
Mit Raspberry Pi erstellter Dateifreigabeserver, der für Remote-Arbeiten verwendet werden kann
Einfache Statistiken, mit denen die Auswirkungen von Maßnahmen auf EG-Standorte und Codes analysiert werden können, die in Jupyter-Notebooks verwendet werden können