У меня есть серверная часть приложения get (get), которая возвращает элемент счетчика (список).При подаче несколько раз одной и той же петиции он продолжает добавлять каждый элемент.
Функция возврата колбы должна возвращать только значения для этой петиции, а не те, которые хранятся в какой-либо локальной памяти.Devicedict1 содержит для каждого идентификатора список полей: пункт назначения, источник, цена проданного билета, программа лояльности и т. Д.Mydict8 содержит для всех записей каждого deviceid все билеты, проданные на этот deviceID.например, mydict8 [2] [12] - содержит станцию отправления для этой покупки, mydict8 [3] [12] - содержит другую станцию отправления для этой покупки и т. д.Затем я сохраняю станцию назначения и отправления в devicedict3, возвращая верхние кортежи (источник, назначение) со счетчиком для каждого идентификатора устройства, отправленного запросом get.
from flask import Flask, jsonify, abort
import csv
from flask import make_response
from collections import Counter
devicedict1 = collections.defaultdict(list)
devicedict3= collections.defaultdict(list)
mydict8 = []
with open('Salida1.csv', newline='', mode='r') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
# rows1 = list(csv_reader)
# print(len(rows1))
line_count = 0
count = 0
for row in csv_reader:
key = row[20]
devicedict1[key].append(row)
if line_count == 0:
print(f'Column names are {", ".join(row)}')
line_count += 1
app = Flask(__name__)
@app.errorhandler(404)
def not_found(error):
return make_response(jsonify({'error': 'El usuario no ha dado su permiso para dar su ID y por lo tanto esta vacio el ID'}), 404)
@app.errorhandler(401)
def not_found(error):
return make_response(jsonify({'error': 'El formato del ID es incorrecto'}), 401)
@app.route('/todo/api/v1.0/destinos/<string:destino>', methods=['GET'])
def get_destinos(destino):
count2 = len(devicedict1[destino])
for i in range(0, count2):
mydict8.append(devicedict1[destino][i])
for i in range(0, len(mydict8)):
devicedict3[i].append(mydict8[i][12])
devicedict3[i].append( mydict8[i][13])
n = 3
return (str(Counter(map(tuple, devicedict3.values())).most_common(n)))
if __name__ == '__main__':
app.run(port=50000, host='0.0.0.0')
Поэтому возвращение должно быть следующим, когда я делаю
curl -i http://10.3.4.38:50000/todo/api/v1.0/destinos/4ff70ad8e2e74f49
[(('3001', '1471'), 8), (('1471', '3001'), 5), (('3001', '1966'), 4)]
Но я повторяю эту операцию во второй раз и получаю следующие дубликаты:
curl -i http://10.3.4.38:50000/todo/api/v1.0/destinos/4ff70ad8e2e74f49
[(('3001', '1471', '3001', '1471'), 8), (('3001', '1471'), 8), (('1471', '3001', '1471', '3001'), 5)]
Я хотел бы получать один и тот же ответ каждый раз, когда спрашиваю сервер и вВторая петиция Я теряю третий кортеж значений:
('3001', '1966')