Skip to main content
 首页 » 编程设计

python之Django allauth 自定义模板不散列密码

2024年09月07日43yyy_WW

我正在使用我自己的自定义 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:'}))