2014-11-11 4 views
1

저는 Python과 django에 대해 매우 익숙합니다. 현재 저는 극복 할 수없는 문제가 있습니다. 나는 모든 문서 및 인터넷 검색을 읽으려고 시도했지만 지금까지는 아무것도 없다.Django crispy forms 오류 메시지

내가 사용해야하는 사용자 정의 로그인 양식이 있습니다. 모든 코드는 지금까지의 작업이 있습니다. 난 그냥 잘 작동하는 사용자를 인증하고 싶지만 잘못된 정보를 입력하면 HttpResponse를 반환하는 대신 잘못된 로그인 세부 정보를 말하는 양식에 오류 메시지를 표시하려고합니다. 그러나 정확히 정확히 파악하지 못하는 것 같습니다. 이와 같이 파삭 파삭 한 형태로 이와 같은 인증 오류를 표시합니다.

어떤 도움이 많이

아, 네

을 감상 할 수있다, 그 어떤 차이

을 만드는 경우이 파이썬 3.4이 나의 forms.py입니다 :

class UserLoginForm(forms.ModelForm): 
    email = forms.CharField(
     label="Your email address", 
     max_length=80, 
     required=True, 
    ) 

    password = forms.CharField(
     label="Your password", 
     required=True, 
    ) 

    def __init__(self, *args, **kwargs): 
     super(UserLoginForm, self).__init__(*args,**kwargs) 

     self.helper = FormHelper(self) 
     self.helper.form_id = 'form-login' 
     self.helper.form_class = 'form-login' 
     self.helper.form_method = 'POST' 
     self.helper.form_action = 'login' 
     self.helper.field_class = 'form-control input-lg' 
     self.helper.form_show_errors = True 
     self.helper.layout = Layout(
      Field('email', template='crispy/login_input_email.html'), 
      Field('password', template='crispy/login_input_password.html'), 
     ) 

     self.helper.layout.append(Submit('login', 'Log me in', css_class='btn btn-primary btn-lg')) 

    class Meta: 
     model = User 
     fields = ('email', 'password',) 

이 내 전망이다. py :

def login_view(request, template_name='login.html'): 

    redirect_url = request.GET.get('next') 

    if request.method=='POST': 
     loginForm = UserLoginForm(request.POST) 
     if loginForm.is_valid(): 

      username = loginForm.cleaned_data.get('email') 
      password = loginForm.cleaned_data.get('password') 

      user = authenticate(username=username, password=password) 
      if user is not None: 
       if redirect_url is None: 
        redirect_url='/home' 

       login(request, user) 
       return HttpResponseRedirect(redirect_url) 
      return HttpResponse("Invalid login details supplied.") 
     return render_to_response(template_name, {'crispy_form': loginForm}, context_instance=RequestContext(request)) 
    else: 
     loginForm = UserLoginForm() 
    return render_to_response(template_name, {'crispy_form': loginForm}, context_instance=RequestContext(request)) 

마지막으로 이것은 내 템플릿입니다.

{% extends "master.html" %} 

{% load crispy_forms_tags %} 

{% block content %} 
    <div class="inner-block"> 
     <h1>Log in to your account</h1> 
     {% crispy crispy_form crispy_form.helper %} 
    </div> 
{% endblock %} 

감사

답변

2

는 메시징 시스템에게 django.contrib.messagges의 문서에

from django.contrib import messages 

... 
else: 
    messages.error(request, "Your error message") 
    loginForm = UserLoginForm() 
.... 

확인을 사용합니다.

+0

좋습니다. 이것이 나를 위해 일하는 해결책이었습니다. 감사합니다 – NightStalker

+0

투표하는 것을 잊지 마십시오! :-) –

0

models.py에서 필수로 정의한 요소의 양식 요소 태그에 HTML5 required 속성이 추가되는지 확인해야 할 수도 있습니다.

양식에 필수 요소가없는 경우 브라우저에서 HTML5 클라이언트 측 유효성 검사를 수행하면 양식을 제출할 수 없으므로 request.POST을 얻지 못하므로 Django 서버 측 유효성 검사가 없으므로 form.errors이 리턴됩니다.

저는 며칠 동안 좋은 하루를 보냈습니다. 어쨌든 Django 1.10부터는 폼 요소 *에서 turn off the HTML5 required attribute을 사용할 수 있으며 서버 측 Django 유효성 검사 (및 템플릿 오류 메시지)에 의존합니다.

* 내 테스트에서 HTML5 폼 유효성 검사 지원이 실패/실패했으며 가장 최신의 최신 브라우저 버전이없는 컴퓨터를 잠근 사용자가 있습니다.

관련 문제