Ich wollte mich mit django-allauth und CustomUser authentifizieren, aber es gab nur wenige japanische Artikel und es war schwierig, einen guten englischen Artikel zu finden. Deshalb werde ich einen Kommentar und ein Programm veröffentlichen, in dem ich süchtig nach Proben war.
1.sample
2. [Ich war süchtig nach
](# 2 Ich war süchtig nach)
3. [Dateistruktur
](# 3 Dateistruktur)
4. url.py
5. settings.py
6. models.py
7. forms.py
8. adapter.py
9. templates
10. [Referenz
](# 10 Referenz)
1.sample samplecode(Github)
Wenn ich es tatsächlich bewege, sieht es so aus.
testsite/
├templates/
│ ├accounts/
│ │ └registration/
│ │ └login.html/
│ │ └signup.html/
│ ├testapp/
│ │ └home.html
│ └base.html
├testapp/
│ ├__pycache__
│ ├migrations
│ ├adapter.py
│ ├admin.py
│ ├apps.py
│ ├forms.py
│ ├models.py
│ ├tests.py
│ ├urls.py
│ └views.py
├testsite/
│ ├__pycache__
│ ├__init__
│ ├settings.py
│ ├urls.py
│ └wsgi.py
└manage.py
4.url.py
url.py
from django.contrib import admin
from django.urls import include, path
from django.views.generic import TemplateView
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('testapp.urls')),
path('accounts/', include('allauth.urls')),
path('accounts/login/', TemplateView.as_view(template_name = 'login.html'), name='login'),
path('accounts/logout/', TemplateView.as_view(template_name = 'logout.html'), name='logout'),
path('accounts/signup/', TemplateView.as_view(template_name = 'signup.html'), name='signup'),
]
5.settings.py Benutzer-, Anmeldeformular- und Adaptereinstellungen sind erforderlich.
settings.py
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SECRET_KEY = ''
DEBUG = True
ALLOWED_HOSTS = ['*']
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'testapp.apps.TestappConfig',#testapp
'django.contrib.sites', #for djnago-allauth
'allauth', #for djnago-allauth
'allauth.account', #for djnago-allauth
'allauth.socialaccount',#for djnago-allauth
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'testsite.urls'
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',
],
},
},
]
WSGI_APPLICATION = 'testsite.wsgi.application'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
USE_I18N = True
USE_L10N = True
USE_TZ = True
STATIC_URL = '/static/'
#hinzufügen
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend',
)
#Ändern Sie die Authentifizierungsmethode in "E-Mail-Adresse und Passwort".
ACCOUNT_AUTHENTICATION_METHOD = 'email'
#Verwenden Sie den Benutzernamen
ACCOUNT_USERNAME_REQUIRED = True
#Senden Sie keine Bestätigungs-E-Mail zur Benutzerregistrierung
ACCOUNT_EMAIL_VERIFICATION = 'none'
#Machen Sie die E-Mail-Adresse zu einem erforderlichen Element
ACCOUNT_EMAIL_REQUIRED = True
#Benutzermodellerweiterung(customuser)
AUTH_USER_MODEL = 'testapp.CustomUser'
SITE_ID = 1 #django-Weil allauth das Sites Framework verwendet
LOGIN_REDIRECT_URL = 'home'
ACCOUNT_LOGOUT_REDIRECT_URL = '/accounts/login/'
ACCOUNT_LOGOUT_ON_GET = True
#Geben Sie das Anmeldeformular an
ACCOUNT_FORMS = {
'signup' : 'testapp.forms.CustomSignupForm',
}
#Wird benötigt, um Informationen aus dem Anmeldeformular im benutzerdefinierten Benutzermodell zu speichern
ACCOUNT_ADAPTER = 'testapp.adapter.AccountAdapter'
#Passwort sofort eingeben
ACCOUNT_SIGNUP_PASSWORD_ENTER_TWICE = False
6.models.py
models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class CustomUser(AbstractUser):
"""Erweitertes Benutzermodell"""
class Meta(AbstractUser.Meta):
db_table = 'custom_user'
age = models.IntegerField('Alter', blank=True, default=0)
weight = models.IntegerField('Körpergewicht',blank=True, default=0)
7.forms.py
forms.py
from allauth.account.forms import SignupForm
from django import forms
from .models import CustomUser
from allauth.account.adapter import DefaultAccountAdapter
class CustomSignupForm(SignupForm):
age = forms.IntegerField()
weight = forms.IntegerField()
class Meta:
model = CustomUser
def signup(self, request,user):
user.age = self.cleaned_data['age']
user.weight = self.cleaned_data['weight']
user.save()
return user
8.adapter.py
adapter.py
from allauth.account.adapter import DefaultAccountAdapter
class AccountAdapter(DefaultAccountAdapter):
def save_user(self, request, user, form, commit=True):
"""
This is called when saving user via allauth registration.
We override this to set additional data on user object.
"""
# Do not persist the user yet so we pass commit=False
# (last argument)
user = super(AccountAdapter, self).save_user(request, user, form, commit=False)
user.age = form.cleaned_data.get('age')
user.weight = form.cleaned_data.get('weight')
user.save()
9.templates
base.html
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>{% block title %}{% endblock %}</title>
{# --- css --- #}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"
integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<style type="text/css">
body {
padding-top: 5rem;
}
</style>
{% block extra_css %}{% endblock %}
</head>
<body>
<main class="container">
{% block content %}{% endblock %}
</main>
{# --- js --- #}
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"
integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous">
</script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"
integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous">
</script>
{% block extra_js %}{% endblock %}
</body>
</html>
account/registration/login.html
<!doctype html>
{% extends "base.html" %}
{% block title %}Einloggen{% endblock %}
{% block content %}
<h2>Einloggen</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Einloggen</button>
</form>
{% endblock %}
account/registration/signup.html
<!doctype html>
{% extends "base.html" %}
{% block title %}Benutzer Registration{% endblock %}
{% block content %}
<h2>Benutzer Registration</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<p><a href="{% url 'login' %}"><button type="submit">Benutzer Registration</button></a></p>
</form>
{% endblock %}
testapp/home.html
<!doctype html>
{% extends "base.html" %}
{% block title %}Zuhause{% endblock %}
{% block content %}
<h2>Zuhause</h2>
{% if user.is_authenticated %}
Herzlich willkommen{{ user.get_username }}Herr.
Wie alt bist du{{ user.age }}ist
Dein Gewicht{{ user.weight }}kg
<p><a href="{% url 'logout' %}">Ausloggen</a></p>
{% else %}
<p><a href="{% url 'login' %}">Einloggen</a></p>
<p><a href="{% url 'signup' %}">signup</a></p>
{% endif %}
{% endblock %}
[Akihito Yokose "Lehrbuch von Django, das im Feld verwendet werden kann"](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF % E3% 81% 88% E3% 82% 8B-Django-% E3% 81% AE% E6% 95% 99% E7% A7% 91% E6% 9B% B8% E3% 80% 8A% E5% AE% 9F% E8% B7% B5% E7% B7% A8% E3% 80% 8B-% E6% A8% AA% E7% 80% AC-% E6% 98% 8E% E4% BB% 81-ebook / dp / B07L3DRGBT? Tag = maftracking264432-22 & linkCode = ure & creative = 6339) Offizielle 1 von django-allauth Offizielle 2 von django-allauth the-complete-django-allauth-guide extending-and-customizing-django-allauth
Recommended Posts