Что это за структура данных? Python - PullRequest
0 голосов
/ 19 февраля 2020

Изучая Python, я следую превосходному учебнику Кори Шафера по Flask, он делает это (я извлек и обобщил его по понятным причинам):

    from folder_app import app # I did it to follow the structure and that the code is equal to the original

    s = Serializer(app.config['SECRET_KEY'], 1800) # key, seconds
    token = s.dumps({'user_id': 1}).decode('utf-8')
    s = Serializer(app.config['SECRET_KEY'])


    user_id = s.loads(token)['user_id'] # This is where I have the doubt

    print(user_id)
    print(type(s.loads(token)))

Код работает, У меня проблема в том, что, хотя, как вы можете видеть, (s.loads (token)) - это dict, я ожидал увидеть что-то вроде s.loads ({token ['user_id']}), или s.loads (token ['user_id']), или что-то в этом роде. То есть это dict но это не так. И мое сомнение заключается в том, что это исходит из более широкой концепции тех, кого они называют «pythoni c» (которых я до сих пор не видел), или это то, что происходит только в частности, как в этом случае. Кстати, https://itsdangerous.palletsprojects.com/en/1.1.x/jws/ это выглядит так: loads (self, s, salt = None, return_header = False) аргументы в скобках. Надеюсь, понятно, в чем мое сомнение:)

1 Ответ

0 голосов
/ 19 февраля 2020

Я знаю, что это не ответ за слово, а просто добавить к моему комментарию. Это пример того, как функция loads работает со словарями с модулем json. https://docs.python.org/3/library/json.html#json .loads . Он берет строку json и возвращает объект словарного типа в Python. Ваш сериализатор делает что-то подобное. Он берет строку токена и представляет ее как объект типа dict

Предполагаемый s.dumps похож на json.dumps, который дает вам строковое представление json python словарь.

import json
my_dict = json.loads('{"user_id": "Mane", "name": "Joe"}')
my_dict['user_id']

Так что вы можете просто сделать json.loads('{"user_id": "Mane", "name": "Joe"}')['user_id'], который просто соединяет операции в цепочку.

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