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