在 Django 中注册新用户的问题
Issue signing up new users in Django
我在使用 Django 1.11 的应用程序中有以下注册流程-
accounts/views.py:
from .forms import UserForm
def sign_up(request):
if request.method == "POST":
form = UserForm(request.POST)
if form.is_valid():
user = form.save()
return redirect('index')
else:
form = UserForm()
return render(request, 'signup.html', {'form': form})
accounts/forms.py:
from django.forms import ModelForm
from django.contrib.auth.models import User
class UserForm(ModelForm):
class Meta:
model = User
fields = ['first_name', 'last_name', 'username', 'email', 'password']
对于 "register" 新用户来说确实如此,因为它在数据库中创建了一个新用户。问题是我无法使用新创建的用户登录,username/pw 组合不匹配。进入数据库我看到新创建的用户,但密码是纯文本的:"password"。但是我通过命令行创建的第一个用户 python manage.py createsuperuser
有一个像 pasdfhjasf8234jk324hgsdfa8df89asdf987
这样的加盐哈希作为密码,我可以使用我为它创建的密码正确登录,即 "password".
如何在 Django 知道将密码正确存储为加盐哈希的情况下使用我的 ModelForm 保存新用户?
您可以不通过ModelForm
中的样板代码设置密码,您需要使用.set_password(..)
[Django-doc]来散列密码:
class UserForm(ModelForm):
class Meta:
model = User
fields = ['first_name', 'last_name', 'username', 'email', 'password']
def save(self, commit=True):
user = super().save(commit=False)
user.<b>set_password(self.cleaned_data['password'])</b>
if commit:
user.save()
return user
然而,Django 已经有一个 UserCreationForm
[Django-doc] 实现了这一点。它将使用两个表单字段来验证用户是否输入了两次相同的密码。因此,我们可以将 UserCreationForm
:
子类化
from django.contrib.auth.forms import <b>UserCreationForm</b>
class UserForm(<b>UserCreationForm</b>):
class Meta:
model = User
<b>fields = ['first_name', 'last_name', 'username', 'email']</b>
我在使用 Django 1.11 的应用程序中有以下注册流程-
accounts/views.py:
from .forms import UserForm
def sign_up(request):
if request.method == "POST":
form = UserForm(request.POST)
if form.is_valid():
user = form.save()
return redirect('index')
else:
form = UserForm()
return render(request, 'signup.html', {'form': form})
accounts/forms.py:
from django.forms import ModelForm
from django.contrib.auth.models import User
class UserForm(ModelForm):
class Meta:
model = User
fields = ['first_name', 'last_name', 'username', 'email', 'password']
对于 "register" 新用户来说确实如此,因为它在数据库中创建了一个新用户。问题是我无法使用新创建的用户登录,username/pw 组合不匹配。进入数据库我看到新创建的用户,但密码是纯文本的:"password"。但是我通过命令行创建的第一个用户 python manage.py createsuperuser
有一个像 pasdfhjasf8234jk324hgsdfa8df89asdf987
这样的加盐哈希作为密码,我可以使用我为它创建的密码正确登录,即 "password".
如何在 Django 知道将密码正确存储为加盐哈希的情况下使用我的 ModelForm 保存新用户?
您可以不通过ModelForm
中的样板代码设置密码,您需要使用.set_password(..)
[Django-doc]来散列密码:
class UserForm(ModelForm):
class Meta:
model = User
fields = ['first_name', 'last_name', 'username', 'email', 'password']
def save(self, commit=True):
user = super().save(commit=False)
user.<b>set_password(self.cleaned_data['password'])</b>
if commit:
user.save()
return user
然而,Django 已经有一个 UserCreationForm
[Django-doc] 实现了这一点。它将使用两个表单字段来验证用户是否输入了两次相同的密码。因此,我们可以将 UserCreationForm
:
from django.contrib.auth.forms import <b>UserCreationForm</b>
class UserForm(<b>UserCreationForm</b>):
class Meta:
model = User
<b>fields = ['first_name', 'last_name', 'username', 'email']</b>