操作环境:VSCode配置的虚拟环境,含pymssql,Flesk.
问题描述:目前存在两个界面(Login和Customer),Login是用户登陆界面,包含用户名 ,密码和身份。经过SQL验证后,已实现用户登陆操作。但是,进入Customer界面,想要完成查询用户信息的操作失败。
思路:我试图沿用登陆界面的用户名username)。即登陆界面存储session['username']=username。在顾客界面获取username=session.get('username')。但是,使用改操作失败,以username为切入点进行查询的操作失败,系统反馈返回的用户名为空,不可获取用户信息。然而,只要把username固定为'customer1'(写死用户名),就可以得到用户信息。
期望:不要固定'username' ,要灵活,后续会有不同的用户登陆,查询不同用户的信息,要如何解决这一问题?
Flesk顾客界面沿用登陆界面的username失败的解决方案
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
36条回答 默认 最新
关注获得0.15元问题酬金 应该是session的逻辑写错了,如果改不出来,可以考虑使用本地文件或者是系统环境变量来存,下面是示例:
好的,我来为您提供一种使用本地文件或环境变量保存用户名的示例代码。这个方法可以让您的应用程序更加灵活和安全。
首先,您可以选择使用本地文件保存用户名。这里我们假设用户名保存在一个名为
user_credentials.txt的文件中:import os # 登录视图函数 @app.route('/login', methods=['POST']) def login(): username = request.form['username'] password = request.form['password'] # 验证用户名和密码是否正确 if is_valid_user(username, password): save_username(username) return redirect(url_for('customer')) else: return render_template('login.html', error='Invalid username or password') # 保存用户名到文件 def save_username(username): with open('user_credentials.txt', 'w') as f: f.write(username) # 从文件中读取用户名 def get_username(): try: with open('user_credentials.txt', 'r') as f: return f.read().strip() except FileNotFoundError: return None # 客户视图函数 @app.route('/customer') def customer(): username = get_username() if username: # 使用 username 查询用户信息 user_info = get_user_info(username) return render_template('customer.html', user_info=user_info) else: return redirect(url_for('login'))另一种方式是使用环境变量保存用户名。这种方式更加安全,因为环境变量不会被检查到代码中:
import os # 登录视图函数 @app.route('/login', methods=['POST']) def login(): username = request.form['username'] password = request.form['password'] # 验证用户名和密码是否正确 if is_valid_user(username, password): save_username(username) return redirect(url_for('customer')) else: return render_template('login.html', error='Invalid username or password') # 保存用户名到环境变量 def save_username(username): os.environ['CURRENT_USER'] = username # 从环境变量中读取用户名 def get_username(): return os.getenv('CURRENT_USER') # 客户视图函数 @app.route('/customer') def customer(): username = get_username() if username: # 使用 username 查询用户信息 user_info = get_user_info(username) return render_template('customer.html', user_info=user_info) else: return redirect(url_for('login'))无论您选择使用本地文件还是环境变量,在这两种方式中,登录成功后您都会将用户名保存下来,在进入客户界面时从保存的位置读取用户名,并使用该用户名查询用户信息。
这种方式可以让您的应用程序更加灵活和安全,因为用户名不会直接存储在 Flask 的 session 中,而是存储在本地文件或环境变量中。如果您有任何其他问题,欢迎继续与我交流。
评论 打赏 举报解决 1无用