2016-10-03 87 views
0

我有一个问题:当我尝试登录时没有得到验证的信息,页面只刷新,没有任何反应。我的目标是弹出任何验证错误,但他们从字面上拒绝出现。你能检查我的代码,并帮我找出该做什么。django does not show 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。当我使用默认窗体时,没有验证错误以及

回答

1

您的问题是在get_context_data,您传递窗体类,而不是实例与发布数据的对象。

但是,您不应该重写该方法。即使你解决了这个问题,它只会重复这个方法已经做的事情。完全删除该方法。