0

클린이 내 입력 내용과 관계없이 로그인 양식에 오류를 표시하지 않으며 내가 깨끗하게 시도하는 오류를 표시하는 방법에 관계 없습니다.Django : 양식을 제출할 때 오류가 표시되지 않습니다.

내 CustomUserCreationForm 오류 표시가 완벽하게 작동합니다. 둘 사이의 유일한 차이점은 사용자 정의가 내 형태

class LoginForm(forms.Form): 
    username = forms.CharField(label=('UserName'), 
      widget = forms.TextInput(attrs={'placeholder': _('Username')}) 
    ) 
    password = forms.CharField(label=('Password'), 
      widget=forms.PasswordInput(attrs={'placeholder' : _('Password') }), 
    ) 

    def helper(self): 
      helper = FormHelper() 

      helper.form_id = "Login" 
      helper.form_method = "POST" 
      helper.layout = Layout(Div(
        Field('username', css_class='input-box-rounded'), 
        Field('password', css_class='input-box-rounded'), 
        Submit('Login', 'Login', css_class='col-md-6 col-md-offset-3 rounded'), 
        css_class='col-md-4 col-md-offset-4 centered-div')) 
      return helper 

    def clean(self): 

      cleaned_data = super(LoginForm, self).clean() 

      if 'username' not in cleaned_data: 
        msg = _("Please enter a username") 
        self._errors['username'] = self.error_class([msg]) 
      if 'password' not in cleaned_data: 
        msg = _("Please enter a password") 
        raise forms.ValidationError(msg) 
      u =authenticate(username = cleaned_data['username'], password = cleaned_data['password']) 
      if u == None: 
        msg = _("Username or Password is incorrect") 
        self.add_error('username', msg) 

      return cleaned_data 

답변

1

당신이 당신의보기 및 템플릿 코드를 게시 할 수 렌더링 할 장고 - 바삭-형태를 사용하고 또한

UserCreationForm

이 확장하면서 로그인이 forms.Form를 확장인가? 두 가지 중 하나를 보지 않고 Django Crispy Forms를 사용하지는 않았지만 템플릿에서 오류를 표시해야하거나보기가 양식을 처리하지 않는다고 가정합니다.

{{ form.non_field_errors }} 
{{ form.username.errors }} 

FYI, 에러 체크를 처리하는 바람직한 방법은 각 필드의 청정 기능을 만들고 문제가있을 경우 그것은 ValidationError를 발생하였습니다. 그러면 필드 오류가 발생합니다 (위의 두 번째 줄). 또한

def clean_password(self): 
    data = self.cleaned_data.get('password') 
    if not data: 
     raise ValidationError(_("Please enter a password")) 

, 당신은 당신이 필요한 각 필드에 대한 required=True을 설정하고 수동 검증을 건너 뛸 수 있도록 필드가 있다는 것을 확인하는 것입니다.

class LoginForm(forms.Form): 
    username = forms.CharField(label=('UserName'), required=True, 
     widget = forms.TextInput(attrs={'placeholder': _('Username')}) 
    ) 
    password = forms.CharField(label=('Password'), required=True, 
     widget=forms.PasswordInput(attrs={'placeholder' : _('Password') }), 
    ) 

더 많은 정보를 원하시면 설명서를 참조하십시오 : https://docs.djangoproject.com/en/dev/topics/forms/#customizing-the-form-template

관련 문제