[PYTHON] Implémentation de la fonction de connexion dans Django

Ceci est mon mémorandum. J'ai fait beaucoup de recherches pour ma propre étude, mais comme il y avait beaucoup d'explications pour la version 2 etc., c'était compliqué, donc je vais le résumer dans une certaine mesure. Je l’écris dans l’espoir qu’il profitera à ceux qui ont rencontré des problèmes similaires. Veuillez regarder avec des yeux chaleureux! (N'hésitez pas à apporter des corrections)

Vous pouvez comprendre la plupart des choses en faisant un tutoriel (approprié) https://docs.djangoproject.com/ja/3.1/intro/tutorial01/


Environnement d'utilisation
・ OS ... windows10 ・ Python ... 3.7.6 ・ Django ... 3.1.3

Construction de l'environnement Vous pouvez installer python localement, mais compte tenu de la gestion des paquets, etc., est-il préférable d'utiliser anaconda? Si vous regardez ici, vous en trouverez beaucoup, alors passons en revue.

Je suis désolé s'il y a un oubli. Le paquet est probablement

pip install django
pip install pillow

Cela aurait dû être juste ...! !!

Let's Start Project!!

Cet espace est aussi un tutoriel, ...

J'écrirai principalement là où je suis tombé d'ici.

Implémentation autour de la connexion Django est livré avec un site d'administration par défaut. Lors de la création de votre propre site de blog, etc., il semble bon d'utiliser cet écran de gestion. Ce que je voulais faire était
  1. Tout le monde peut créer un compte
  2. Créer ma page pour chaque utilisateur

Je voulais implémenter la fonction, j'ai donc créé ma propre fonction de connexion. Comme un flux

    1. Création d'une application qui effectue le traitement de la connexion avec la commande start app
  1. Définissez les informations utilisateur dans Model (héritez de AbstractUser)
  2. Créez une vue pour la connexion et la déconnexion avec LoginView et LogoutView
  3. En ce qui concerne la nouvelle inscription, View n'existe pas, vous pouvez donc utiliser votre propre méthode.
  4. Associer le modèle et la vue sous forme J'ai procédé avec le sentiment ci-dessus.

2:

model.py


class User(AbstractUser):
    pass

Et vient d'hériter de AbstractUser. Pour le moment, le document officiel dit que vous devez créer le vôtre en remplaçant. Vous pouvez ajouter vos colonnes préférées en éditant ici. [Se référer à l'utilisateur abstrait] https://docs.djangoproject.com/en/3.1/topics/auth/customizing/

3: Je pensais aux options suivantes comme méthode d'implémentation des fonctions de connexion et de déconnexion.

view.py


from django.contrib.auth import authenticate, login

def my_view(request):
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(request, username=username, password=password)
    if user is not None:
        login(request, user)
        # Redirect to a success page.
        ...
    else:
        # Return an 'invalid login' error message.
        ...

aussi bien que

Méthode utilisant View Source de référence: https://docs.djangoproject.com/ja/3.1/topics/auth/default/

Je l'ai implémenté ici car l'utilisation de View réduit la quantité de code, mais il semble que la méthode intuitivement facile à comprendre soit la méthode de traitement dans l'ancienne méthode. Lorsque vous utilisez View, assurez-vous de vérifier les variables à l'intérieur. Les causes du code inutile et des erreurs sont répertoriées de manière relative. En parlant cette fois, Form est la valeur par défaut car elle est utilisée lors de la définition d'un nom de classe en html. Je ne modifie que template_name et j'hérite du reste tel quel. La déconnexion est implémentée de la même manière, elle est donc omise.

4: Le nouvel écran d'enregistrement a le plus trébuché. J'écrirai à partir de la conclusion.

view.py


def signup(request):
    if request.method == 'POST':
        form = UserCreateForm(request.POST)
        if form.is_valid():
            form.save()
        else:
            print(form.errors)
        return redirect('/login')
    return render(request, 'loginauth/create_user.html')

def redirect_view(request):
    response = redirect('/login')
    return response

forms.py


class UserCreateForm(UserCreationForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['username'].widget.attrs['class'] = 'form-control'
        self.fields['password1'].widget.attrs['class'] = 'form-control'
        self.fields['password2'].widget.attrs['class'] = 'form-control'
        self.fields['email'].widget.attrs['class'] = 'form-control'

    class Meta:
       model = User
       fields = ("username", "password1","password2", "email",)

C'est comme ça. Je vais le compléter.

La partie la plus compliquée personnellement Views.py form = UserCreateForm (request.POST) était. Pour résumer brièvement ce que vous faites Il existe un formulaire pour créer un utilisateur appelé UserCreationForm, Définir le modèle: utilisateur et champs du formulaire. Extrayez le contenu de views.py qui correspond aux champs de request.POST et vérifiez si les mots de passe1 et 2 correspondent à form.is_valid (). S'ils correspondent, enregistrez-les tels quels.

C'est un flux. Source de référence: https://docs.djangoproject.com/ja/3.1/topics/auth/default/ https://docs.djangoproject.com/ja/3.1/topics/auth/default/#django.contrib.auth.forms.UserCreationForm Si vous lisez ici, vous pouvez voir comment l'écrire.

Conclusion Vous pouvez généralement le résoudre en lisant Document. Ensuite, vous devez faire un effort pour l'interpréter Pour cela, nous devons comprendre le traitement effectué dans le contenu du colis, etc.! !! !! !! Au fait, je ne sais pas du tout encore, donc je lis le contenu chaque fois que j'ai le temps. Si vous regardez les méthodes et les variables de classe lorsque vous êtes bloqué, il y a beaucoup d'indices, il est donc recommandé

Recommended Posts

Implémentation de la fonction de connexion dans Django
Implémentation du tri rapide en Python
Introduction et mise en œuvre de la fonction d'activation
Implémentation facile de la fonction de paiement par carte de crédit avec PAY.JP [Django]
Implémentation du jeu de vie en Python
Implémentation du tri original en Python
Implémentation du bouton like dans Django + Ajax
Blog Django sur heroku: implémentation de la connexion
Implémentation de la fonction d'authentification JWT dans Django REST Framework à l'aide de djoser
C'est une implémentation de ConnectionPool dans redis.py
Différence de sortie de la fonction de fenêtre de longueur paire
Bonjour tout le monde pas localhost à Django
Implémentation du traitement asynchrone dans Django (Celery, Redis)
Implémentation de la fonction d'authentification du modèle utilisateur personnalisé dans Django REST Framework à l'aide de djoser
Dualité en fonction
[Unity (C #), Python] Mémo d'étude de communication API ③ Implémentation de la fonction de connexion simplifiée
Formulaire à Django
La fonction _authenticate_with_backend était obsolète dans django auth.autenticate
Dessiner un graphique d'une fonction quadratique en Python
Correction des arguments de la fonction utilisée dans map
Afficher un message d'erreur lorsque la connexion échoue dans Django
Gacha écrit en python - Ajout d'une fonction de réglage de période -
Passer les informations de connexion à afficher dans Django
L'histoire de l'affichage des fichiers multimédias dans Django
Implémenter la fonctionnalité de connexion JWT dans le framework Django REST
Explication de la distance d'édition et de l'implémentation en Python
Reconsidération de l'implémentation de la pagination par style Relay dans GraphQL (version utilisant la fonction Window)
Ceci est un exemple d'application de fonction dans dataframe.
Exécuter des fonctions en parallèle
Implémentation d'estimation la plus probable du modèle de sujet en python
Implémentation RNN en python
Implémentation ValueObject en Python
Implémentation du menu déroulant dans Django
Fonction générateur même en JavaScript
Impressions de toucher Django
À propos des tests dans la mise en œuvre de modèles d'apprentissage automatique
[Cinema 4D] fonction de vérification de tous les objets de la scène
Implémentation de la séquence de Fibonacci
Modifications du modèle dans Django
DataNitro, implémentation de la fonction de lecture des données de feuille
Implémentation d'estimation bayésienne de variante du modèle de sujet en python
Un mémorandum sur la mise en œuvre des recommandations en Python
Implémentation SVM en python
Explication sur l'erreur NoReverseMatch dans "python django super introduction"
Fonction de réglage NumPy
J'ai participé à l'activité de traduction du document officiel Django
Maintenance de l'environnement de développement Django + MongoDB (en cours d'écriture)
Avoir le graphique d'équation de la fonction linéaire dessiné en Python
Résumé des points d'achoppement à Django pour la première fois
Un mémo que j'ai écrit une fonction de base en Python en utilisant la récurrence
Rendre la fonction de dessin de polices japonaises dans OpenCV en général
Django a changé pour enregistrer beaucoup de données à la fois
Explication du CSV et exemple d'implémentation dans chaque langage de programmation
Optimisation des performances dans Django 3.xx
Implémentation informatique quantique de Quantum Walk 2
PHP comme var_dump dans le template Django
Gérer les constantes dans les modèles Django
Implémenter la fonction de connexion avec django-allauth