Добавить в корзинуПозвонить
Найти в Дзене
Neoclassica IT

Как перевести данные в текст в Python. Часть 1

Передать объект с помощью http(s) запросу у вас не получится. Его нужно, для начала, перевести в строку. Это может быть что угодно, список из битов, ваш собственный способ сериализации объекта, но лучший вариант — перевести в JSON. С этим нам любезно поможет marshmallow. Установка: pip install marshmallow С чего начнём? Первым делом создайте схему. Вам нужно импортировать класс Scheme и создать дочерний объект — схему, например, пользователя. А потом задать поля и их значения с помощью fields. from marshmallow import Schema, fields, post_load
# post_load пригодится чуть позже
class User: # Класс пользователя, его мы и превратим в JSON
def __init__(self, id, name, email):
self.id = id
self.name = name
self.email = email
class UserScheme(Schema):
# Схема. Она говорит, как класс будет обрабатываться
id = fields.Integer()
name = fields.String()
email = fields.Email()
Отлично, заготовка есть, теперь создадим нового пользователя и превратим
Оглавление
Источник картинки: nuancesprog.ru
Источник картинки: nuancesprog.ru

Передать объект с помощью http(s) запросу у вас не получится. Его нужно, для начала, перевести в строку. Это может быть что угодно, список из битов, ваш собственный способ сериализации объекта, но лучший вариант — перевести в JSON. С этим нам любезно поможет marshmallow.

Установка: pip install marshmallow

С чего начнём?

Первым делом создайте схему. Вам нужно импортировать класс Scheme и создать дочерний объект — схему, например, пользователя. А потом задать поля и их значения с помощью fields.

from marshmallow import Schema, fields, post_load
# post_load пригодится чуть позже

class User: # Класс пользователя, его мы и превратим в JSON
def __init__(self, id, name, email):
self.id = id
self.name = name
self.email = email

class UserScheme(Schema):
# Схема. Она говорит, как класс будет обрабатываться
id = fields.Integer()
name = fields.String()
email = fields.Email()


Отлично, заготовка есть, теперь создадим нового пользователя и превратим его в набор букв, с помощью метода
dump. Но, первым делом, добьём код схемы.

user = User(123456, "Mark", "example@gmail.com") # Создаём пользователя
scheme = UserScheme() # Создаём схему
res = scheme.dump(user) # {'email': 'example@gmail.com', 'id': 123456, 'name': 'Mark'}

Отлично, думаю, такое можно отправлять на сервер.

Окей, а как его вернуть обратно?

Представим, что мы получили строку и у нас есть схема, что с этим всем делать? Воспользуемся методом load.

res = "{'email': 'example@gmail.com', 'id': 123456, 'name': 'Mark'}"
data = scheme.load(res)
print(data.id) # Ошибка

Выдало ошибку.
Как так? Ведь у
User точно есть id. Но load возвращает словарь, а не пользователя, что, согласитесь, неудобно. Давайте добавим ещё пару строчек кода в нашу схему.

@post_load
def make_user(self, data, **kwargs):
return User(**data)


post_load вызывается после того, как схема обработала строку и принимает в словарь, который мы получили в прошлый раз. Потом, с помощью распаковки, мы создаём нового пользователя и возвращаем его. Теперь всё должно работать.

res = "{'email': 'example@gmail.com', 'id': 123456, 'name': 'Mark'}"
new_user = scheme.load(res)
print(new_user.id) # 123456


Вот как выглядит весь код

from marshmallow import Schema, fields, post_load

class User: # Класс пользователя, его мы и превратим в JSON
def __init__(self, id, name, email):
self.id = id
self.name = name
self.email = email

# Собственно, сама схема
class UserScheme(Schema):
id = fields.Integer()
name = fields.String()
email = fields.Email()

@post_load # Теперь load возвращает тип не dict, а User
def make_user(self, data, **kwargs):
return User(**data)

user = User(123456, "Mark", "example@gmail.com") # Новый пользователь
scheme = UserScheme() # Создавать схему обязательно
res = scheme.dump(user)
print(res) # {'name': 'Mark', 'id': 123456, 'email': 'example@gmail.com'}

new_user = UserScheme().load(res) # Обрабатываем полученную строку
print(new_user.id) # 123456

Если у вас остались вопросы, обязательно пишите нам в чат, админы или более опытные прогеры с радостью ответят. Также не забудьте лайкнуть, если было полезно;)

#как перевести данные в текст Python #обучение python #python с нуля #программирование