Перенаправление в flask

#python #flask

#python #flask

Вопрос:

Я не уверен, почему страница перенаправляется на / index route после ввода имени пользователя

 from flask import Flask, session, redirect, url_for, request
from markupsafe import escape

app = Flask(__name__)

# Set the secret key to some random bytes. Keep this really secret!
app.secret_key = b'_5#y2L"F4Q8znxec]/'

@app.route('/index')
def index():
    if 'username' in session:
        return 'Logged in as %s' % escape(session['username'])
    return 'You are not logged in'

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        session['username'] = request.form['username']
        return redirect(url_for('index'))
    return '''
        <form method="post">
            <p><input type=text name=username>
            <p><input type=submit value=Login>
        </form>
    '''

@app.route('/logout')
def logout():
    # remove the username from the session if it's there
    session.pop('username', None)
    return redirect(url_for('index'))
  

Код взят из документации quickstart для flask

Комментарии:

1. ваша функция просмотра входа возвращает перенаправление на url_for('index')

2. @monsieuralfonse64 я могу понять это для POST menthod, но на самом деле я говорил о: return «‘ <метод формы =»post»> <p><тип ввода= текстовое имя = имя пользователя> <p><тип ввода= значение отправки= Логин> </форма> «‘

3. Когда вы отправляете форму, она отправляет POST-запрос на сервер, и это будет обработано в if request.method == POST , поэтому вы будете перенаправлены.

4. Куда вы хотите перенаправить пользователей в случае успешного входа в систему?

5. @SeyiDaniel это не мой код, я просто выбрал его из документации Flask. У меня возникли сомнения, почему страница перенаправляется после того, как пользователь вводит имя пользователя

Ответ №1:

На самом деле, @monsieuralfonse64 уже дал ответ, поэтому я просто резюмирую его.

Поскольку ваша форма устанавливает method="post" атрибут:

 @app.route('/login', methods=['GET', 'POST'])
def login():
    # ...
    return '''
        <form method="post">
            <p><input type=text name=username>
            <p><input type=submit value=Login>
        </form>
    '''
  

Когда вы отправляете форму, браузер отправляет данные в виде метода POST, поэтому он запускает if request.method == 'POST': инструкцию, затем выполняет return redirect(url_for('index')) , наконец, перенаправляет вашу страницу в / index.