我正在使用Flask开发Web Listener类的应用程序。该应用程序包括以下内容:搜索路线,该路线在GET或POST中接受某些输入(a),然后从数据库中检索ID(b)的列表。然后发送由原始输入(a)和ID(b)组成的POST或GET请求。
有一个侦听器路由,用于侦听任何传入的请求。该路由将被多个客户端使用。我希望他们每个人都有一个唯一的ID。在此路由上收到请求时,它将检查请求数据中的ID是否与当前客户端的ID相同。但是,这不起作用。我最初可以使用Session变量设置ID,但是当从搜索路由发送请求时,Session变量为Nulled / Cleared。我什至尝试使用Flask-Login来实现此目的,但是同样如此。在浏览器中打开URL时,我可以登录侦听器。但是,当请求发送到该请求时,它无法在当前ID和请求ID之间进行比较,因为当前ID为Null或未登录用户(如果有该请求)。
代码如下:
@users.route('/search', methods=['GET', 'POST'])
def receive():
if request.method == 'POST':
received_data = request.json
else:
received_data = dict()
received_data['some_request_data'] = request.args.get('some_request_data')
some_data = float(received_data.get('some_request_data'))
sql_query = '*SOME SQL QUERY THAT RETURNS DB ROWS*'
rows = db.session.execute(sql_query)
#converting records into a list
records = [{column: value for column, value in rowproxy.items()} for rowproxy in rows]
data = dict()
data["some_data"] = some_data
url = request.host_url
for i in range(0, len(records)):
data["requested_id"] = records[i]['user_id']
post_data = json.dumps(data)
sos = requests.post(url=url, data=post_data, headers={"Content-type": "application/json"})
result = {'result': 'success'}
return json.dumps(result)
@users.route('/setup', methods=['POST', 'GET'])
def setup():
form = SetupForm()
if form.validate_on_submit():
row = users.query.filter_by(
user_id=form.user_id.data).first()
if row:
session['USER_ID']=int(form.user_id.data)
else:
print('Login Unsuccessful. Please check USER ID')
return render_template('setup.html', form=form)
@users.route('/', methods=['GET', 'POST'])
@users.route('/listener', methods=['GET', 'POST'])
def listener():
if session.get('USER_ID') != None:
received_data = request.json
if received_data != None:
if received_data.get('requested_id') == int(session.get('USER_ID')):
print("Received Signal from",
received_data['some_data'])
socketio.emit('my event', received_data)
return render_template('listener.html')
else:
return redirect(url_for('users.setup'))