2016-04-21 9 views
0

hier ist die Formkann nicht django Form Validierungsfehler auf derselben Seite

class LoginForm(forms.Form): 
    email = forms.EmailField(
     label=("Email"), 
     widget=forms.TextInput(attrs={ 
      'id': 'inputEmail', 
      'class': 'form-control inp', 
      'type': 'text', 
      'placeholder': 'your email' 
     }), 
     required=True 
    ) 
    password = forms.CharField(
     widget=forms.PasswordInput(
      render_value=False, 
      attrs={ 
       'id': 'inputPassword', 
       'class': 'form-control inp', 
       'type': 'password', 
       'placeholder': 'Password' 
      } 
     ), 
     required=True 
    ) 

und hier ist der Blick für das Formular

class Home(View): 
    template_name = "sellers/seller_home.html" 
    form_class = LoginForm 


    def get(self, request , *args , **kwargs): 
     context = {} 

     login_form = LoginForm() 

     context['login_form'] = login_form 

     return render(request , "sellers/seller_home.html" , context) 

    def post(self , request , *args , **kwargs): 
     email = request.POST.get('email') 
     name = request.POST.get('store_name') 
     password = request.POST.get('password') 
     mobile = request.POST.get('mobile') 

     form = self.form_class(request.POST) 


     if request.is_ajax(): 
      if email: 
       if User.objects.filter(email=email).exists(): 
        return HttpResponse(json.dumps('True')) 
       else: 
        return HttpResponse(json.dumps('False')) 
      if mobile: 
       if User.objects.filter(mobile=mobile).exists(): 
        return HttpResponse(json.dumps('True')) 
       else: 
        return HttpResponse(json.dumps('False')) 
     else: 
      if form.is_valid(): 
       email = form.cleaned_data["email"] 
       password = form.cleaned_data["password"] 

       user = User.objects.get(email__iexact=email) 

       authenticated_user = authenticate(username=user.username , password=password) 

       if not authenticated_user: 
        raise ValidationError("Email or password is incorrect") 
       else: 
        login(request , authenticated_user) 
        return HttpResponseRedirect(reverse('dashboard')) 
      else: 
       return render(request , self.template_name , {'login_form' : form}) 

das Problem hier iam Verkleidung zeigen, ist, dass ich nicht in der Lage bin Validierungsfehler als Label in der Vorlage zu zeigen. Es löst Fehler als Validierungsfehler. Wie kann ich die Validierung auf eine bessere Weise erreichen?

hier ist die Zurückverfolgungs

Traceback: 
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response 
    132.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "C:\Python27\lib\site-packages\django\views\generic\base.py" in view 
    71.    return self.dispatch(request, *args, **kwargs) 
File "C:\Python27\lib\site-packages\django\views\generic\base.py" in dispatch 
    89.   return handler(request, *args, **kwargs) 
File "C:\Users\lenovo\Desktop\Grooved2\grooved\src\sellers\views.py" in post 
    82.     raise ValidationError("Email or password is incorrect") 

Exception Type: ValidationError at /sellers/ 
Exception Value: [u'Email or password is incorrect'] 

Antwort

3

Django Ansichten Validierungsfehler nicht behandeln. Sie sollten ValidationError in den Methoden clean_<field> oder clean des Formulars auslösen.

Beachten Sie, dass Django bereits über einen integrierten AuthenticationForm verfügt, den Sie verwenden könnten. Wenn Sie sich den Quellcode ansehen, können Sie sehen, wie er authenticate in der Methode clean des Formulars aufruft, nicht in der Ansicht.

1

Sie sind Verwendung Einbau-authenticate Methode:

authenticated_user = authenticate(username=user.username , password=password) so dass keine Notwendigkeit ValidationError

Django Ansichten zu erhöhen, ist es nicht handhaben. Sie sollten die clean-Methode zur Überprüfung der Felder verwenden.

Verwandte Themen