在Flask中的POST / GET请求中保持会话

时间:2019-12-27 18:12:47

标签: python post flask get

我正在使用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'))

0 个答案:

没有答案