Django-allauth
Django-allauth est un package qui vous permet d'implémenter facilement des fonctions de création de compte et de connexion dans Django.
Dans cet article, le modèle django-allauth a fière allure et exécute même le test. Pour savoir comment démarrer un projet, reportez-vous à Démarrer un projet Django.
De venv / lib, qui a un package lié à l'environnement virtuel de python sous templates / allauth défini dans base.py Copiez le contenu de venv / lib / python3.6 / site-packages / allauth / account / templates dans templates / allauth.
base.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR, 'templates', 'allauth'), #Endroit pour mettre le modèle de connexion, etc.
os.path.join(BASE_DIR, 'templates'), #Où mettre le modèle
],
L'url d'authentification définie dans django-allauth est venv /lib/python3.6/site-packages/allauth/account/urls.py Il est décrit dans.
*/allauth/account/urls.py
urlpatterns = [
url(r"^signup/$", views.signup, name="account_signup"),
url(r"^login/$", views.login, name="account_login"),
url(r"^logout/$", views.logout, name="account_logout"),
...
]
Si vous écrivez un lien pour vous déconnecter dans l'en-tête (HTML), vous pouvez écrire le nom défini dans les modèles d'url ci-dessus comme suit.
<a class="dropdown-item" href="{% url 'account_logout' %}">Se déconnecter</a>
Lors du changement du html de l'écran de django-allauth, le problème est que le champ est défini dans la boucle de {% for field in form%} qui est la syntaxe du modèle, donc je comprends comment définir css. C'était difficile.
login.html
{% for field in form%}
<div class="account-form">
<div class="account-filed">
{% if forloop.last %}
<span class="last-field">{{ field }}</span>
<span class="login-maintain">Rester connecté</span>
{% else %}
<span class="non-last-field">{{ field }}</span>
{% endif %}
</div>
<div class="account-helptext">
{% if field.errors %}
<p>{{ field.errors.0 }}</p>
{% endif %}
</div>
</div>
{% endfor%}
Pour contourner le problème, commencez par dessiner dans l'état initial et vérifiez quels types d'éléments sont inclus dans la vérification de Google. Ensuite, vous devez inclure le fichier dans span ou div et modifier / ajouter cet élément ou nouvel élément.
Par exemple, je ne peux pas voir l'entrée dans le login.html ci-dessus, mais il contient l'entrée. Par conséquent, si vous définissez comme suit, l'apparence sera reflétée.
input {
border:none;
font-size: 60%;
padding-top:25px;
padding-bottom: 0px;
border-bottom: 1px solid #ff7700;
outline: none;
font: 800;
}
Un exemple d'écran de connexion est le suivant.
git : login.html git : account-style.css
![Capture d'écran 2019-08-17 16.11.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481395/eb462c1d-a74f-ce7b-4c93- 6ae31d557af4.png)
De même, git a des exemples de création d'un compte et de changement de mots de passe.
Ici, nous allons mettre en œuvre le test des fonctions de création de compte, de connexion et de déconnexion. Tout d'abord, créez un dossier à tester dans l'application principale.
mkdir ./main/tests
touch ./main/test/__init__.py
rm ./main/tests.py
J'ai écrit un test pour la création de compte et la connexion dans test_allauth.py. Dans le test de Django, le format de fichier est test_ * .py, et le test peut être exécuté par ./manage.py test.
test_allauth.py
from django.test import TestCase
from django.core import mail
from allauth.account.forms import LoginForm, SignupForm
from allauth.utils import get_user_model
from django.contrib import auth
from django.urls import reverse
from unittest.mock import patch
from main import models
class TestSignUp(TestCase):
def setUp(self):
self.post_user_data = {
"username": "username543",
"email": "[email protected]",
"password1": "abcabcabc",
"password2": "abcabcabc",
}
def test_user_signup_page_loads_correctly(self):
response = self.client.get(reverse('account_signup'))
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, 'account/signup.html')
self.assertContains(response, 'SIGN UP')
self.assertIsInstance(
response.context['form'], SignupForm
)
def test_user_signup_page_submission_works(self):
post_data = self.post_user_data
response = self.client.post(
reverse("account_signup"), post_data
)
#Rediriger vers la maison
self.assertEqual(response.status_code, 302)
#Vérifier si un utilisateur a été ajouté
self.assertTrue(
models.User.objects.filter(
email=self.post_user_data['email']
).exists()
)
#Est-il connecté?
self.assertTrue(
auth.get_user(self.client).is_authenticated
)
def test_user_login_page_loads_correctly(self):
response = self.client.get(reverse('account_login'))
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, 'account/login.html')
self.assertContains(response, 'LOGIN')
self.assertIsInstance(
response.context['form'], LoginForm
)
def test_user_login_page_submission_works(self):
user1 = models.User.objects.create_user(
self.post_user_data['username'],
self.post_user_data['email'],
self.post_user_data['password1']
)
user1.save()
post_data = {
'login':self.post_user_data['email'],
'password':self.post_user_data['password1']
}
#Vérifier si un utilisateur a été ajouté
self.assertTrue(
models.User.objects.filter(
email=self.post_user_data['email']
).exists()
)
response = self.client.post(
reverse("account_login"), post_data
)
#Est-il connecté?
self.assertTrue(
auth.get_user(self.client).is_authenticated
)
#Rediriger vers la maison
self.assertEqual(response.status_code, 302)
Recommended Posts