我正在使用我自己的自定义 View 并继承自 SignupView(在 from allauth.account.views import SignupView 中)我也使用我自己的 forms.py 来传递在我的自定义 View 上。它可以很好地注册用户,但它没有做的一件事是散列密码。它按原样为用户保存密码。我怎样才能使密码作为散列存储在表中?
表单.py
from .models import User
from django import forms
class RegisterForm(forms.ModelForm):
class Meta:
model = User
fields = ['username', 'email', 'password']
username = forms.CharField(label='Username', widget=forms.TextInput(attrs={'placeholder': 'Username:'}))
email = forms.EmailField(label='Email', widget=forms.EmailInput(attrs={'placeholder': 'Email:'}))
password = forms.CharField(label='Password', widget=forms.PasswordInput(attrs={'placeholder': 'Password:'}))
views.py
from allauth.account.views import SignupView
from .forms import RegisterForm
class RegisterView(SignupView):
form_class = RegisterForm
template_name = 'oauth/auth_form.html'
项目 urls.py
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^accounts/', include('oauth.urls')), //app name I created where my custom sign up view is
url(r'^profiles/', include('profiles.urls')),
url(r'^accounts/', include('allauth.urls')),
]
请您参考如下方法:
您的表单需要继承自 SignupForm,因为它的 save() 方法使用正确的方式来创建新用户。当您只使用 ModelForm 时,save() 方法将使用模型的正常初始化创建一个新的 User 对象,而 User 创建需要对密码进行特殊处理。
因此只需定义字段并将password 更改为password1:
from allauth.account.forms import SignupForm
class RegisterForm(SignupForm):
username = forms.CharField(label='Username', widget=forms.TextInput(attrs={'placeholder': 'Username:'}))
email = forms.EmailField(label='Email', widget=forms.EmailInput(attrs={'placeholder': 'Email:'}))
password1 = forms.CharField(label='Password', widget=forms.PasswordInput(attrs={'placeholder': 'Password:'}))
