javascript - 使用 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,但没有成功:(
我很感激帮助。
解决方案
由于您正在实施用户身份验证,因此您可以使用 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>'
推荐阅读
- javascript - 后期输出的差异
- dom - Puppeteer 的 `page.content()` 总是使用 UTF-8 还是页面特定的字符集?
- javascript - 如何对组件进行引用并监听外部点击?
- ios - JavaScript 桥接 - 替代 window.webkit.messageHandlers.handlerNameHere.postMessage()
- amazon-web-services - 使用 aws 命令行显示红移查询
- pandas - 将函数应用于多索引数据帧时,如何使值和索引的长度相等?
- php - 在 Laravel 签名 URL 中使用 Spatie/laravel-url-signer 包抛出 403 错误并带有附加参数
- javascript - 如何动态加载页面内容
- laravel - 我如何在资源控制器中创建额外的路由?
- ios - 如何调试 iOS Cordova 插件的加载?