首页 > 解决方案 > 使用 cookie 和 Flask 实现简单的登录页面

问题描述

我知道这可能是一个重复的问题,但我已经阅读了很多文章。我有想保存在 cookie 中并在其他 HTML 页面中使用的用户名。我只想将用户名打印在 StudentPage 和其他页面上。

这是 app.py

@app.route('/StudentLogin', methods=['GET', 'POST'])
def StudentLogin():

    # res = make_response(render_template("StudentLogin.html"))
    # res.set_cookie('username', request.form.get("username"))
    # return res

    username = request.form.get("username")
    password = request.form.get("password")

    if (username == 'Atheer' and password == '10') or (username == 'username' and password == 'password') or (username == 'Yahya' and password == '30'):
        # studentname = LoginTable(username, password)
        # db.session.add(studentname)
        # db.session.commit()
        return redirect(url_for('StudentPage'))
    else:
        return render_template("StudentLogin.html")

@app.route('/StudentPage', methods=['GET', 'POST'])
def StudentPage():
    # username = request.cookies.get('somecookiename')
    # return '<h1>welcome ' + username + '</h1>'

    if request.method == 'POST':
        student = studentAnswerTable(request.form['studentMCQquestion'], request.form['InstructorMCQanswer'], request.form['ISOptionA'], request.form['ISOptionB'], request.form['ISOptionC'], request.form['studentMCQanswer'])
        db.session.add(student)
        db.session.commit()

    return render_template("StudentPage.html", quickQuizQuestions=quickQuizQuestions.query.order_by(-quickQuizQuestions.id).limit(1).all())

这是 StudentLogin.html

<script>
function setCookie(username,cvalue) {
  document.cookie =  cname + "=" + document.getElementById("username").value + ";" ;
}

function getCookie(cname) {
  var name = cname + "=";
  var decodedCookie = decodeURIComponent(document.cookie);
  var ca = decodedCookie.split(';');
  for(var i = 0; i < ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0) == ' ') {
      c = c.substring(1);
    }
    if (c.indexOf(name) == 0) {
      return c.substring(name.length, c.length);
    }
  }
  return "";
}

function checkCookie() {
  var user=getCookie("username");
}

    function validate() {
    var username = document.getElementById("username").value;
    var password = document.getElementById("password").value;
        var valid = false;
        var unArray = ["Atheer", "username", "Yahya"];
        var pwArray = ["10", "password", "30"];
        for (var i = 0; i < unArray.length; i++) {
            if ((username == unArray[i]) && (password == pwArray[i])) {
                valid = true;
                break;
            }
        }
        if (valid)
        {
        window.alert('Hi ' +username + ', Login was successful');
        window.location.href = "StudentPage.html"
        }
        else
        {
        window.alert('Login failed, please try again');
        window.location.href = "StudentLogin.html"
        }
return false;
    }

    </script>

</head>

<body onload="checkCookie()">
<form action = "{{ request.path }}" method = "POST" name="myform">
<div class="container1">
<h1>Student Login </h1>

    <input type="text" placeholder="Enter Username" name="username" id="username">
      <br>
    <input type="password" placeholder="Enter Password" name="password" id="password" >
<br>
    <input class="button" type="submit" onclick="validate()" value="Submit" id="submit" name="submit">

  </div>
</form>

我尝试使用 Javascript & 从 python 文件创建 cookie,但没有成功:(

我很感激帮助。

标签: javascriptpythonhtmlflask

解决方案


由于您正在实施用户身份验证,因此您可以使用 Flask 的session(加密的 cookie)来保存和获取数据。这是来自flask-examples的一个最小示例:

from flask import session

# log in user
@app.route('/login')
def login():
    session['logged_in'] = True
    return redirect(url_for('hello'))


# protect view
@app.route('/admin')
def admin():
    if 'logged_in' not in session:
        abort(403)
    return 'Welcome to admin page.'


# log out user
@app.route('/logout')
def logout():
    if 'logged_in' in session:
        session.pop('logged_in')
    return redirect(url_for('hello'))

对于您的代码:

from flask import session

@app.route('/StudentLogin', methods=['GET', 'POST'])
def StudentLogin():

    username = request.form.get("username")
    password = request.form.get("password")
    
    session['username'] = username  # set the cookie  <---

    if (username == 'Atheer' and password == '10') or (username == 'username' and password == 'password') or (username == 'Yahya' and password == '30'):
        # studentname = LoginTable(username, password)
        # db.session.add(studentname)
        # db.session.commit()
        return redirect(url_for('StudentPage'))
    else:
        return render_template("StudentLogin.html")

@app.route('/StudentPage', methods=['GET', 'POST'])
def StudentPage():
    username = session.get('username')  # get the cookie  <---
    return '<h1>welcome ' + username + '</h1>'

推荐阅读