有没有办法只用电子邮件字段(没有密码和用户名)来实现表单?用户将收到包含确认其帐户和设置密码的链接的电子邮件。
任何信息都会有所帮助,谢谢。
向用户Temka :
我已经有了cutom RegistrationForm:
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
还要感谢"无法使用密码"资讯
答案 0 :(得分:2)
首先,您需要创建自定义用户管理器和模型 可在此处找到文档https://docs.djangoproject.com/en/1.9/topics/auth/customizing/#a-full-example
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
并使用此行AUTH_USER_MODEL = 'app.EmailUser'
在settings.py中注册
现在,您的EmailUser模型可以与from django.contrib.auth import get_user_model
和from django.conf.settings import AUTH_USER_MODEL
一起使用。
示例用法(外键):
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)
使用 django-registration-redux 两步注册时:
User
。这将使用户模型具有不可用的密码https://docs.djangoproject.com/es/1.9/ref/contrib/auth/#django.contrib.auth.models.User.has_usable_password。可能需要创建自定义RegistrationForm
和RegistrationView
以避免密码检查。RegistrationManager.activate_user(key)
和User.set_password(password)