Почему моя функция входа в систему flask не распознает мой метод публикации? - PullRequest
1 голос
/ 11 апреля 2020

Вот мой код:

@app.route("/login", methods=["GET", "POST"])
def login():
    session.clear()
    if request.method == "GET":
        return render_template("login.html")
    if request.method == "POST":
        rows = User.query.filter_by(username=request.form.get("username")).first()
        if rows is None or not check_password_hash(rows.password, request.form.get("password")):
            flash('incorrect username or password')
            return render_template("login.html")
        else:
            session["user_id"] = rows.user_id
            return render_template("profile.html")

Вот мой терминал:

127.0.0.1 - - [10/Apr/2020 21:59:00] "GET /login?username=nico&password=somepassword HTTP/1.1" 200 -
127.0.0.1 - - [10/Apr/2020 21:59:07] "GET /login?username=nico&password=somepassword HTTP/1.1" 200 -

Я попытался отладить свой код, и я пришел к выводу, что программа как-то не обрабатывает :

if request.method == "POST":

Так что я не могу войти в систему. Мой html в порядке, я использовал тот же самый для моей функции регистрации, и она работает отлично. Каким-то образом, когда я нажимаю кнопку «Войти» на моей веб-странице, flask doest распознает метод запроса POST и возвращает только «GET».

Это мой логин html форма:

<form>
  <div class="form-group input-group">
  <div class="input-group-prepend">
    <span class="input-group-text"> <i class="fa fa-user"></i> </span>
 </div>
    <input name="username" class="form-control" placeholder="Nombre de usuario" type="text" minlength="3" maxlength="20" required oninvalid="this.setCustomValidity('El nombre de usuario debe tener entre 3 y 20 caracteres.')"
    oninput="this.setCustomValidity('')">
</div> <!-- form-group// -->
<div class="form-group input-group">
  <div class="input-group-prepend">
</div>
</div> <!-- form-group end.// -->
<div class="form-group input-group">
  <div class="input-group-prepend">
    <span class="input-group-text"> <i class="fa fa-lock"></i> </span>
</div>
    <input name="password" class="form-control" minlength="5" placeholder="Contraseña" type="password" required oninvalid="this.setCustomValidity('La contraseña debe tener 6 caracteres como mínimo')"
    oninput="this.setCustomValidity('')">
</div> <!-- form-group// -->
<div class="form-group">
    <button type="submit" class="btn btn-primary btn-block"> Iniciar sesión  </button>
</div> <!-- form-group// -->
<p class="text-center">No tienes una cuenta? <a href="/register">Regístrate</a> </p>
</form>

1 Ответ

2 голосов
/ 11 апреля 2020

Я думаю, это должно быть:

if request.method == "GET":
    return render_template("login.html")
elif request.method == "POST":

и:

<form action='/login' method='POST'>

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