Python全局变量不实时更新

时间:2018-01-12 19:16:32

标签: python html

value=user_id未采用def login():定义的新值。如果从 HTML页面输入的user_id为200,300和100.这些值将被指定为0,200,300。也就是说,当显示主页时,它将显示用户0表示输入值200,第二表示输入值300表示200,第三表示输入值100表示​​300。 我需要一个实时值,即对于输入值200主页应该有值200,而对于300应该是300.有谁可以帮我这个?请指教。提前致谢。注意: HTML 代码未经过优化。

from flask import Flask, render_template  # Flask is the class within the flask library
from flask import request, redirect


user_id = int(0)
app = Flask(__name__)  # Instance of the object Flask. __name__: this  gets value of name of python script


@app.route('/', methods=["GET", "POST"])  # login page
def login():
    if request.method == "POST":
        global user_id
        user_id = request.form['userid']
        print(user_id)
    return render_template("login.html")


@app.route('/home/')  # This the URL i.e. home page
def home():
    return render_template("home.html", value=user_id)

if __name__ == "__main__":
    app.run(debug=True)

登录页面的HTML代码。

    <!DOCTYPE html>
<html>
  <head>
      <title>Recommender System App</title>
      <link rel="stylesheet" type="text/css"  href="{{url_for('static',filename='css/main.css')}}">
  </head>
  <body>
    <header>
      <div class="container">
        <h1 class="logo">Movie Recommender System</h1>
        <strong><nav>
          <ul class="menu">
            <a href="{{ url_for('login') }}"></a>
          </ul>
        </nav></strong>
      </div>
    </header>
    <form action="{{ url_for('login') }}" method="post">
     <div class = "Login Fields">
             <b>Username:</b>  <input type="number" placeholder="Numbers only" name='userid'>
             <p><b>Password:</b> <input type="password" placeholder="Enter Password" name= 'password' id="pwd"></p>
      &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
      <input type="submit" onclick="check(this.form)" class="button">
     </div>
        <p></p>
        <p></p>
        <div>
            <p>Test User IDs:</p>
            <li>224</li>
            <li>216</li>
            <li>681</li>
            <li>19</li>
            <li>82</li>
            <li>305</li>
            <li>44</li>
            <li>268</li>
            <p>Password: 123Swaroop</p>
        </div>
    </form>

  <script language="javascript">
    function check(form)/*function to check userid & password*/
    {
        if(form.password.value == "123Swaroop")
        {
            window.open(href = "{{ url_for('home') }}")
        }
        else
        {
            alert("Wrong Password or User Id")/*displays error message*/
        }
    }
   </script>
  </body>
</html>

主页的HTML代码:

<!DOCTYPE html>
<html>
  <head>
      <title>Home</title>
      <link rel="stylesheet" type="text/css"  href="{{url_for('static',filename='css/main.css')}}">
  </head>
    <body>
        <header>
            <div class="container">
            <h1 class="logo">Welcome User: {{ value }}</h1>
        <strong><nav>
            <ul class="menu">
            <a href="{{ url_for('home') }}"></a>
            </ul>
        </nav></strong>
            </div>
        </header>
        <div class = "home">
            <h1>Top Rated Movies</h1>
            <p>This is test website</p>
        </div>
    </body>
</html>

1 个答案:

答案 0 :(得分:0)

您还需要在home()函数中调用全局值:

from flask import Flask, render_template, request, redirect  


user_id = int(0) 
app = Flask(__name__)  

@app.route('/', methods=["GET", "POST"])
def login():
    if request.method == "POST":
        global user_id
        user_id = request.form['userid']
        print(user_id)
    return render_template("login.html")


@app.route('/home/')  
def home():
    global user_id
    return render_template("home.html", value=user_id)

if __name__ == "__main__":
    app.run(debug=True)

但是,使用全局变量is usually considered bad practice所以你也可以考虑这样的事情:

from flask import Flask, render_template, request, redirect  

    app = Flask(__name__)  

    @app.route('/', methods=["GET", "POST"])
    def login():
        return render_template("login.html")

    def get_user_id():
        try:
            if request.method == "POST":
                user_id = request.form['userid']
                return user_id
            else:
                # Handle error or do something else
        except:
            # Handle error or do something else

    @app.route('/home/')  
    def home():
        try:
            return render_template("home.html", value=get_user_id())
        except:
            # Handle error or do something else

    if __name__ == "__main__":
        app.run(debug=True)