Python Django注册redux仅使用电子邮件注册(无密码)
有没有办法只使用电子邮件字段(没有密码和用户名)实现表单?用户将收到带有链接的电子邮件,以确认其帐户并设置密码 任何信息都会有帮助,谢谢 发送给用户Temka: 我已经有了cutom登记表:Python Django注册redux仅使用电子邮件注册(无密码),python,django,django-forms,Python,Django,Django Forms,有没有办法只使用电子邮件字段(没有密码和用户名)实现表单?用户将收到带有链接的电子邮件,以确认其帐户并设置密码 任何信息都会有帮助,谢谢 发送给用户Temka: 我已经有了cutom登记表: from registration.forms import RegistrationForm class UserForm(RegistrationForm): username = forms.CharField( max_length=254, requir
from registration.forms import RegistrationForm
class UserForm(RegistrationForm):
username = forms.CharField(
max_length=254,
required=False,
widget=forms.HiddenInput(),
)
password1 = forms.CharField(
widget=forms.HiddenInput(),
required=False,
)
password2 = forms.CharField(
widget=forms.HiddenInput(),
required=False,
)
def clean_email(self):
email = self.cleaned_data['email']
self.cleaned_data['username'] = email
return email
def clean_password2(self):
pass
还感谢您提供“无法使用的密码”信息。用户型号
首先,您需要创建自定义用户管理器和模型。文档可以在这里找到 并在您的settings.py中使用以下行注册它
AUTH\u USER\u MODEL='app.EmailUser'
现在,您的EmailUser模型可以与来自django.contrib.auth import get_user_model的
和来自django.conf.settings import auth_user_model的一起使用
用法示例(外键):
登记处
使用django registration redux两步注册时:
- 创建注册时没有密码的
用户
。这将使用户模型的密码不可用。可能需要创建自定义的注册表单
和注册视图
,以避免密码检查
- 在提交激活表单时(带有密码字段的激活表单模板),使用方法
RegistrationManager。激活用户(密钥)
和user。设置密码(密码)
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
class EmailUserManager(BaseUserManager):
def create_user(self, email, password=None):
if not email:
raise ValueError('Users must have an email address')
user = self.model(email=self.normalize_email(email),)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password):
user = self.create_user(email, password=password,)
user.is_admin = True
user.is_superuser = True
user.save(using=self._db)
return user
class EmailUser(AbstractBaseUser, PermissionsMixin):
email = EmailField(
verbose_name='email',
max_length=255,
unique=True,
)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
date_joined = models.DateTimeField(default=timezone.now)
objects = EmailUserManager()
USERNAME_FIELD = 'email'
def get_full_name(self):
return self.email
def get_short_name(self):
return self.email
def __str__(self):
return self.email
@property
def is_staff(self):
return self.is_admin
from django.db import models
from django.conf.settings import AUTH_USER_MODEL
class Profile(models.Model):
class Meta:
verbose_name = 'Profile'
verbose_name_plural = 'Profiles'
user = models.OneToOneField(AUTH_USER_MODEL, verbose_name='User',
related_name='profile')
full_name = models.CharField('Full name', max_length=64, blank=False)
phone = models.CharField('Phone', max_length=64, blank=True)