Django - form 사용자 정의 검증

2162 단어 Django
1. 한 필드 에 대한 검증 은 길이 가 아니 라 정규 표현 식 이 명확 하 게 쓸 수 있 고 다른 복잡 한 논리 가 필요 할 때 가 있 습 니 다. 그러면 우 리 는 특정한 필드 에 대해 사용자 정의 검증 을 할 수 있 습 니 다.예 를 들 어 등 록 된 폼 검증 에서 우 리 는 핸드폰 번호 가 이미 등록 되 었 는 지 검증 하려 면 이때 데이터 베이스 에서 판단 해 야 알 수 있다.어떤 필드 에 대한 사용자 정의 검증 방식 은 방법 을 정의 하 는 것 입 니 다. 이 방법의 이름 정의 규칙 은 clean 입 니 다.fieldname。검증 에 실패 하면 검증 오 류 를 던 집 니 다.예 를 들 어 사용자 표 에 있 는 핸드폰 번호 가 데이터베이스 에 존재 하 는 지 검증 하려 면 다음 과 같은 코드 를 통 해 이 루어 질 수 있다.
class MyForm(forms.Form):
    telephone = forms.CharField(validators=[validators.RegexValidator("1[345678]\d{9}",message='            !')])
​
    def clean_telephone(self):#                      clean_
        telephone = self.cleaned_data.get('telephone')
        exists = User.objects.filter(telephone=telephone).exists()
        if exists:
            raise forms.ValidationError("        !")
        return telephone

이상 은 특정한 필드 를 검증 하 는 것 입 니 다. 데 이 터 를 검증 할 때 여러 필드 에 대한 검증 이 필요 하 다 면 clean 방법 을 다시 쓸 수 있 습 니 다.예 를 들 어 등록 할 때 제출 한 두 비밀번호 가 같은 지 판단 해 야 한다.그러면 다음 코드 를 사용 하여 완성 할 수 있 습 니 다.
class RegisterForm(forms.Form):
    username = forms.CharField(max_length=100)
    telephone = forms.CharField(validators=[validators.RegexValidator(r'1[3456789]\d{9}',message="         ")],error_messages={"required":"        "})
    password = forms.CharField(max_length=20,min_length=6)
    repassword = forms.CharField(max_length=20,min_length=6)
​
    def clean_telephone(self):
        telephone = self.cleaned_data.get('telephone')
        exists = User.objects.filter(telephone=telephone).exists()
        if exists:
            raise forms.ValidationError(message="%s      " % telephone)
        else:
            return telephone
    def clean(self):
        #                     
        #                    clean        clean  
        clean_data = super().clean()
        password = clean_data.get('password')
        repassword = clean_data.get('repassword')
        if  password!= repassword:
            raise forms.ValidationError(message="       ")
        return clean_data

좋은 웹페이지 즐겨찾기