Ведение данных сеанса в Python Flask - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть клиент, который отправляет данные JSON на сервер.Эти данные JSON содержат значения budget и epsilon.Сервер получает данные и проверяет, является ли used_budget значением None или другими словами, является ли это первым запросом от клиента.Если это так, он инициализирует used_budget до 0,0.

Условие - каждый раз, когда клиент отправляет полезную нагрузку JSON, значение epsilon добавляется к used_budget, а значение used_budget сравнивается с budget.Если used_budget меньше budget, то сервер запрашивает базу данных и возвращает клиенту какой-либо результат, иначе сервер должен прекратить прием запросов от клиента.

Проблема : при отправке первоначального запроса от клиента инициализируется новый сеанс и добавляется epsilon.Сервер возвращает результат клиенту, как и ожидалось.НО, когда я отправляю другой запрос от клиента, вместо того, чтобы рассматривать его как тот же сеанс, сервер инициализирует новый сеанс, и значение used_budget снова устанавливается равным 0,0.Проверка состояния никогда не происходит.

Это код на стороне сервера:

class GetParams(Resource):
    def get(self):

    client_request = json.loads(list(dict(request.args).keys())[0])  # Stores the request in JSON format
    budget = client_request['budget']
    epsilon = client_request['epsilon']
    used_budget = session.get('used_budget')  # used_budget used a session variable

    # If Client sends the first request then initialize used_budget to 0.0
    if used_budget == None:
        set_used_budget()

    # Check if client has budget for sending queries for a session
    if (session['used_budget'] < float(budget)):
        session['used_budget'] = session.get('used_budget') + float(epsilon)
        result = write_file(client_request)  # Write request to file and store the returned query result
        print("used budget " + str(session['used_budget']))
        return result # Return the query result to the client
    else:
        error_message = "Budget exceeded - Cannot process queries"
        return error_message

api.add_resource(GetParams, '/data')  # Route for get()    
if __name__ == '__main__':
    app.run(port='5890', threaded=True)

Вот код на стороне клиента:

# Client sends this data in url
data = {
    'query': 'SELECT count(*) FROM accounts',
    'epsilon': '1.0',
    'budget': '2.0',
}

# Localhost url
url = 'http://127.0.0.1:5890/data'

# Client sends Get request
 session = requests.Session()    

resp= session.get(url, params=json.dumps(data))

# Client prints the data returned by the server in JSON
print(resp.json())

# Client prints the response code
print(resp)

Код работает нормально, когда язапустить его из браузера (т. е. сеансы сохраняются, когда я использую два разных браузера), но новый сеанс запускается, когда я пингую сервер с клиента с помощью IDE.Может кто-нибудь сказать мне, что я делаю не так здесь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...