Bonjour un! Voici Ponta, un chien Shiba. Il fait chaud aujourd'hui, alors j'ai mangé la saveur de soda. C'était incroyablement délicieux! Garigari-kun est fabriqué par une entreprise de la préfecture de Saitama. Ponta n'est jamais allé dans la préfecture de Saitama.
Eh bien, aujourd'hui, je vais contester la fonction de gestion des utilisateurs.
Tout d'abord, créez une application de compte.
terminal
(venv_dog) Ponta@shiba_app # python manage.py startapp accounts
Après avoir créé l'application, enregistrez-la dans INSTALLED_APPS dans shiba_app / settings.py. INSTALLED_APPS de Ponta ressemble à ceci:
shiba_app/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'top.apps.TopConfig',
'wan.apps.WanConfig',
'accounts.apps.AccountsConfig',
]
Dernier 'accounts.apps.AccountsConfig', Ajoutée.
Certains paramètres sont requis dans settings.py pour la fonction d'enregistrement / d'authentification de l'utilisateur. Tout d'abord, envoyez et recevez des e-mails pour la vérification de l'adresse e-mail, qui s'affiche sur la console dans l'environnement de développement. Le paramètre pour cela est EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' est.
Ensuite, laissez Django référencer le modèle utilisateur personnalisé, AUTH_USER_MODEL = 'accounts.CustomUser' Mettre en place.
De plus, pour django-allauth décrit ci-dessous, SITE_ID = 1 Mettre en place.
En outre, les paramètres du backend d'authentification AUTHENTICATION_BACKENDS = ( 'allauth.account.auth_backends.AuthenticationBackend', 'django.contrib.auth.backends.ModelBackend', ) est. allauth.account.auth_backends.AuthenticationBackend Est un backend d'authentification permettant aux utilisateurs généraux de se connecter avec l'authentification par adresse e-mail, django.contrib.auth.backends.ModelBackend Est un backend d'authentification permettant aux super utilisateurs de se connecter au site d'administration avec leur nom d'utilisateur.
ACCOUNT_AUTHENTICATION_METHOD = 'email' Alors, définissez-le sur la vérification de l'adresse e-mail, ACCOUNT_USERNAME_REQUIRED = True Le nom d'utilisateur est obligatoire dans.
ACCOUNT_EMAIL_VERIFICATION = 'mandatory' ACCOUNT_EMAIL_REQUIRED = True Il est obligatoire de confirmer votre adresse e-mail.
LOGIN_REDIRECT_URL = 'wan:index' Après vous être connecté avec, redirigez vers l'index de l'application wan et ACCOUNT_LOGOUT_REDIRECT_URL = 'top:index' Après vous être déconnecté avec, redirigez vers l'index de l'application principale.
ACCOUNT_LOGOUT_ON_GET = True Est un paramètre permettant de se déconnecter immédiatement après avoir cliqué sur le bouton de déconnexion.
shiba_app/settings.py
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
AUTH_USER_MODEL = 'accounts.CustomUser'
SITE_ID = 1
AUTHENTICATION_BACKENDS = (
'allauth.account.auth_backends.AuthenticationBackend',
'django.contrib.auth.backends.ModelBackend',
)
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_USERNAME_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_EMAIL_REQUIRED = True
LOGIN_REDIRECT_URL = 'wan:index'
ACCOUNT_LOGOUT_REDIRECT_URL = 'top:index'
ACCOUNT_LOGOUT_ON_GET = True
Django définit un modèle utilisateur par défaut, mais vous pouvez le remplacer pour définir un modèle utilisateur personnalisé.
account/models.py
rom django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
class Meta:
verbose_name_plural = 'CustomUser'
dogname = models.CharField(verbose_name='Dog Name', blank=False, max_length=40)
introduction = models.TextField(verbose_name='Introduction', blank=True)
J'ai ajouté dogname et introduction. J'aimerais faire ces écrans de saisie plus tard si j'ai une chance.
terminal
(venv_dog) Ponta@shiba_app # python manage.py makemigrations
Migrations for 'accounts':
accounts/migrations/0001_initial.py
- Create model CustomUser
Process finished with exit code 0
(venv_dog) Ponta@shiba_app # python manage.py migrate
Operations to perform:
Apply all migrations: accounts, admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0001_initial... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying accounts.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying sessions.0001_initial... OK
(venv_dog) Ponta@shiba_app #
Comme il est difficile de créer une fonction d'authentification utilisateur, nous utilisons un package appelé django-allauth.
terminal
(venv_dog) Ponta@shiba_app # pip install django-allauth
Dans INSTALLED_APPS dans settings.py pour rendre Django-allauth disponible pour votre application 'django.contrib.sites', 'allauth', 'allauth.account', 'allauth.socialaccount', Ajoutez 4 lignes.
shiba_app/settings.py
INSTALLED_APPS = [
(Omission)
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
]
Exécutez à nouveau la commande migrate pour créer la table utilisée par django-allauth.
terminal
(venv_dog) Ponta@shiba_app # python manage.py migrate
Operations to perform:
Apply all migrations: account, accounts, admin, auth, contenttypes, sessions, sites, socialaccount
Running migrations:
Applying account.0001_initial... OK
Applying account.0002_email_max_length... OK
Applying sites.0001_initial... OK
Applying sites.0002_alter_domain_unique... OK
Applying socialaccount.0001_initial... OK
Applying socialaccount.0002_token_max_lengths... OK
Applying socialaccount.0003_extra_data_default_dict... OK
Créez un super utilisateur pour accéder à l'écran d'administration de Django.
terminal
(venv_dog) Ponta@shiba_app # python manage.py createsuperuser
Username: ponta
Email address: [email protected]
Password:
Password (again):
This password is too short. It must contain at least 8 characters.
This password is too common.
Bypass password validation and create user anyway? [y/N]: N
Password:
Password (again):
Superuser created successfully.
Oups, la validation du mot de passe semble être bloquée si le mot de passe est trop court ou trop facile. La deuxième fois, je l'ai mis au sérieux.
Maintenant que vous avez créé un super utilisateur, essayez de vous connecter à l'écran d'administration de Django. http://127.0.0.1:8000/admin/ Accéder. Puis http://127.0.0.1:8000/admin/login/?next=/admin/ J'ai été redirigé vers et l'écran de connexion est apparu.
Entrez ici le nom d'utilisateur et le mot de passe que vous avez utilisés pour créer le super utilisateur pour vous connecter. Ensuite, j'ai pu me connecter avec succès comme indiqué ci-dessous et l'écran de gestion est apparu.
Actuellement, trois applications (top, wan, comptes) ont été créées dans shiba_app.
shiba_app/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('top.urls')),
path('wan/', include('wan.urls')),
path('accounts/', include('allauth.urls')),
]
top/urls.py
from django.urls import path
from . import views
app_name = 'top'
urlpatterns = [
path('', views.IndexView.as_view(), name='index'),
]
wan/urls.py
from django.urls import path
from . import views
app_name = 'wan'
urlpatterns = [
path('', views.IndexView.as_view(), name='index'),
]
top/views.py
from django.views import generic
class IndexView(generic.TemplateView):
template_name = "top/index.html"
wan/views.py
from django.views import generic
class IndexView(generic.TemplateView):
template_name = "wan/index.html"
Le nom d'utilisateur et le bouton de déconnexion s'affichent lors de la connexion, et le bouton d'enregistrement de l'utilisateur et le bouton de connexion s'affichent lors de la déconnexion.
top/templates/top/index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>"Qu'est-ce qu'un chien?" De Shiba Inu Ponta?</title>
</head>
<body>
<h1>"Qu'est-ce qu'un chien?" De Shiba Inu Ponta?</h1>
<p>Voici Ponta, un chien Shiba. Cordialement!</p>
{% if user.is_authenticated %}
<p>Nom d'utilisateur:{{ user }}</p>
<p><a href="{% url 'account_logout' %}">Se déconnecter</a> </p>
{% else %}
<p><a href="{% url 'account_signup' %}">Enregistrement de l'utilisateur</a></p>
<p><a href="{% url 'account_login' %}">S'identifier</a></p>
{% endif %}
</body>
</html>
Le nom d'utilisateur et le bouton de déconnexion s'affichent lors de la connexion, et le bouton d'enregistrement de l'utilisateur et le bouton de connexion s'affichent lors de la déconnexion. (Eh! Comme avant ??)
wan/templates/wan/index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>"Qu'est-ce qu'un chien?" De Shiba Inu Ponta?</title>
</head>
<body>
<h1>"Qu'est-ce qu'un chien?" De Shiba Inu Ponta?</h1>
{% if user.is_authenticated %}
<p>Nom d'utilisateur:{{ user }}</p>
<p><a href="{% url 'account_logout' %}">Se déconnecter</a> </p>
{% else %}
<p><a href="{% url 'account_signup' %}">Enregistrement de l'utilisateur</a></p>
<p><a href="{% url 'account_login' %}">S'identifier</a></p>
{% endif %}
</body>
</html>
Maintenant, regardons la première page.
Cliquez sur Enregistrement de l'utilisateur.
Enregistrez un utilisateur pour le test.
Un e-mail a été envoyé. Puisqu'il s'agit d'un test maintenant, un message électronique sera envoyé à la console (écran du terminal).
terminal
[30/Aug/2020 11:45:57] "GET /accounts/signup/ HTTP/1.1" 200 1330
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: [example.com] Please Confirm Your E-mail Address
From: webmaster@localhost
To: [email protected]
Date: Sun, 30 Aug 2020 11:46:30 -0000
Message-ID: (réduction)
Hello from example.com!
You're receiving this e-mail because user Lisa has given yours as an e-mail address to connect their account.
To confirm this is correct, go to http://127.0.0.1:8000/accounts/confirm-email/NA:1kCLn4:g2Po76yr88dimfzO641FunQcGbYPexyYkTE4j0JLZ4Q/
Thank you from example.com!
example.com
-------------------------------------------------------------------------------
[30/Aug/2020 11:46:30] "POST /accounts/signup/ HTTP/1.1" 302 0
Au milieu de cet affichage, "http://127.0.0.1:8000/accounts/confirm-email/NA:1kCLn4:g2Po76yr88dimfzO641FunQcGbYPexyYkTE4j0JLZ4Q/" L'authentification par e-mail est terminée lorsque vous y accédez.
Connectons-nous une fois la vérification des e-mails terminée.
Une fois connecté, l'écran suivant apparaît.
Lorsque vous vous déconnectez, vous revenez au premier écran.
C'est tout. À bientôt mon cher! un!
Recommended Posts