我明白,當我們需要製作django內置視圖時,參數說明應該在內置視圖函數可以使用之前進行。爲什麼django內置auth視圖不能識別自定義表單?
現在我想自定義Django的權威性視圖password_reset_confirm
,並在URL的形式,我輸入我的自定義表單
from Myapp.forms import PasswordSetForm
from django.contrib.auth import urls,views
和網址
url(r'^accounts/ ^reset/(?P<uidb36>[0-9A-Za-z]{1,13})-(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$ ',
'django.contrib.auth.views.password_reset_confirm',{'set_password_form':PasswordSetForm},
name='password_reset_confirm'),
url(r'^accounts/', include('django.contrib.auth.urls')),
在
我form.py我導入原始SetPasswordForm
作爲默認形式使用django password_reset_confirm
功能
from django.contrib.auth.forms import SetPasswordForm
,然後自定義表單
class PasswordSetForm(SetPasswordForm):
error_messages = {
'invalid_password': _("Please enter a valid password as instructed"),
'password_mismatch': _("The two password fields didn't match."),
}
#new_password1 = forms.CharField(label=_("New password"),
# widget=forms.PasswordInput)
#new_password2 = forms.CharField(label=_("New password confirmation"),
# widget=forms.PasswordInput)
new_password1 = forms.CharField(widget=forms.PasswordInput, min_length=6, label='New Password')
new_password2 = forms.CharField(widget=forms.PasswordInput, min_length=6, label='Confirm new password')
def clean_new_password1(self):
new_password1 = self.cleaned_data.get("new_password1")
# password must contain both Digits and Alphabets
# password cannot contain other symbols
if new_password1.isdigit() or new_password1.isalpha() or not new_password1.isalnum():
raise forms.ValidationError(
self.error_messages['invalid_password'],
code='invalid_password',
)
return new_password1
,你可以看到更多的檢查是對new_password1
但嘗試多次的頁面後進行仍在使用默認的SetpasswordForm作爲默認標籤爲兩個密碼顯示在我的HTML而不是我的自定義標籤(在HTML {{form.new_password2.label}}
用於顯示標籤),並沒有額外的檢查new_password1完成
我試圖創建另一個不繼承SetPassordForm的MyPasswordSetForm,並將其傳遞給password_reset_confirm
,但它沒有任何區別,仍使用默認形式。
我已經搜索了很多,並就此提出問題,似乎這是正確的方法,但是這裏可能是什麼問題?
非常感謝您的幫助。
它實際上似乎是正確的,你怎麼知道它仍然使用'SetPasswordForm'?在你的問題中不清楚。 –
在我的HTML我使用form.new_passord2.label,所以從標籤輸出,我可以看到使用默認窗體(正如你可以看到我的標籤new_password2是不同於默認窗體),也沒有錯誤檢查在new_password1上完成(例如,最小長度爲6,應該包含數字和alpha)。但它會做比較兩個默認形式的密碼的錯誤檢查 – Mona
您是否已經仔細檢查實際視圖是否被調用?另外,也許你已經完成了,但重新嘗試重新啓動服務器。你的代碼看起來很好。 –