Я работаю над внедрением пользовательского приложения в мой проект, потому что встроенный django auth не выполняет функции, которые мне нужны. Следующий код я частично взял из официальной django документации. Я создал MyUser
модель
from django.db import models
from django.contrib.auth.models import AbstractBaseUser
from django.utils.translation import ugettext_lazy as _
from .managers import CustomUserManager
class MyUser(AbstractBaseUser):
username = models.CharField(max_length=40,null=True)
email = models.EmailField(_('email adress'),unique=True)
date_joined = models.DateTimeField(auto_now_add=True,null=True) last_login = models.DateTimeField(auto_now=True, null=True)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = CustomUserManager()
def __str__(self):
return self.email
def has_perm(self,perm,obj=None):
return True
def has_module_perms(self,app_label):
return True
@property
def is_stuff(self):
return self.is_admin
У меня также есть Managers.py
файл, в котором он создан
from django.contrib.auth.models import BaseUserManager
from django.utils.translation import ugettext_lazy as _
class CustomUserManager(BaseUserManager):
def create_user(self,email,password=None,**extra_fields):
"""
Create and save user with the
given email and password
"""
if not email:
raise ValueError(_('The email must be set'))
email = self.normalize_email(email)
user = self.model(email=email,**extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self,email,password,**extra_fields):
"""
Create and save SuperUser with
the given email and
password
"""
extra_fields.setdefault('is_staff',True)
extra_fields.setdefault('is_superuser',True)
extra_fields.setdefault('is_active',True)
user = self.create_user(email=self.normalize_email(email),password=password,**extra_fields)
if extra_fields.get('is_staff') is not True:
raise ValueError(_('Superuser must have is_staff=True.'))
if extra_fields.get('is_superuser') is not True:
raise ValueError(_('Superuser must have is_superuser=True.'))
user.save(using=self._db)
return user
Теперь я хочу создать форму регистрации, которую пользователи будут использовать для регистрации на моем сайт. Я создал файл form.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from .models import MyUser
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = MyUser
fields = ('username','email')
Здесь я запутался, потому что при создании формы CustomUserCreation я не указывал поля password1 и password2, потому что они не в модели MyUser
. Могу ли я указать поля пароля следующим образом
from django import forms
from django.contrib.auth.forms import UserCreationForm
from .models import MyUser
class CustomUserCreationForm(UserCreationForm):
password = Forms.CharField(widget=forms.PasswordInput)
password2 = Forms.CharField(widget=forms.PasswordInput)
class Meta:
model = MyUser
fields = ('username','email')