Рубрики
Без рубрики

Django пользовательский пользователь

Джанго отправляется со встроенной пользовательской моделью для аутентификации, однако официальная документация Django … Помечено с Джанго, Питоном, Учебником, Новичками.

Джанго отправляется со встроенным Пользовательская модель Для аутентификации, однако Официальная документация Джанго Настоятельно рекомендует Использование пользовательской модели пользователя для новых проектов. Причина в том, что если вы хотите сделать любой Изменения в модели пользователя по дороге-для примера, добавление поля даты рождения-использование пользовательской модели с самого начала делает это довольно простым. Но если вы этого не сделаете, обновление пользовательской модели по умолчанию в существующем проекте 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 }}!
  

logout

{% else %}

You are not logged in

login | signup {% endif %} {% endblock %}

{% extends 'base.html' %}

{% block title %}Login{% endblock %}

{% block content %}

Login

{% csrf_token %} {{ form.as_p }}
{% endblock %}

{% extends 'base.html' %}

{% block title %}Sign Up{% endblock %}

{% block content %}

Sign up

{% csrf_token %} {{ form.as_p }}
{% endblock %}

Теперь для нашего 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”