23 июля 2017 г. 23:02

152

Простое приложение на Django.Instablog.Регистрация пользователей

В этой статье мы создадим модель для хранения информации пользователей , а также создадим страницы регистрации и авторизации

Создадим новое приложение users


python manage.py startalp users

В Джанго используется стандартная модель для пользователей. Но для нашего проекта мы создадим свою модель User

Для это мы отнаследуемся от моделей AbstractBaseUser и от миксина PermissionMixin


class User(AbstractBaseUser, PermissionsMixin):
    username = models.CharField(max_length=50, unique=True)
    email = models.EmailField(_('email address'), unique=True)
    firstname = models.CharField(_('First name'), max_length=100, blank=True)
    lastname = models.CharField(_('Last name'), max_length=100, blank=True)
    is_staff = models.BooleanField(_('Staff status'), default=False)
    is_active = models.BooleanField(_('Active'), default=True)
    date_joined = models.DateTimeField(_('date joined'),
                                       default=timezone.now)
    avatar = models.ImageField(upload_to='users', null=True, blank=True)
    objects = UserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    class Meta:
        verbose_name = 'Пользователь'
        verbose_name_plural = 'Пользователи'

    def get_full_name(self):
        if all([self.first_name, self.last_name]):
            full_name = '{0} {1}'.format(self.first_name, self.last_name)
            return full_name.strip()
        else:
            return self.email

    def get_short_name(self):
        return self.first_name


Создадим менеджер

Также мы создадим менеджер для нашей модели. Это нужно для того , чтобы мы могли добавить методы создания нового пользователя create_user и администратора create_superuser


class UserManager(BaseUserManager):
    def create_user(self, username, email, password=None, **kwargs):
        if not email:
            raise ValueError('Users must have an email address')

        user = self.model(username=username,
                          email=UserManager.normalize_email(email), )

        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, password):
        username = email
        user = self.create_user(username, email, password)
        user.is_superuser = True
        user.is_staff = True
        user.save(using=self._db)
        return user  

Теперь файл настроек settings.py в качестве модели для пользователей мы указываем созданную нами модель. И в качестве бэкенда должны указать ModelBackend.


AUTH_USER_MODEL = 'users.User'
AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',
)

Теперь мы создадим миграции для приложения users и применим все миграции.

Командой python manage.py ruтserver мы можем запустить наш проект.

Теперь создадим главную страницу с регистрационными полями



comments powered by Disqus