2014-12-06 3 views
0

Я создал форму входа в брандмауэр, которую я хочу поставить перед моим фактическим веб-сайтом , пока я разрабатываю сайт. Идея состоит в том, чтобы попробовать и оставить «плохих парней» вне сайта и в то же время увидеть, какие имена пользователей и пароли, которые они используют. Проблема, с которой я сталкиваюсь, заключается в том, что , если я ввешу неправильную пару имени пользователя/пароля, сообщение об ошибке моей формы не отображается. Я понимаю, что для моих целей это может быть лучше не выводить никаких сообщений об ошибке, но я все равно хотел бы, чтобы проблема была в . Может ли кто-нибудь увидеть, что я делаю неправильно?Ошибки формы Django не отображаются

Спасибо.

# views.py 
import logging 
logger = logging.getLogger(__name__) 
from django.contrib.auth import authenticate 
from django.contrib.auth.forms import AuthenticationForm 
from django.contrib.auth.views import login 
from django.http import HttpResponseRedirect 

def firewall_login(request, *args, **kwargs): 
    if request.method == "POST": 
     form = AuthenticationForm(request, data=request.POST) 
     username = request.POST['username'] 
     password = request.POST['password'] 
     if form.is_valid(): 
      fw_username = form.cleaned_data['username'] 
      fw_password = form.cleaned_data['password'] 
      user = authenticate(username=fw_username, password=fw_password) 
      if user is not None: 
       if user.is_active: 
        login(request, user) 
        logger.info("User '%s' logged in." % fw_username) 
        return HttpResponseRedirect("/accounts/profile/") 
       else: 
        logger.info("User '%s' tried to log in to disabled account." % fw_username) 
        return HttpResponseRedirect("/accounts/disabled/") 
     else: 
      logger.info("User '%s' tried to log in with password '%s'." % (username, password)) 
      form = AuthenticationForm(request) # Display bound form 
    else: 
     form = AuthenticationForm() # Display unbound form 
    return render(request, "registration/login.html", {"form": form,}) 

# login.html 
{% extends "base.html" %} 
{% block content %} 

    {% if form.errors %} 
    <p class="alert alert-error">Sorry, that's not a valid username or password</p> 
    {% endif %} 

    {% if form.errors %} 
     {% for field in form %} 
      {% for error in field.errors %} 
       <div class="alert alert-error"> 
        <strong>{{ error|escape }}</strong> 
       </div> 
      {% endfor %} 
     {% endfor %} 
     {% for field in form.non_field_errors %} 
      <div class="alert alert-error"> 
       <strong>{{ error|escape }}</strong> 
      </div> 
     {% endfor %} 
    {% endif %} 

    <form action="" method="post"> 
     {% csrf_token %} 
     <p><label for="username">Username:</label>{{ form.username }}</p> 
     <p><label for="password">Password:</label>{{ form.password }}</p> 
     <input type="hidden" name="next" value="{{ next|escape }}" /> 
     <input class="btn btn-primary" type="submit" value="login" /> 
    </form> 

{% endblock %} 

ответ

1

Это потому, что вы передаете экземпляр новой формы. Валидация происходит по адресу is_valid call.

Так, просто удалите form = AuthenticationForm(request) в else блоке:

def firewall_login(request, *args, **kwargs): 
if request.method == "POST": 
    form = AuthenticationForm(request, data=request.POST) 
    username = request.POST['username'] 
    password = request.POST['password'] 
    if form.is_valid(): 
     fw_username = form.cleaned_data['username'] 
     fw_password = form.cleaned_data['password'] 
     user = authenticate(username=fw_username, password=fw_password) 
     if user is not None: 
      if user.is_active: 
       login(request, user) 
       logger.info("User '%s' logged in." % fw_username) 
       return HttpResponseRedirect("/accounts/profile/") 
      else: 
       logger.info("User '%s' tried to log in to disabled account." % fw_username) 
       return HttpResponseRedirect("/accounts/disabled/") 
    else: 
     logger.info("User '%s' tried to log in with password '%s'." % (username, password)) 
else: 
    form = AuthenticationForm() # Display unbound form 
return render(request, "registration/login.html", {"form": form,}) 
+0

Это была проблема. Благодаря! – William