Как перенаправить пользователей на нужную html-страницу только после успешного входа в систему (Flask Python App)? - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь настроить страницу входа перед доступом к любой другой странице.Итак, на данный момент код работает нормально, но если я захожу в '/ home', он перенаправляется прямо на эту страницу без необходимости входа в систему

Я пытался понять онлайн-решения, такие как вход в систему с помощью SQLAlchemy, но, похоже, ничего не получалось, и я полностью потерян.Я полагаю, это не требует входа в систему.

Вот мой код:

from dbscriptdeploy import dbupdate
from flask.templating import render_template   
from flask import Flask, request, url_for, redirect

DBupdate = dbupdate() 

app = Flask(__name__) #create the Flask app

@app.route('/success')
def deploy_success():
    return render_template("success.html")

def deploy_script(sql):
    res = DBupdate.dbvalues_get(sql)
    return res

@app.route('/', methods=['GET', 'POST'])
def login_page():
    error = None
    if request.method == 'POST':
        if request.form['username'] != 'admin' or request.form['password'] != 'admin':
        error = 'Invalid Credentials. Please try again.'
    else:
        return redirect(url_for('form_example'))
return render_template('login.html', error=error)

@app.route('/home', methods=['GET', 'POST'])
def form_example():
    res = None
    error = ''
    try:
        if request.method == 'POST': 
            sql = request.form.get('sql')
            res = deploy_script(sql) 
            if res:
                return redirect(url_for('deploy_success'))
            else:
                error = "*Invalid Value. Please try again."

        return render_template('home.html', error=error)
    except Exception as e:
        return render_template('home.html', error=error)

if __name__ == '__main__':
    app.run(debug=True) #run app in debug mode on port 5000    

Login.html Код:

<html>
  <head>
    <title>Flask Intro - login page</title>
  </head>
  <body>
    <div class="container">
      <h1>Please login</h1>
      <br>
      <form action="" method="post">
        <input type="text" placeholder="Username" name="username" value="{{
          request.form.username }}">
         <input type="password" placeholder="Password" name="password" value="{{
      request.form.password }}">
    <input class="btn btn-default" type="submit" value="Login">
  </form>
  {% if error %}
    <p class="error"><strong>Error:</strong> {{ error }}
  {% endif %}
</div>
  </body>
</html> 

Так что я ожидаю, что после успешноготолько после этого они должны быть направлены на \ домашнюю страницу, иначе они должны быть снова направлены на страницу входа.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

На вашем месте я бы использовал flask-login .Однако, если вы хотите разработать простое решение самостоятельно, вам следует сохранить некоторые переменные в сеансе пользователя.

Также в вашем методе входа есть ошибка.Я бы сделал:

from flask import session

@app.route('/', methods=['GET', 'POST'])
def login_page():
    error = None
    if request.method == 'POST':
        if request.form['username'] == 'admin' and request.form['password'] == 'admin':
            session['admin'] = request.form['username']
            return redirect(url_for('form_example'))
        else:
            error = 'Invalid Credentials. Please try again.'

    return render_template('login.html', error=error)

Затем в вашем представлении form_example вы должны убедиться, что admin находится в сеансе, иначе вы можете перенаправить в ваше представление входа в систему:

@app.route('/home', methods=['GET', 'POST'])
def form_example():
    if 'admin' not in session:
        return redirect(url_for('login_page'))
    else:
        # Your code here
0 голосов
/ 06 февраля 2019

Если вы действительно хотите пойти по пути разработки собственного решения для входа в систему / аутентификации, ознакомьтесь с документацией для flash_message http://flask.pocoo.org/docs/1.0/patterns/flashing/. В этом учебнике есть именно та проблема, которую вы решаете.Перенаправление успешной попытки входа в систему происходит с redirect вызовом

return redirect(url_for('homepage'))
...