Создание SET строк в Redis, но возвращение целых чисел
Заметил, что когда я пытаюсь добавить список строк к моему redis_instance в качестве членов SET, когда я пытаюсь получить элементы в этом SET, я вижу только целые числа. Как я понял из документации, если бы я, например, имел набор, содержащий:
'Fred', 'Emmanuel', 'Marcus Aurelius'
Если я верну весь SET, предполагая, что ключ для набора - 'newSet', выполнив эту команду:
SMEMBERS pairs
Я должен увидеть список всех членов указанного состояния, вместо этого я получаю вот такой ответ:
1) "32"
2) "39"
3) "44"
4) "65"
5) "69"
6) "70"
7) "77"
8) "91"
9) "93"
10) "97"
11) "99"
12) "100"
13) "101"
14) "105"
15) "108"
16) "109"
17) "110"
18) "114"
19) "115"
20) "117"
Вот код, который я использую для создания и добавления к указанному набору:
@api_view(['GET', 'POST'])
def manage_items(request, *args, **kwargs):
if request.method == 'GET':
items = []
count = 0
for elem in redis_instance.smembers("pairs"):
items.append(elem.decode("utf-8"))
count += 1
response = {
'count': count,
'msg': f"Found {count} items.",
'items': items
}
return Response(response, status=200)
elif request.method == 'POST':
new_users = request.body
for i in range(0, len(new_users)):
redis_instance.sadd('pairs', bytes(str(new_users[i]), "utf-8"))
response = {
'msg': f'set contains: {new_users}'
}
return Response(response, 201)
Есть идеи, что происходит?
Я не очень хорошо знаком с python, но вы уверены, что правильно выполнили работу с request.body
? Поскольку я знаю, что вы должны были преобразовать request.body
в str
, а затем в массив и затем выполнить итерацию над ним. Но вы просто храните request.body
, массив байтов, в переменной и выполняете итерацию по этому массиву, преобразуя каждый элемент в строку. Таким образом, вы сохраняете каждый элемент байтового массива request.body
в Redis.