Джанго отправляется со встроенным Пользовательская модель Для аутентификации, однако Официальная документация Джанго Настоятельно рекомендует Использование пользовательской модели пользователя для новых проектов. Причина в том, что если вы хотите сделать любой Изменения в модели пользователя по дороге-для примера, добавление поля даты рождения-использование пользовательской модели с самого начала делает это довольно простым. Но если вы этого не сделаете, обновление пользовательской модели по умолчанию в существующем проекте Django очень и очень сложной.
Так Всегда используйте пользовательскую модель для всех новых проектов Django Анкет Однако официальная документация Пример На самом деле не то, что многие эксперты Django рекомендуют использовать. Существует гораздо проще, но все еще мощный подход к запуску новых проектов Django с пользовательской моделью, которую я продемонстрирую здесь.
Если вы новичок в аутентификации пользователей в Django, я рекомендую первый просмотр Как реализовать регулярный вход, вход в систему, регистрация поток в Джанго, который подробно охватывает основы.
Настраивать
Для начала создайте новый проект Django из командной строки. Нам нужно сделать несколько вещей:
- Создать и перемещаться в выделенный каталог под названием
Пользователи
для нашего кода - Установите Django
- Сделайте новый проект Django под названием
конфигурация
- Сделать новое приложение
пользователи
- Запустите локальный веб -сервер
Вот команды для запуска:
$ cd ~/Desktop $ mkdir users && cd users $ pipenv install django==3.0.3 $ pipenv shell (users) $ django-admin.py startproject config . (users) $ python manage.py startapp users (users) $ python manage.py runserver
Обратите внимание, что мы не запустить мигрировать
Чтобы настроить нашу базу данных. Важно подождать, пока мы не создадим нашу новую пользовательскую модель, прежде чем это сделать.
Если вы перемещаетесь в http://127.0.0.1:8000 Вы увидите экран приветствия Джанго.
AbstractUser vs AbstractBaseuser
Есть два современных способа создания пользовательской модели пользователя в Django: AbstractUser
и AbstractBaseUser
Анкет В обоих случаях мы можем подключить их к расширению существующей функциональности, однако AbstractBaseUser
Требуется Гораздо больше работы. Серьезно, не связывайтесь с этим, если вы действительно не знаете, что делаете. И если бы вы это сделали, вы бы не читали этот урок, не так ли?
Итак, мы будем использовать AbstractUser
которые на самом деле подклассы AbstractBaseUser
но обеспечивает больше конфигурации по умолчанию.
Пользовательская пользовательская модель
Создание нашей начальной пользовательской модели пользователя требуется четыре шага:
- Обновление
настройки.py
- Создайте новый
Customuser
модель - Создайте новый
Пользовательница
иUserChangeform
- Обновите администратор
В настройки.py
Мы добавим Пользователи
приложение и используйте Auth_user_model
config, чтобы сообщить Django использовать нашу новую пользовательскую модель вместо встроенной Пользователь
модель. Мы позвоним в нашу пользовательскую модель пользователя Customuser
Анкет
Внутри Insted_apps
Добавить users.apps. Usersconfig
внизу. Затем в нижней части всего файла добавьте Auth_user_model
конфигурация
# config/settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'users.apps.UsersConfig', # new ] ... AUTH_USER_MODEL = 'users.CustomUser' # new
Теперь обновление модели.py
С новой пользовательской моделью, которую мы будем называть Customuser
Анкет
# users/models.py from django.contrib.auth.models import AbstractUser from django.db import models class CustomUser(AbstractUser): pass # add additional fields in here def __str__(self): return self.username
Нам нужны новые версии двух методов формы, которые получают тяжелое использование с пользователями. Остановить локальный сервер с Контроль+c
и создать новый файл в Пользователи
Приложение называется forms.py
Анкет
(users) $ touch 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: model = CustomUser fields = ('username', 'email') class CustomUserChangeForm(UserChangeForm): class Meta: model = CustomUser fields = ('username', 'email')
Наконец мы обновляем admin.py
Поскольку администратор тесно связан с пользовательской моделью по умолчанию.
# users/admin.py from django.contrib import admin from django.contrib.auth import get_user_model 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',] admin.site.register(CustomUser, CustomUserAdmin)
И мы закончили! Теперь мы можем запустить Makemigrations
и мигрировать
Впервые создать новую базу данных, которая использует пользовательскую модель пользователя.
(users) $ python manage.py makemigrations users (users) $ python manage.py migrate
Суперпользователь
Полезно создать суперпользователь, который мы можем использовать для входа в администрацию и протестировать вход/вход. В командной строке введите следующую команду и пройдите через подсказки.
(users) $ python manage.py createsuperuser
Шаблоны/представления/URL
Наша цель – домашняя страница со ссылками на вход, вход и регистрацию. Начните с обновления настройки.py
Чтобы использовать каталог шаблонов на уровне проекта.
# config/settings.py TEMPLATES = [ { ... 'DIRS': [os.path.join(BASE_DIR, 'templates')], # new ... }, ]
Затем установите ссылки на перенаправление для входа и входа в систему, которые оба перейдут к нашему Главная
шаблон. Добавьте эти две строки в нижней части файла.
# config/settings.py LOGIN_REDIRECT_URL = 'home' LOGOUT_REDIRECT_URL = 'home'
Создайте новую папку на уровне проекта, а в нем регистрационная папка, так как именно здесь Джанго будет искать шаблон входа в систему.
(users) $ mkdir templates (users) $ mkdir templates/registration
Затем создайте четыре шаблона:
(users) $ touch templates/registration/login.html (users) $ touch templates/base.html (users) $ touch templates/home.html (users) $ touch templates/signup.html
Обновите файлы следующим образом:
{% block title %}Django Auth Tutorial{% endblock %} {% block content %} {% endblock %}
{% extends 'base.html' %} {% block title %}Home{% endblock %} {% block content %} {% if user.is_authenticated %} Hi {{ user.username }}! {% else %}You are not logged in
login | signup {% endif %} {% endblock %}
{% extends 'base.html' %} {% block title %}Login{% endblock %} {% block content %}{% endblock %}Login
{% extends 'base.html' %} {% block title %}Sign Up{% endblock %} {% block content %}{% endblock %}Sign up
Теперь для нашего urls.py
Файлы на уровне проекта и приложения.
# config/urls.py from django.contrib import admin from django.urls import path, include from django.views.generic.base import TemplateView urlpatterns = [ path('', TemplateView.as_view(template_name='home.html'), name='home'), path('admin/', admin.site.urls), path('users/', include('users.urls')), path('users/', include('django.contrib.auth.urls')), ]
Создать urls.py
Файл в Пользователи
приложение.
(users) $ touch users/urls.py
Затем заполните следующий код:
# users/urls.py from django.urls import path from .views import SignUpView urlpatterns = [ path('signup/', SignUpView.as_view(), name='signup'), ]
Последний шаг – наш views.py
Файл в Пользователи
приложение, которое будет содержать нашу форму регистрации.
# users/views.py from django.urls import reverse_lazy from django.views.generic.edit import CreateView from .forms import CustomUserCreationForm class SignUpView(CreateView): form_class = CustomUserCreationForm success_url = reverse_lazy('login') template_name = 'signup.html'
ОК, Фу! Были сделаны. Давайте протестируем это.
Запустите сервер с Python Manage.py Runserver
и пойти на домашнюю страницу на http://127.0.0.1:8000/ Анкет
Нажмите на Вход и используйте свой суперпользователь реквизиты для входа.
После успешного представления вас перенаправлены обратно на домашнюю страницу и увидите персонализированное приветствие.
Теперь используйте Выход ссылка, а затем нажмите на регистрация Анкет
Создайте нового пользователя. Моя называется Testuser
Анкет После успешного отправки формы, вы будете перенаправлены на страницу входа в систему. Войдите в систему со своим новым пользователем, и вы снова будете перенаправлены на домашнюю страницу с персонализированным приветствием для нового пользователя.
Если вы хотите просмотреть в нем журнал администратора с учетной записью суперпользователя в http://127.0.0.1:8000/admin . Если вы посмотрите на Пользователи
Вы можете увидеть наших двух пользователей.
Вывод
Теперь, когда наша пользовательская модель настроена, вы можете легко и в любое время Добавьте в него дополнительные поля. Смотрите Django Docs Для дальнейших инструкций.
Вы также можете проверить Djangox , которая представляет собой фреймворк с открытым исходным кодом Django, которая включает пользовательскую модель пользователя, по умолчанию по умолчанию по умолчанию/пароль вместо имени пользователя/электронной почты/пароля, социальной аутентификации и многого другого.
Оригинал: “https://dev.to/learndjango/django-custom-user-model-3g85”