Какой наиболее часто используемый способ реализации регистрации и входа пользователей?
Я начинаю разрабатывать Django и чувствую себя очень запутанным и потерянным во всех способах, которыми можно реализовать одно и то же. (или я могу быть просто глупым) Сейчас в моей голове все очень перемешано (формы на основе классов? Представления на основе классов? Представления на основе функций с формами на основе классов? Пользовательские HTML формы, которые привязываются к классу Forms, а затем etc etc etc...)
Пока это все переплетенные варианты, которые я вижу, и они меня сильно смущают:
Простые HTML формы, которые затем привязываются к экземпляру
Form
в представлениях для валидации (?). Каждое представление является индивидуальным. (Мне больше всего нравится этот вариант, потому что я не нахожу никакой радости в использовании{{ form }}
в шаблонах, плюс этот вариант кажется мне простым) Развеforms.py
не используется, когда вы реализуете формы таким образом?для логина с пользовательскими шаблонами (в которых вы используете
include('django.contrib.auth.urls')
, а затем что-то еще для регистрации, потому что нет такой же встроенной штуки для регистрации{{ form }}
)но вам придется как-то расширять его, если вы хотите добавить больше полей (почему есть встроенные представления для аутентификации, но нет для создания пользователя, btw?)
UserCreationForm
- Пользовательские формы на основе классов, если вы хотите использовать их с пользовательскими моделями пользователей
.
- Создайте новый проект Django .
- Создайте приложение Custom User Model App - имя приложения будет -> users
обновите settings.py так
INSTALLED_APPS = [ #Built In Apps 'users.apps.UsersConfig', ] ... # At the end of settings.py file AUTH_USER_MODEL = 'users.CustomUser'
создайте новую модель CustomUser. Используем новое пользовательское поле. Скажем, Age - users/models.py
.from django.contrib.auth.models import AbstractUser from django.db import models class CustomUser(AbstractUser): age = models.PositiveIntegerField(null=True, blank=True)
создайте новые формы UserCreationForm и UserChangeForm
- Когда пользователь регистрирует новый аккаунт на нашем сайте.
- В приложении администратора для изменения существующих пользователей.
- UserCreationForm
- UserChangeForm.
Обновите файл admin.py, поскольку Admin тесно связан с моделью User по умолчанию -> users/admin.py
.from django.contrib import admin from django.contrib.auth.admin import UserAdmin from .forms import CustomUserCreationForm, CustomUserChangeForm from .models import CustomUser class CustomUserAdmin(UserAdmin): add_form = CustomUserCreationForm form = CustomUserChangeForm model = CustomUser list_display = ['email', 'username', 'age', 'is_staff', ] admin.site.register(CustomUser, CustomUserAdmin)
Что использовать, если при регистрации с пользователем будут связаны дополнительные данные? Какой способ чаще всего используют разработчики Django в целом?
Простите, если я не очень понятно объясняю, я начинающий разработчик и каждый раз перегружен тем, что есть слишком много способов сделать одно и то же :-)
На мой взгляд, наиболее распространенным способом реализации регистрации и входа является использование встроенных функций Django, таких как : include('django.contrib.auth.urls')
и UserCreationForm
У меня есть шаблон, который я использую, когда начинаю новый проект, и я хотел бы добавить страницу входа и регистрации, вот ссылка
Надеюсь, это поможет ;)
Я знаю, как использовать встроенный модуль Django contrib, например UserCreationForm
из django.contrib.auth.forms
для функции signup
и AuthenticationForm
для login
. Ниже приведены мои коды в views.py
from django.contrib.auth.forms import (
AuthenticationForm,
UserCreationForm,
)
from django.contrib.auth import login as auth_login,
@require_http_methods(['GET', 'POST'])
def signup(request):
if request.user.is_authenticated:
return redirect('articles:index')
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save()
auth_login(request, user)
return redirect('articles:index')
else:
form = UserCreationForm()
context = {
'form': form,
}
return render(request,'accounts/signup.html', context)
@require_http_methods(['GET','POST'])
def login(request):
if request.user.is_authenticated:
return redirect('articles:index')
if request.method == 'POST':
form = AuthenticationForm(request, request.POST)
if form.is_valid():
auth_login(request, form.get_user())
return redirect(request.GET.get('next') or 'articles:index')
else:
form = AuthenticationForm()
context = {
'form':form,
}
return render(request, 'accounts/login.html', context)
Вы разместили подробный вопрос, давайте сосредоточимся на этом прямо сейчас, и мы сможем двигаться дальше
Что использовать, если при регистрации с пользователем будут связаны дополнительные данные? Какой способ чаще всего используют разработчики Django в целом?
.
Лучше всего обратиться к документации Django, которая, безусловно, даст вам лучший совет. Итак, доки здесь читайте
Если вы начинаете новый проект, настоятельно рекомендуется установить пользовательскую модель пользователя, даже если вам достаточно модели пользователя по умолчанию. Эта модель ведет себя идентично модели пользователя по умолчанию, но вы сможете настроить ее в будущем, если возникнет такая необходимость.
Итак, вам нужно создать пользовательскую модель пользователя. Как это сделать? Ну, вы используете AbstractUser. Вот краткая пошаговая разбивка
Это включает в себя 4 шага
Вспомните два способа взаимодействия с нашей новой моделью CustomUser.
Итак, мы обновляем две встроенные формы для этой функциональности:
Итак - создайте новый файл в приложении users под названием forms.py - users/forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import CustomUser
class CustomUserCreationForm(UserCreationForm):
class Meta(UserCreationForm):
model = CustomUser
fields = UserCreationForm.Meta.fields + ('age',)
class CustomUserChangeForm(UserChangeForm):
class Meta:
model = CustomUser
fields = UserChangeForm.Meta.fields
Здесь - Мета-класс используется для переопределения полей по умолчанию путем установки модели на CustomUser.
Наконец-то
Надеюсь, это даст вам отправную точку, как двигаться дальше. Работайте над этим, и я уверен, что ваши остальные сомнения в конце концов разрешатся.