2016-10-03 67 views
0

私は問題があります:私は情報が有効になっていないとログインしようとすると、ページはちょうどリフレッシュされ、何も起こりません。私の目標は検証エラーをポップアップすることですが、文字通り出現を拒否します。私のコードをチェックして、何をすべきかを知るのを助けてください。djangoにValidationErrorが表示されない

テンプレート

<form method="post" action=""> 
    {% csrf_token %} 
     {% bootstrap_form_errors form %} 
     {% bootstrap_form form %} 
     <input type="hidden" name="next" value="{{ request.path }}"> 
     <input type="submit" value="Войти"> 
    </form> 

フォーム

class LoginForm(forms.ModelForm): 
    username = forms.CharField() 
    password = forms.CharField(widget=forms.PasswordInput) 

    class Meta: 
     model = CustomUser 
     fields = ('username', 'password') 

    def clean(self): 
     username = self.cleaned_data.get('username') 
     password = self.cleaned_data.get('password') 
     if username is not None and password: 
      user = authenticate(username=self.cleaned_data.get('username'), password=self.cleaned_data.get('password')) 
      if user is None: 
       raise ValidationError('Неверное имя пользователя или пароль') 
     if username is None or password is None: 
      raise ValidationError('Неверные данные') 
     return self.cleaned_data 

ビュー

class LoginView(FormView): 
    form_class = LoginForm 
    template_name = 'user/login.html' 

    def get_success_url(self): 
     return self.request.META.get('HTTP_REFERER') 

    def get_context_data(self, **kwargs): 
     ctx = super().get_context_data() 
     ctx['form'] = self.form_class 
     return ctx 

    def form_valid(self, form): 
     user = authenticate(username=form.cleaned_data.get('username'), 
          password=form.cleaned_data.get('password')) 

     login(self.request, user) 
     return super().form_valid(form) 

    def dispatch(self, request, *args, **kwargs): 
     if self.request.user.is_authenticated(): 
      return redirect('post-list') 
     return super().dispatch(request, *args, **kwargs) 

UPD:それはbootsrapないです。私はデフォルトのフォームを使用すると、同様にvalidationErrorsはありません

答えて

1

あなたの問題はポストデータでインスタンス化されたオブジェクトではなく、フォームクラスを渡すget_context_dataにあります。

ただし、そのメソッドをオーバーライドしないでください。この問題を修正したとしても、メソッドがすでに行っていることを複製するだけです。メソッドを完全に削除します。

関連する問題