render_template в Python-Flask не работает - PullRequest
0 голосов
/ 17 сентября 2018

Я на самом деле создаю приложение с Flask, и у меня возникают проблемы с маршрутизацией.

Моя ситуация проста: пользователь вводит токен для аутентификации.Как только он нажимает authenticate , угловой HTTP-запрос использует POST для отправки своего токена на сервер Python.Там, если ему предоставлен доступ, домашняя страница отображается с помощью render_template;в противном случае логин остается неподвижным.

Однако, когда пользователь аутентифицирует себя, в командной строке я вижу, что POST прошел успешно, аутентификация прошла успешно, но страница просто застряла на login и не перенаправляет на домашнюю страницу , как будто вторая render_template не работает.Пожалуйста, помогите!

@app.route('/')
def index():
    if not session.get('logged_in'):
        return render_template('auth.html')  # this is ok.
    else:
        return render_template('index.html')  # this does not work


@app.route('/login', methods=['POST','GET'])
def login():
    tok = request.form['token']

    if (check_token(tok) == "pass"):  # check_token is a function I've implemented
                                      # to check if token is ok=pass, ko=fail
        session['logged_in'] = True
    else:
        flash("wrong token")

    return index()  

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018

Я думал о следующем.

@app.route('/')
def index():
    if not session.get('logged_in'):
        return return redirect(url_for('login'))
    else:
        return render_template('index.html')  

@app.route('/login', methods=['POST','GET'])
def login():
    if request.method = "POST":
        tok = request.form['token']

        if (check_token(tok) == "pass"):  
            session['logged_in'] = True
        return redirect(url_for('index'))

        else:
            flash("wrong token")

    return render_template("login.html")
0 голосов
/ 26 сентября 2018

Я использовал Angular JS в своем приложении для отправки запросов на мой флеш-сервер, и я понял, что у моего Angular JS на стороне клиента возникли трудности с отображением страницы, поскольку он просто ожидал ответа.Сначала я попытался сделать .. document.write('response.data'), и он действительно отобразил мою домашнюю страницу, но мои скрипты, прикрепленные к моей html-странице, перестали работать.Вторая попытка, я попытался перезагрузить страницу после получения ответа в моем клиенте, и она работает хорошо.Я не знаю, лучший ли это способ, но он работает.

0 голосов
/ 17 сентября 2018

Ваш обработчик login не должен вызывать index напрямую. Он должен вернуть перенаправление в индекс.

return redirect('/')

или лучше:

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