简体   繁体   中英

render_template in Python-Flask is not working

I am actually creating an app with Flask and I am encountering issues regarding my routing.

My situation is simple: The user enters a token to authenticate himself. Once he clicks on authenticate , an angular HTTP request uses POST to send his token to a Python server. There, if he is granted access, the home page is displayed using render_template ; otherwise the login keeps still.

However, when the user authenticates himself, I see on my command line that the POST was successful, the authentication was a success but the page just stuck on login and does not redirect to home page as if the second render_template does not work. Please Help!

@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()  

Your login handler shouldn't call index directly. It should return a redirect to the index.

return redirect('/')

or better:

return redirect(url_for('index'))

I was thinking of the following.

@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")

I have used Angular JS in my app to send requests to my flask server and i realised that my client side angular JS had difficulties in rendering page as it was just expecting a response. I first tried to do.. document.write('response.data') and it did display my home page but my scripts attached on my html page stopped working. Second try, I tried to reload the page after receiving the response in my client and it works well. I don't know if it's the best way to do but it does work.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM