Teo*_*300 6 python variables session login flask
我正在用 Flask 编写一个小型网络应用程序。当两个用户(在同一网络下)尝试使用应用程序时,会话变量出现问题。
这是代码:
import os
from flask import Flask, request, render_template, g, session
from random import randint
def random():
session['number'] = randint(0,4)
return None
@app.route('/')
def home():
if not session.get('logged_in'):
return render_template('login.html')
else:
return check()
@app.route('/login', methods = ['GET', 'POST'])
def login():
global username
username = request.form['username']
session['logged_in'] = True
session['username'] = username
return check()
@app.route('/check', methods=['GET', 'POST'])
def check():
random()
return render_template('file.html', number = session['number'], user = session['username'])
if __name__ == "__main__":
app.secret_key = ".."
app.run(host = '0.0.0.0',port = 3134, debug=False)
Run Code Online (Sandbox Code Playgroud)
在 file.html 中有一个按钮类型“提交”,它调用 '/check' 路由。问题是当两个用户同时使用应用程序时,因为变量“编号”等于按下按钮的最后一个用户的变量“编号”......两个会话之间没有独立性。
我希望这两个用户有两个独立会话,就像他们在本地主机上使用我的应用程序一样。
小智 4
使用randint(0,4)生成数字意味着它们有时对于不同的用户来说是相同的。每次使用 uuid 时生成唯一编号:
from uuid import uuid4
def random():
session['number'] = str(uuid4())
return None
Run Code Online (Sandbox Code Playgroud)
或发电机:
import itertools
consequent_integers = itertools.count()
def random():
session['number'] = consequent_integers.next()
return None
Run Code Online (Sandbox Code Playgroud)