[PYTHON] [Django] À propos des utilisateurs pouvant être utilisés sur un modèle

introduction

Dans Django, si vous voulez afficher le nom de l'utilisateur actuellement connecté à l'écran, vous pouvez le faire en faisant «{{user.username}}» ou «{{user.get_username}}» sur le modèle. Mais pourquoi puis-je utiliser cette variable ʻuser alors que je ne l'ai pas transmise aux modèles en utilisant la fonction renderdans views.py ou écraséeget_context_data ()` pour ajouter la variable? J'avais une question ici, alors j'ai fait quelques recherches.

Conclusion

Les variables qui peuvent être utilisées dans le modèle sont stockées dans le contexte (= {: , .....}), et ce contexte comprend approximativement les deux types de variables suivants.

  1. Variables transmises à l'aide de la fonction de rendu, etc. dans views.py
  2. Variables définies dans le fichier spécifié par "Context_processers" spécifié dans OPTION de TEMPLATES dans settings.py

ʻUserest une variable qui correspond à l'explication de 2. Il existe d'autres variables principales qui peuvent être utilisées sans le spécifier dans views.py, telles querequest, permetmessage`.

Où il est stocké

Tout d'abord, jetez un œil à setting.py.

config/setting.py


#
#réduction
#

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',
            ],
        },
    },
]

#
#réduction
#

Les quatre fichiers suivants sont spécifiés par TEMPLATES.OPTIONS.context_processors dans setting.py. django.template.context_processors.debug django.template.context_processors.request Où se trouve django.contrib.auth.context_processors.auth ・ ・ ・ ・ ・ ・ ʻuser django.contrib.messages.context_processors.messages`

Emplacement de stockage de ʻutilisateur`

python:django.contrib.auth.context_processors


#
#réduction
#

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),
    }

Par returnʻing'user ': user, ʻuser peut être utilisé dans le modèle. Après avoir retiré l'attribut ʻusername dans ʻuser comme ʻuser.username ou instancié la classe AnonymousUser, utilisez la méthode get_user dans la classe pour définir ʻuser.get_username pour changer le nom d'utilisateur connecté. Il peut être affiché.

(référence)

En bas se trouve la fonction 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] À propos des utilisateurs pouvant être utilisés sur un modèle
Module standard Python utilisable en ligne de commande
À propos du fait que l'objet recompilé peut être utilisé pour le modèle re.match
J'ai créé un modèle de projet Python générique
Masquer l'avertissement selon lequel zsh peut être utilisé par défaut sur Mac
Types de fichiers pouvant être utilisés avec Go
Fonctions pouvant être utilisées dans l'instruction for
[Hackason] À propos de la création d'un outil pouvant être imprimé sur Raspberry Pi [Outil pratique]
Algorithmes de base utilisables par les pros de la compétition
Notes sur les connaissances Python utilisables avec AtCoder
Enregistrement d'image ANT qui peut être utilisé en 5 minutes
Cours de Deep Learning pouvant être écrasé sur place
Comment filtrer les clés externes qui peuvent être sélectionnées sur l'écran d'administration de Django
Goroutine (contrôle parallèle) utilisable sur le terrain
Goroutine utilisable sur le terrain (édition errgroup.Group)
Scripts pouvant être utilisés lors de l'utilisation de Bottle en Python
Installez Mecab et CaboCha sur ubuntu16.04LTS afin qu'il puisse être utilisé à partir de la série python3
[Django] Noms de champs pouvant être utilisés pour le modèle utilisateur, l'enregistrement des utilisateurs et les méthodes de connexion
Comment définir des variables pouvant être utilisées dans toute l'application Django ~ Utile pour les modèles, etc. ~
Le littéral octal peut être utilisé dépend du langage de programmation
Gestion des chaînes de caractères dans la communication JSON
Confirmation que rkhunter peut être installé
Résumé de l'entrée standard de Python pouvant être utilisée dans Competition Pro
À propos du fait que le résumé de la torche peut être vraiment utilisé lors de la construction d'un modèle avec Pytorch
Remplissage facile des données pouvant être utilisées dans le traitement du langage naturel
Module de traitement du signal acoustique qui peut être utilisé avec Python-Sounddevice ASIO [Application]
Python-Sound device Module de traitement du signal acoustique ASIO [Basic]
Django: tester un middleware qui dépend d'un autre middleware
Je voulais créer rapidement un serveur de messagerie utilisable librement avec postfix + dovecot sur EC2
Notes personnelles des opérations liées aux pandas qui peuvent être utilisées dans la pratique
Programme d'installation facile et programme de mise à jour automatique pouvant être utilisé dans n'importe quelle langue
Django # 2 (modèle)
Résumé des sources de données scikit-learn pouvant être utilisées lors de la rédaction d'articles d'analyse
Comment installer la bibliothèque Python qui peut être utilisée par les sociétés pharmaceutiques
Commande Linux (édition de base) utilisable à partir d'aujourd'hui si vous connaissez
Module de grattage "Gaspacho" qui peut être utilisé plus facilement que Beautiful Soup
Jusqu'à ce que vous puissiez utiliser youtube-dl avec Synology (DS120j)
Construire un Sphinx qui peut être écrit avec Markdown
Même un singe peut comprendre! À propos des intentions dans discord.py!
Répertorier les packages pouvant être mis à jour avec pip
Le problème que la commande ifconfig ne peut pas être utilisée
Présentation et fonctionnalités utiles de scikit-learn qui peuvent également être utilisées pour l'apprentissage en profondeur
Présentation de la commande "Glances", un outil de surveillance compréhensible en un coup d'œil, sur Mac
Convertir des images du SDK FlyCapture en un formulaire pouvant être utilisé avec openCV
Résumé des méthodes d'analyse de données statistiques utilisant Python qui peuvent être utilisées en entreprise
Introduction du package de collecte automatique d'images "icrawler" (0.6.3) qui peut être utilisé pendant l'apprentissage automatique
[Python] Introduction au scraping WEB | Résumé des méthodes pouvant être utilisées avec webdriver
Analyse morphologique et tfidf (avec code de test) pouvant être effectuée en 1 minute environ
Serveur de partage de fichiers réalisé avec Raspberry Pi pouvant être utilisé pour le travail à distance
Statistiques simples qui peuvent être utilisées pour analyser l'effet des mesures sur les sites EC et les codes qui peuvent être utilisés dans le notebook jupyter