2
我已經創建了一個自定義用戶註冊表單,從UserCreationForm
。當我嘗試註冊時,它確實註冊成功,我可以看到一個新創建的用戶使用用戶名和電子郵件。但該用戶沒有密碼。django - 成功註冊後沒有設置密碼
在管理員中,該用戶的密碼字段是No password set.
。請糾正我錯在哪裏。謝謝。
forms.py:
from album.forms import MyRegistrationForm
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class MyRegistrationForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ('username', 'email', 'password1', 'password2',)
def save(self, commit=True):
user = super(UserCreationForm, self).save(commit=False)
user.email = self.cleaned_data['email']
if commit:
user.save()
return user
views.py:
def register_user(request):
if request.method == "POST":
form = MyRegistrationForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/accounts/register_success/')
else:
form = MyRegistrationForm()
return render(request, 'register.html', {'form':form})
這樣做的工作,謝謝!請你們友善地告訴我它是如何工作的? – Aamu
解釋'超級'是棘手的,所以我建議你在其他地方閱讀它,但我會盡量簡單地解釋一下。當你調用'super(UserCreationForm,self).save(commit = False)'時,它會調用'UserCreationForm'的超類的保存方法,即'ModelForm'。當你調用'super(MyRegistrationForm,self).save(commit = False)'時,它會調用'MyRegistrationForm'的超類UserCreationForm的save方法。你需要第二個,因爲它是設置密碼的'UserCreationForm.save()'。 – Alasdair
現在解釋了很多。感謝您簡要但明確的解釋。 – Aamu