Django Ошибка входа - PullRequest
       1

Django Ошибка входа

1 голос
/ 04 сентября 2011

Я пытаюсь сделать вид входа в систему пользователя, и он продолжает сбой. Это мой код:

def userLogin(request):
    if request.method == 'POST':
        form = AuthenticationForm(request.POST)
            if form.is_valid():
                user = authenticate(username = request.POST['username'], password = request.POST['password'])
                if user is not None:
                    if user.is_active:
                        login(request, user)
                            return HttpResponseRedirect("/success")
                    else:
                        return render_to_response('/home/dockedin/webapps/linked/myproject/templates/index.html', {'outcome':'Account Disabled'}, context_instance= RequestContext(request))
                else:
                    return render_to_response('/home/dockedin/webapps/linked/myproject/templates/index.html', {'outcome':'Invalid Login'}, context_instance= RequestContext(request))
            else:
                return render_to_response('/home/dockedin/webapps/linked/myproject/templates/index.html', {'outcome':'FORM NOT VALID?'}, context_instance= RequestContext(request))

    else:
        form = AuthenticationForm()
    return render_to_response('/home/dockedin/webapps/linked/myproject/templates/index.html', {'form':form}, context_instance= RequestContext(request))

По сути, я продолжаю печатать «ФОРМА НЕ ДОПУСКАЕТСЯ» на моем сайте, и я понятия не имею, почему. Помогите, пожалуйста? Спасибо

Ответы [ 3 ]

6 голосов
/ 04 сентября 2011

Этот код неверен:

form = AuthenticationForm(request.POST)

Вам нужно изменить на:

form = AuthenticationForm(data=request.POST)

Это потому, что AuthenticationForm перезаписывает метод __init__ и первый параметр конструктора не data, а request=None.

Несколько советов:

  • Пожалуйста, повторно используйте включенный вид входа в систему, как предложено @piquadrat.
  • Если вы используете Django 1.3, используйте комбинацию render вместо render_to_response + pass RequestContext. Если вы используете Django <1.3, создайте ярлык для бэкпорта и используйте его. </li>
  • Не указывать абсолютные пути к шаблону; используйте settings.TEMPLATE_DIRS
2 голосов
/ 04 сентября 2011

Вы неверно подходите к концепции форм Джанго.Идея формы внутри django состоит в том, что она обрабатывает данные POST, поэтому вам не нужно это делать.Это не просто проверка правильности данных.Они также могут преобразовывать данные в надежное состояние.

if request.method == "POST":
    form = AuthenticationForm(data=request.POST)
    if form.is_valid():
        login(request, form.get_user())

Обратите внимание, что нет необходимости в ручной аутентификации?Экземпляр формы выполняет аутентификацию, когда вы проверяете, является ли форма действительной.Тогда это просто вопрос регистрации пользователя путем извлечения пользовательского экземпляра из самой формы.

Вы должны очень редко (если вообще когда-либо) получать доступ к данным POST из своих представлений.Формы должны использоваться для обработки, очистки, проверки и возврата действительных объектов.

2 голосов
/ 04 сентября 2011

Попробуйте напечатать form.errors, чтобы понять, почему проверка не удалась.

Кстати, есть ли причина, по которой вы не используете встроенное представление django.contrib.auth.views.login?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...