gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:35:12 24 4
gpt4 key购买 nike

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

关于python - Django allauth 自定义模板不散列密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48073923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com