Продвинутый Django 5 для продолжающих

Прогресс по курсу:  0/193

9.2 Подготовка проекта, добавление подтверждения регистрации
3 из 3 шагов пройдено

Я решил создать еще одно приложение похожее на блог. Приложение будет простым. Пользователь может просто создать учетную запись и без особых проблем может создать пост и опубликовать его на платформе. Единственное, мы не будем сильно уходить в сторону создавая шаблоны регистрации, добавления постов и т.д., все это вы уже должны знать.

Создадим новый проект, я его назвал django_celery:


Давайте создадим наше приложение:

python manage.py startapp main

При запуске нового Django проекта мы создадим основное main приложение, которое будет содержать, помимо прочего, кастомную модель пользователя. Наличие пользовательской модели User даст нам необходимую гибкость.

from django.db import models
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager


class UserAccountManager(BaseUserManager):
    def create_user(self, email, password=None, **extra_fields):
        if not email:
            raise ValueError('Users must have an email address')
        user = self.model(
            email=self.normalize_email(email), **extra_fields
        )
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, password=None, **extra_fields):
        user = self.create_user(
            email,
            password=password, **extra_fields

        )
        user.is_admin = True
        user.save(using=self._db)
        return user


class User(AbstractBaseUser):
    email = models.EmailField(
        verbose_name='email address',
        max_length=255,
        unique=True,
    )
    first_name = models.CharField(verbose_name='first name', max_length=30, blank=True)
    last_name = models.CharField(verbose_name='last name', max_length=30, blank=True)
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)
    objects = UserAccountManager()
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['first_name', 'last_name']

    def __str__(self):
        return self.email

    def has_perm(self, perm, obj=None):
        """Есть ли у пользователей конкретное разрешение?"""
        return True

    def has_module_perms(self, app_label):
        """Есть ли у пользователя разрешения на просмотр приложения `app_label`?"""
        return True

    @property
    def is_staff(self):
        """Является ли пользователь сотрудником?"""
        # Самый простой ответ: Все администраторы - это сотрудники
        return self.is_admin

Теперь нам нужно указать Django, использовать эту модель пользователя вместо стандартной. Добавьте эту строку в файл settings.py:

AUTH_USER_MODEL = 'main.User'


Нам также необходимо добавить приложение main в список INSTALLED_APPS в файле settings.py:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'main'
]


Теперь мы можем выполнить миграции и создавать суперпользователя, чтобы иметь возможность входа в панель администратора Django:

python manage.py createsuperuser


Продолжим в следующем шаге, в котором создадим наше основное приложение. 


  • Комментария
Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий

Ошибка в слове "Явнается"

@Николай_Петров, спасибо, исправил.

Док стринги разве не нужно заключать в тройные кавычки?

@Николай_Петров, по пеп нужно, но будет работать и так. Но я всё-же исправлю, спасибо что обратили внимание.

не понятно куда это нужно вставлять (((

 

При запуске нового Django проекта  мне нравится создавать main приложение, которое содержит, помимо прочего, кастомную модель пользователя. Чаще всего я сталкиваюсь с ограничениями модели User по умолчанию. Наличие пользовательской модели User дает нам гибкость.

from django.db import models
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager


class UserAccountManager(BaseUserManager):
    def create_user(self, email, password=None, **extra_fields):
        if not email:
            raise ValueError('Users must have an email address')
        user = self.model(
            email=self.normalize_email(email), **extra_fields
        )
        user.set_password(password)
        user.save(using=self._db)
        return user

@No_Name, в файл models.py приложения main.