我有一个Python代码,它使用framework,检查admin login (login= True)是否呈现管理页面,如果admin未被记录(login= False),则重定向到登录页面。
@app.route('/admin_login', methods=['POST', 'GET'])
def admin_login():
if request.method == 'POST':
login = request.form['login']
passsword = request.form['password']
if (login == 'admin') and (passsword == 'admin_pass'):
logged = True
return redirect('/admin_page'), logged
else:
return "Wrond login and passsword!"
else:
return render_template('admin_login.html')
@app.route('/admin_page')
def admin_page():
if logged == True:
return render_template('admin_page.html')
else:
return redirect('/admin_login')但我在if logged == True: - NameError: name 'logged' is not defined中遇到了一个错误.我试图使logged全球化,但没有起到任何作用。那么我如何定义logged并在函数admin_page中使用它呢?
发布于 2020-10-28 14:25:32
您应该避免在服务器上有一个全局logged_in变量。然后,任何人将被允许使用你的网站后,成功登录!您应该使用会话变量代替。
会话数据存储在cookie之上并加密。对于这种加密,Flask应用程序需要一个定义的SECRET_KEY。会话对象也是包含键值对的字典对象.
如果您还没有得到主脚本,那么将它添加到主脚本顶部的附近:
from flask import Flask, session, redirect, url_for, escape, request, flash
app = Flask(__name__)
app.secret_key = 'any random string’然后将函数admin_login()更改为设置会话变量:
@app.route('/admin_login', methods=['POST', 'GET'])
def admin_login():
if request.method == 'POST':
login = request.form['login']
passsword = request.form['password']
if not 'logged_in' in session:
if (login == 'admin') and (passsword == 'admin_pass'):
session['logged_in'] = True
return redirect(url_for("admin_page"))
else:
flash("Wrong login and passsword!")
return render_template('admin_login.html')
else:
return redirect(url_for("admin_page"))
else:
if "logged_in" in session:
return redirect(url_for("admin_page"))
return render_template("admin_login.html")然后更改admin_page()函数以检查这个会话变量:
@app.route('/admin_page')
def admin_page():
if 'logged_in' in session:
return render_template('admin_page.html')
else:
return redirect(url_for('admin_login'))您还需要一个注销结束点才能弹出会话变量:
@app.route('/logout')
def logout():
session.pop('logged_in', None)
return redirect(url_for('index'))https://stackoverflow.com/questions/64573878
复制相似问题