@EnotShow

Почему пользователь не авторизуется django?

Хочу написать авторизацию пользователя и регистрацию на одной странице, но у меня не получается авторизовать пользователя. В питоновском коде всё вроде правильно, я думаю что проблема где-то в HTML. Прошу помощи у знатоков.
Форма:
<div id="form">
  <div class="container">
    <div class="col-lg-6 col-lg-offset-3 col-md-6 col-md-offset-3 col-md-8 col-md-offset-2">
      <div id="userform">
        <ul class="nav nav-tabs nav-justified" role="tablist">
          <li class="active"><a href="#signup"  role="tab" data-toggle="tab">Регистрация</a></li>
          <li><a href="#login"  role="tab" data-toggle="tab">Войти</a></li>
        </ul>
        <div class="tab-content">
          <div class="tab-pane fade active in" id="signup">
            <h2 class="text-uppercase text-center"> Зарегистрироваться бесплатно</h2>
            <form id="signup">
              <div class="row">
                <div class="col-xs-12 col-sm-6">
                  <div class="form-group">
                    <label>Имя<span class="req">*</span> </label>
                    <input type="text" class="form-control" id="first_name" required data-validation-required-message="Please enter your name." autocomplete="off">
                    <p class="help-block text-danger"></p>
                  </div>
                </div>
                <div class="col-xs-12 col-sm-6">
                  <div class="form-group">
                    <label> Фамилия <span class="req">*</span> </label>
                    <input type="text" class="form-control" id="last_name" required data-validation-required-message="Please enter your name." autocomplete="off">
                    <p class="help-block text-danger"></p>
                  </div>
                </div>
              </div>
              <div class="form-group">
                <label> Email<span class="req">*</span> </label>
                <input type="email" class="form-control" id="email" required data-validation-required-message="Please enter your email address." autocomplete="off">
                <p class="help-block text-danger"></p>
              </div>
              <div class="form-group">
                <label> Номер телефона<span class="req">*</span> </label>
                <input type="tel" class="form-control" id="phone" required data-validation-required-message="Please enter your phone number." autocomplete="off">
                <p class="help-block text-danger"></p>
              </div>
              <div class="form-group">
                <label> Пароль<span class="req">*</span> </label>
                <input type="password" class="form-control" id="password" required data-validation-required-message="Please enter your password" autocomplete="off">
                <p class="help-block text-danger"></p>
              </div>
              <div class="mrgn-30-top">
                <button type="submit" name="signup" class="btn btn-larger btn-block"/>
                Зарегистрироваться
                </button>
              </div>
            </form>
          </div>
          <div class="tab-pane fade in" id="login">
            <h2 class="text-uppercase text-center"> Войти</h2>
            <form id="login">
              <div class="form-group">
                <label> Email<span class="req">*</span> </label>
                <input type="username" class="form-control" id="email" required data-validation-required-message="Please enter your email address." autocomplete="off">
                <p class="help-block text-danger"></p>
              </div>
              <div class="form-group">
                <label> Пароль<span class="req">*</span> </label>
                <input type="password" class="form-control" id="password" required data-validation-required-message="Please enter your password" autocomplete="off">
                <p class="help-block text-danger"></p>
              </div>
              <div class="mrgn-30-top">
                {% csrf_token %}
                <button type="submit" name="submit" value="login" action="{% url 'home' %}" formmethod="post" method="post" class="btn btn-larger btn-block"/>
                Войти
                </button>
              </div>
            </form>
          </div>
        </div>
      </div>
    </div>
  </div>
  <!-- /.container --> 
</div>

Код:
def user_login(request):
    if request.method == 'POST':
        if request.POST.get('submit') == 'login':
            # return HttpResponse(request.POST.items())
            # print(request.POST['username'], request.POST['password'])
            username = request.POST['username']
            password = request.POST['password']
            user = authenticate(request, username=username, password=password)
            if user is not None:
                login(request, user)
                return HttpResponse('logining')
            return HttpResponse('error')
        elif request.POST.get('submit') == 'signup':
            pass
    elif request.method == 'GET':
        return render(request, 'pizza/sign_up.html')
  • Вопрос задан
  • 64 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Во-первых, у формы не прописан ни action, ни method, так что даже если она вызовет как-то представление login, управления никогда не попадёт в нужный блок.
Во-вторых, даже если управление попадёт в нужный блок, из него нет возврата HttpResponse, так что обработка запроса закончится ошибкой.
В-третьих, имя вашего представления перекрывает имя функции для логина, поэтому она никогда не будет вызвана.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы