Django 1.0 웹 사이트 개발에 사용자 등록 페이지의 간단한 예제를 복사했습니다. 사용자 이름이 이미 필드는 일반 양식 유효성 검사를 사용하여 검증 촬영하고 내 사용자 지정 깨끗한 메소드가 호출되지 않는 경우Django form.is_valid() 메서드를 호출하지 않습니다. clean_ <fieldname>
class RegistrationForm(forms.Form):
username = forms.CharField(label=u'Username', max_length=30)
email = forms.EmailField(label=u'Email')
password1 = forms.CharField(
label=u'Password',
widget=forms.PasswordInput()
)
password2 = forms.CharField(
label=u'Password (Again)',
widget=forms.PasswordInput()
)
def clean_password2(self):
if 'password1' in self.cleaned_data:
password1 = self.cleaned_data['password1']
password2 = self.cleaned_data['password2']
if password1 == password2:
return password2
raise forms.ValidationError('Passwords do not match.')
def clean_username(self):
print "Validating username..."
username = self.cleaned_data['username']
if not re.search(r'^\w+', username):
raise forms.ValidationError('Username can only contain '
'alphanumeric characters and the underscore.')
try:
User.objects.get(username=username)
except User.DoesNotExist:
return username
raise forms.ValidationError('Username is already taken')
: 나는 다음과 같은 형식을 정의했습니다. 폼이 register_page에 제출되면 form.is_valid()는 True를 반환합니다.
Django가 clean_ 메소드를 호출하기 위해 알아야 할 사항이 있습니까?
def register_page(request):
if request.method == 'POST':
print "Posted to registration form"
form = RegistrationForm(request.POST)
if form.is_valid():
user = User.objects.create_user(
username=form.cleaned_data['username'],
password=form.cleaned_data['password1'],
email=form.cleaned_data['email']
)
return HttpResponseRedirect('/')
else:
form = RegistrationForm()
return render_to_response(
'users/registration.html',
context_instance=RequestContext(request, {
'form' : form
})
이 내가 내 양식 메타의 튜플 제외 설정을 수수께끼 같은 - 당신의 청결한 방법이 불려 져야합니다. 올바른'RegistrationForm'을 가져 왔습니까? 어쩌면 유효성 검사 메소드가없는 어딘가에 다른 버전이있을 수도 있습니다. –
'clean_fieldname' 메소드는 특정 순서로 호출되지 않으므로'clean_password2'는 이미'cleaned_data'에있는'password1'에 의존 할 수 없습니다. 'password1' 전에'password2'가 처리되면'ValidationError'가 던져 질 수 있습니다. –
clean_username()을 확실히 건너 뜁니다. –