因此,我使用AbstractUser创建了一个定制模型:
class CustomUser(AbstractUser):
email = models.EmailField(unique=True)
phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.")
phone = models.CharField(validators=[phone_regex], max_length=17, blank=False, null=False) # Validators should be a list
is_shop = models.BooleanField(default=False)
products = models.ManyToManyField('Product', blank=True)
class Meta:
db_table = "scrape_customuser"
def save(self, *args, **kwargs):
if not self.pk:
self.set_password(self.password)
super().save(*args, **kwargs)
和一份报名表
class UserForm(UserCreationForm):
class Meta:
model = CustomUser
fields = ['username', 'email', 'phone', 'password1', 'password2']
我的登录逻辑:
def shop_user_signup(request):
if request.method == 'POST':
form = UserForm(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.is_shop = True
user.save()
login(request, user)
referring_url = request.POST.get('next', None)
if referring_url:
return redirect(referring_url)
else:
return redirect('/')
else:
form = UserForm()
return render(request, 'shop_user_signup.html', {'form': form})
在数据库中使用密码创建的用户得到了类似pbkdf2_sha256$600000$TvRyCcSY6eMhnV1i1urh93$aKLqPBrcma5KsuS469crJtS93UI0h+7pduJXeW6ukAU=
,is_active=1
的散列,不知何故,最后一次登录是2023-11-23 15:49:22.581983
,即使重定向没有显示用户名,当我有
<li class="nav-item">
{% if user.is_authenticated %}
<a class="nav-link" href="{% url 'logout' %}">{{user.username}} | Logout</a>
{% else %}
<a class="nav-link" href="{% url 'login' %}">Login</a>
{% endif %}
</li>
当我try 登录登录页面时,我收到错误Please enter a correct username and password. Note that both fields may be case-sensitive.
,管理员帐户可以正常登录.