why django inbuilt auth views not recognizing the customized form?

青春壹個敷衍的年華 提交于 2019-12-25 07:31:20

问题


I understand that when we need to make the django inbuilt views, parameter specification should be made before the inbuilt view function could use it.

now I want to customize the form for django auth viewpassword_reset_confirm

and in the url, I import my customized form

from Myapp.forms import PasswordSetForm
from django.contrib.auth import urls,views

and for the url

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')),

in my form.py i import the original SetPasswordForm that is used as default form by django password_reset_confirm funciton

from django.contrib.auth.forms import SetPasswordForm

and then customize the form

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

as you could see more checking are done for the new_password1

But after trying many times the page is still using the default SetpasswordForm as the default labels for the two password is displayed in my html instead of my customized label(in the html {{form.new_password2.label}} is used to display label) and no additional checking on the new_password1 is done

I have tried to create another MyPasswordSetForm that does not inherit the SetPassordForm and pass this to the password_reset_confirm but it does not make any difference, the default form is still used.

I have googled lot and ask questions on this, seems this is the right way to go, but What could be the problem here?

Thank you very much for helping.


回答1:


Oops, that URL regexp looks wrong wrong wrong:

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})/$  '

It should be:

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})/$'


来源:https://stackoverflow.com/questions/17438964/why-django-inbuilt-auth-views-not-recognizing-the-customized-form

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!