en
Feedback
Python | Вопросы собесов

Python | Вопросы собесов

Open in Telegram

📈 Analytical overview of Telegram channel Python | Вопросы собесов

Channel Python | Вопросы собесов (@python_easy_ru) in the Russian language segment is an active participant. Currently, the community unites 13 104 subscribers, ranking 9 745 in the Technologies & Applications category and 50 714 in the Russia region.

📊 Audience metrics and dynamics

Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 13 104 subscribers.

According to the latest data from 09 June, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -53 over the last 30 days and by -3 over the last 24 hours, overall reach remains high.

  • Verification status: Not verified
  • Engagement rate (ER): The average audience engagement rate is 8.62%. Within the first 24 hours after publication, content typically collects 5.62% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 1 129 views. Within the first day, a publication typically gains 737 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 4.
  • Thematic interests: Content is focused on key topics such as ставь, модуль, строка, docker, alice.

📝 Description and content policy

The author describes the resource as a platform for expressing subjective opinions:
Cайт: easyoffer.ru Реклама: @easyoffer_adv ВП: @easyoffer_vp Тесты t.me/+20tRfhrwPpM4NDQy Задачи t.me/+nsl4meWmhfQwNDVi Вакансии t.me/+cXGKkrOY2-w3ZTky

Thanks to the high frequency of updates (latest data received on 10 June, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.

13 104
Subscribers
-324 hours
-137 days
-5330 days
Posts Archive
🤔 Расскажи о методах add , mul , sub , truediv? Методы add, mul, sub и truediv являются специальными методами (или "магическими методами"), которые позволяют объектам пользовательских классов взаимодействовать с операциями сложения, умножения, вычитания и деления соответственно. Эти методы обеспечивают удобную и интуитивно понятную интеграцию пользовательских классов с арифметическими операциями Python. 🟠Метод add Используется для реализации оператора сложения (+). Он вызывается, когда используется оператор + между двумя объектами.
class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)

    def __repr__(self):
        return f"Vector({self.x}, {self.y})"

# Использование
v1 = Vector(1, 2)
v2 = Vector(3, 4)
v3 = v1 + v2
print(v3)  # Вывод: Vector(4, 6)
🟠Метод mul Используется для реализации оператора умножения (*). Он вызывается, когда используется оператор * между двумя объектами.
class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __mul__(self, scalar):
        return Vector(self.x * scalar, self.y * scalar)

    def __repr__(self):
        return f"Vector({self.x}, {self.y})"

# Использование
v = Vector(1, 2)
v2 = v * 3
print(v2)  # Вывод: Vector(3, 6)
🟠Метод sub Используется для реализации оператора вычитания (-). Он вызывается, когда используется оператор - между двумя объектами.
class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __sub__(self, other):
        return Vector(self.x - other.x, self.y - other.y)

    def __repr__(self):
        return f"Vector({self.x}, {self.y})"

# Использование
v1 = Vector(5, 7)
v2 = Vector(2, 3)
v3 = v1 - v2
print(v3)  # Вывод: Vector(3, 4)
🟠Метод truediv Используется для реализации оператора деления (/). Он вызывается, когда используется оператор / между двумя объектами.
class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __truediv__(self, scalar):
        return Vector(self.x / scalar, self.y / scalar)

    def __repr__(self):
        return f"Vector({self.x}, {self.y})"

# Использование
v = Vector(6, 8)
v2 = v / 2
print(v2)  # Вывод: Vector(3.0, 4.0)
Ставь 👍 и забирай 📚 Базу знаний

🧠 Machine Learning — авторский канал, где собрана вся база по ИИ и машинному обучению. Senior разработчик AI-алгоритмов и ав
+5
🧠 Machine Learning — авторский канал, где собрана вся база по ИИ и машинному обучению. Senior разработчик AI-алгоритмов и автономных агентов, разбирает гайды, редкую литературу и код топовых моделей машинного обучения и искусственного интеллекта. В 2025 году ИИ выйдет на совершенно новый уровень тот, кто не успеет за прогрессом - отстанет, а кто разберется - сорвет куш. Стоит подписаться: t.me/ai_machinelearning_big_data

🤔 Для чего подходят асинхронные операции? 1. Асинхронные операции подходят для задач с высокой задержкой: сетевые запросы, доступ к базам данных, ввод/вывод файлов. 2. Они повышают производительность за счёт параллельного выполнения задач, не блокируя основной поток. 3. Особенно полезны для приложений с большим числом одновременно обслуживаемых клиентов (например, веб-серверы). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Расскажи о методах len и abs ? Методы __len__ и abs являются специальными методами (или "магическими методами"), которые позволяют объектам классов взаимодействовать с встроенными функциями и операциями языка. Эти методы обеспечивают удобную и интуитивно понятную интеграцию пользовательских классов с стандартными операциями Python. 🚩Метод len Используется для определения длины объекта. Он должен возвращать количество элементов в объекте. Позволяет объектам взаимодействовать с встроенной функцией len().
class MyCollection:
    def __init__(self, items):
        self.items = items

    def __len__(self):
        return len(self.items)

# Использование
my_collection = MyCollection([1, 2, 3, 4, 5])
print(len(my_collection))  # Вывод: 5
🚩Метод abs Используется для вычисления абсолютного значения объекта. Он должен возвращать абсолютное значение объекта. Позволяет объектам взаимодействовать с встроенной функцией abs().
class MyNumber:
    def __init__(self, value):
        self.value = value

    def __abs__(self):
        return abs(self.value)

# Использование
my_number = MyNumber(-10)
print(abs(my_number))  # Вывод: 10
🚩ПреимуществаИнтеграция с встроенными функциями Методы len и abs позволяют пользовательским объектам взаимодействовать с встроенными функциями Python, что делает их использование более интуитивно понятным и удобным. ➕Полиморфизм Эти методы позволяют использовать объекты классов с функциями и операциями, предназначенными для стандартных типов данных. ➕Читаемость кода Использование стандартных функций len() и abs() для пользовательских объектов делает код более понятным и читабельным.
import math

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __len__(self):
        return 2  # Вектор на плоскости всегда имеет два компонента

    def __abs__(self):
        return math.sqrt(self.x**2 + self.y**2)  # Длина (модуль) вектора

    def __repr__(self):
        return f"Vector({self.x}, {self.y})"

# Использование
v = Vector(3, 4)
print(len(v))  # Вывод: 2
print(abs(v))  # Вывод: 5.0
Ставь 👍 и забирай 📚 Базу знаний

🤔 В чём суть проекта Celery? Предоставляет систему для распределённого выполнения фоновых задач. 1. Работает с брокерами сообщений (Redis, RabbitMQ) для передачи задач. 2. Позволяет распределять обработку задач между несколькими рабочими процессами (workers). 3. Используется для автоматизации долгих или повторяющихся операций. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое деструктор класса ? Это специальный метод, который вызывается автоматически при уничтожении объекта класса. Используются для выполнения завершающих действий, таких как освобождение ресурсов, закрытие файлов, освобождение памяти и выполнение других операций очистки перед тем, как объект будет окончательно удалён из памяти. 🚩Деструкторы Определяется с помощью метода __del__. Этот метод вызывается, когда объект становится недоступным для использования и должен быть удалён сборщиком мусора.
class Person:
    def __init__(self, name):
        self.name = name
        print(f"{self.name} is created")

    def __del__(self):
        print(f"{self.name} is deleted")

# Создание экземпляра класса Person
person1 = Person("Alice")

# Удаление ссылки на объект
del person1

# Пример с автоматическим вызовом деструктора при завершении программы
person2 = Person("Bob")
🚩Основные функции 🟠Освобождение ресурсов Используется для освобождения ресурсов, таких как память, файловые дескрипторы, сетевые соединения и другие. 🟠Выполнение завершающих действий Может выполнять любые завершающие действия, которые необходимо выполнить перед удалением объекта. 🟠Поддержание корректности программы Помогает избежать утечек памяти и других ресурсов, обеспечивая корректное завершение работы программы. 🚩Особенности 🟠Неопределённое время вызова Сборщик мусора управляет временем жизни объектов, поэтому точное время вызова деструктора не всегда определено. 🟠Не вызывается для циклических ссылок Деструкторы не вызываются для объектов, участвующих в циклических ссылках. Для таких случаев рекомендуется использовать модуль weakref.
import weakref

class Node:
    def __init__(self, name):
        self.name = name
        self.next = None
        print(f"{self.name} is created")

    def __del__(self):
        print(f"{self.name} is deleted")

# Создание узлов
node1 = Node("Node1")
node2 = Node("Node2")

# Создание циклической ссылки
node1.next = node2
node2.next = node1

# Удаление узлов (циклическая ссылка предотвратит вызов деструкторов)
del node1
del node2

# Использование слабых ссылок для предотвращения утечек памяти
node1 = Node("Node1")
node2 = Node("Node2")
node1.next = weakref.ref(node2)
node2.next = weakref.ref(node1)

# Удаление узлов (слабые ссылки позволят вызвать деструкторы)
del node1
del node2
Ставь 👍 и забирай 📚 Базу знаний

🤔 Для чего можно использовать Celery? 1. Это инструмент для выполнения задач в фоновом режиме. 2. Используется для отправки уведомлений, обработки данных, построения отчётов и выполнения длительных операций вне основного потока. 3. Поддерживает планирование задач и распределённую обработку через брокеры, такие как RabbitMQ или Redis. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое конструктор класса ? Это специальный метод, который вызывается при создании нового экземпляра класса. В языках ООП конструкторы используются для инициализации объектов, устанавливая начальные значения атрибутов и выполняя любые необходимые действия при создании экземпляра. 🚩Конструктор Называется __init__. Этот метод вызывается автоматически при создании нового объекта класса и используется для инициализации атрибутов объекта.
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def display(self):
        print(f"Name: {self.name}, Age: {self.age}")

# Создание экземпляра класса Person
person1 = Person("Alice", 30)
person1.display()  # Вывод: Name: Alice, Age: 30

person2 = Person("Bob", 25)
person2.display()  # Вывод: Name: Bob, Age: 25
🚩Основные функции 🟠Инициализация атрибутов Инициализирует атрибуты объекта начальными значениями. 🟠Выполнение необходимой логики Может выполнять любые действия, необходимые при создании объекта (например, проверка входных данных). 🟠Управление ресурсами Может выполнять действия по управлению ресурсами, такие как открытие файлов или подключение к базе данных. 🚩Перегрузка Перегрузка конструктора не поддерживается напрямую, но можно использовать аргументы по умолчанию или конструкцию args и kwargs для имитации перегрузки.
#include <iostream>
using namespace std;

class Person {
public:
    string name;
    int age;

    // Конструктор по умолчанию
    Person() {
        name = "Unknown";
        age = 0;
    }

    // Конструктор с параметрами
    Person(string n, int a) {
        name = n;
        age = a;
    }

    void display() {
        cout << "Name: " << name << ", Age: " << age << endl;
    }
};

int main() {
    Person person1;
    person1.display();  // Вывод: Name: Unknown, Age: 0

    Person person2("Alice", 30);
    person2.display();  // Вывод: Name: Alice, Age: 30

    return 0;
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое async? Это ключевое слово, используемое для создания асинхронных функций, которые работают в неблокирующем режиме. 1. Асинхронные операции позволяют выполнять другие задачи, пока ожидается завершение медленных операций, таких как запросы к сети или доступ к файлам. 2. Async используется с await для управления асинхронным кодом. Ставь 👍 и забирай 📚 Базу знаний

🤔 Когда нельзя линеаризовать ? Это процесс определения порядка разрешения методов (Method Resolution Order, MRO), который используется для поиска методов и атрибутов в иерархии классов при множественном наследовании. 🚩Когда нельзя линеаризовать иерархию классов 🟠Несоответствие принципам C3-линеаризации Python использует алгоритм C3-линеаризации для определения MRO. Если иерархия классов не соответствует принципам C3-линеаризации, то линеаризация невозможна. 🟠Конфликтные зависимости Конфликты возникают, когда два или более родительских класса содержат методы или атрибуты с одинаковыми именами, и порядок их разрешения не может быть однозначно определён. 🟠Несовместимые суперклассы Если классы в иерархии имеют несовместимые или пересекающиеся зависимости, это может сделать линеаризацию невозможной.
class A:
    pass

class B(A):
    pass

class C(A):
    pass

class D(B, C):
    pass
🚩Как определяется Python использует C3-линеаризацию для определения порядка разрешения методов. Этот алгоритм соблюдает порядок наследования классов, учитывая при этом принципы монотонности и консистентности.
class A:
    def method(self):
        print("A")

class B(A):
    def method(self):
        print("B")

class C(A):
    def method(self):
        print("C")

class D(B, C):
    pass

d = D()
d.method()  # Вывод: B
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое HTTP и HTTPS? 1. HTTP (HyperText Transfer Protocol): протокол передачи данных между клиентом и сервером, передаёт данные в открытом виде. 2. HTTPS: расширение HTTP, использующее шифрование через SSL/TLS для защиты передаваемых данных. 3. HTTPS обеспечивает конфиденциальность, целостность данных и аутентификацию сервера. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое проблема наследования ? Наследование является мощным механизмом в ООП, но оно также может привести к ряду проблем, которые следует учитывать при проектировании и разработке программного обеспечения. Вот основные проблемы, связанные с наследованием: 🚩Основные проблемы 🟠Жёсткая связь (Tight Coupling) Классы-наследники зависят от родительских классов. Изменения в родительских классах могут потребовать изменений в классах-наследниках. Если метод в родительском классе изменяет свою сигнатуру или поведение, все классы-наследники должны быть проверены и, возможно, изменены. Решение: Использование композиции вместо наследования, когда это возможно. 🟠Проблема повторного использования (Fragile Base Class Problem) Изменения в базовом классе могут непредсказуемо повлиять на поведение классов-наследников. Добавление нового метода в базовый класс может конфликтовать с существующим методом в классе-наследнике. Решение: Ограничение изменений в базовом классе, тщательное проектирование и тестирование. 🟠Проблемы с множественным наследованием Может привести к конфликтам имен методов и атрибутов, а также к сложности разрешения порядка вызовов методов (MRO — Method Resolution Order). Если два родительских класса имеют методы с одинаковыми именами, класс-наследник может неясно указывать, какой метод использовать. Решение: Использование интерфейсов (в языках, поддерживающих интерфейсы) или композиций. В Python использовать миксины. 🟠Избыточность интерфейсов Классы-наследники наследуют все методы и атрибуты родительских классов, даже если они не нужны. Класс-наследник может быть перегружен ненужными методами и свойствами, которые ему не требуются. Решение: Использование композиции для включения только нужных функциональностей. 🟠Нарушение инкапсуляции Классы-наследники могут получить доступ к защищённым (protected) и приватным (private) членам родительского класса, что может нарушить инкапсуляцию. Класс-наследник может изменить состояние родительского класса, вызывая неожиданные побочные эффекты. Решение: Строгое следование принципам инкапсуляции, использование методов доступа (геттеров и сеттеров).
class A:
    def method(self):
        print("Method from class A")

class B:
    def method(self):
        print("Method from class B")

class C(A, B):
    pass

c = C()
c.method()  # Вывод: Method from class A (MRO выбрал метод из класса A)
🚩Решение проблем наследования 🟠Композиция вместо наследования Предлагает включение объектов других классов в качестве членов, предоставляя больше гибкости и меньшую связанность по сравнению с наследованием.
      class Engine:
       def start(self):
           print("Engine started")

   class Car:
       def __init__(self):
           self.engine = Engine()

       def start(self):
           self.engine.start()
           print("Car started")

   car = Car()
   car.start()
   
🟠Использование интерфейсов и абстрактных классов Могут помочь определить строгие контракты для классов-наследников без предоставления реализации. 🟠Миксины Это классы, которые предназначены для предоставления дополнительной функциональности через множественное наследование, но они не предназначены для инстанцирования напрямую. Ставь 👍 и забирай 📚 Базу знаний

🤔 Чем хорош FastAPI? 1. Высокая производительность: использует Starlette и Pydantic, обеспечивая быстрый отклик. 2. Асинхронность: поддерживает async/await для обработки множества запросов одновременно. 3. Автогенерация документации: автоматически создаёт OpenAPI-спецификации и Swagger UI. 4. Удобство валидации: встроенная поддержка проверки данных. Ставь 👍 и забирай 📚 Базу знаний

🤔 Расскажи о методах enter и exit ? Методы __enter__ и exit являются частью протокола менеджера контекста. Они позволяют объектам определять поведение в контексте оператора with. Эти методы обеспечивают безопасное и автоматическое управление ресурсами, такими как файлы, сетевые соединения и другие объекты, которые требуют явного открытия и закрытия. 🚩Протокол менеджера контекста 🟠__enter__(self) Выполняется в начале блока with и возвращает объект, который будет присвоен переменной, указанной после as. 🟠__exit__(self, exc_type, exc_value, traceback) Выполняется в конце блока with, независимо от того, произошло исключение или нет. Он используется для очистки и освобождения ресурсов.
class ManagedResource:
    def __enter__(self):
        print("Entering the context")
        return self

    def __exit__(self, exc_type, exc_value, traceback):
        print("Exiting the context")
        if exc_type:
            print(f"Exception type: {exc_type}")
            print(f"Exception value: {exc_value}")
            print(f"Traceback: {traceback}")
        return True  # True указывает на то, что исключение было обработано

# Использование
with ManagedResource() as resource:
    print("Inside the context")

print("Outside the context")
Пример управления файлом с использованием менеджера контекста
class FileManager:
    def __init__(self, filename, mode):
        self.filename = filename
        self.mode = mode

    def __enter__(self):
        self.file = open(self.filename, self.mode)
        return self.file

    def __exit__(self, exc_type, exc_value, traceback):
        self.file.close()
        if exc_type:
            print(f"Exception type: {exc_type}")
            print(f"Exception value: {exc_value}")
            print(f"Traceback: {traceback}")
        return True

# Использование
with FileManager("example.txt", "w") as f:
    f.write("Hello, World!")

print("File operation completed")
Ставь 👍 и забирай 📚 Базу знаний

🤔 Как работает хеш-таблица? Хеш-таблица хранит данные в формате ключ-значение, используя хеш-функцию для быстрого доступа. 1. Хеш-функция преобразует ключ в индекс массива. 2. Если возникают коллизии (два ключа дают одинаковый хеш), используются методы разрешения коллизий, например, цепочки (chaining) или открытая адресация. 3. В среднем сложность доступа — O(1), но может быть хуже при большом количестве коллизий. Ставь 👍 и забирай 📚 Базу знаний

🤔 Расскажи о методах getitem и setitem и delitem? Методы getitem, setitem и delitem являются специальными методами, которые позволяют пользовательским объектам взаимодействовать с операциями получения, установки и удаления элементов по индексу или ключу. Эти методы обеспечивают интеграцию пользовательских классов с операциями индексирования, делая их поведение аналогичным встроенным типам данных, таким как списки и словари. 🚩Метод getitem Используется для получения значения элемента по индексу или ключу. Он вызывается, когда используется оператор индексирования (obj[key]).
class CustomList:
    def __init__(self, items):
        self.items = items

    def __getitem__(self, index):
        return self.items[index]

# Использование
my_list = CustomList([1, 2, 3, 4, 5])
print(my_list[2])  # Вывод: 3
🚩Метод titem и delit Используется для установки значения элемента по индексу или ключу. Он вызывается, когда используется оператор присваивания с индексированием (obj[key] = value).
class CustomList:
    def __init__(self, items):
        self.items = items

    def __setitem__(self, index, value):
        self.items[index] = value

# Использование
my_list = CustomList([1, 2, 3, 4, 5])
my_list[2] = 10
print(my_list.items)  # Вывод: [1, 2, 10, 4, 5]
🚩Метод delitem Используется для удаления элемента по индексу или ключу. Он вызывается, когда используется оператор удаления с индексированием (del obj[key]).
class CustomList:
    def __init__(self, items):
        self.items = items

    def __delitem__(self, index):
        del self.items[index]

# Использование
my_list = CustomList([1, 2, 3, 4, 5])
del my_list[2]
print(my_list.items)  # Вывод: [1, 2, 4, 5]
Полный пример пользовательского класса
class CustomDict:
    def __init__(self):
        self.items = {}

    def __getitem__(self, key):
        return self.items[key]

    def __setitem__(self, key, value):
        self.items[key] = value

    def __delitem__(self, key):
        del self.items[key]

    def __repr__(self):
        return f"{self.items}"

# Использование
my_dict = CustomDict()
my_dict['a'] = 1
my_dict['b'] = 2
print(my_dict['a'])  # Вывод: 1
print(my_dict)       # Вывод: {'a': 1, 'b': 2}
del my_dict['a']
print(my_dict)       # Вывод: {'b': 2}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие инструменты для виртуального окружения используются? 1. venv: встроенный инструмент Python для создания изолированных окружений. 2. virtualenv: популярное расширение с дополнительными функциями для управления виртуальными окружениями. 3. conda: используется в научных вычислениях и анализе данных, управляет не только Python, но и библиотеками C/C++. 4. Poetry: создаёт и управляет зависимостями через автоматическое создание виртуальных окружений. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое JWT? Это компактный, URL-безопасный способ представления заявок между двумя сторонами. JWT широко используется для аутентификации и авторизации в веб-приложениях. 🚩Основные характеристики 🟠Компактность JWT — это компактный формат, который легко передавать через URL, заголовки HTTP или внутри тела запроса. 🟠Самодостаточность JWT содержит всю необходимую информацию для проверки подлинности, что избавляет от необходимости обращаться к базе данных при каждом запросе. 🟠Безопасность JWT может быть подписан с использованием алгоритмов HMAC или RSA, что обеспечивает целостность и подлинность данных. 🚩Структура 🟠Header (Заголовок) Заголовок обычно содержит два поля Тип токена (typ), который для JWT равен "JWT". Алгоритм подписи (alg), например, HMAC SHA256 или RSA.
{
  "alg": "HS256",
  "typ": "JWT"
}
🟠Payload (Полезная нагрузка) Полезная нагрузка содержит набор заявок (claims). Заявки бывают трех типов: Registered claims (Зарегистрированные заявки): Зарезервированные ключи, такие как iss (issuer), exp (expiration time), sub (subject), и aud (audience). Public claims (Публичные заявки): Пользовательские ключи, определенные в спецификации IANA JSON Web Token Registry или согласованные между сторонами. Private claims (Частные заявки): Пользовательские ключи, уникальные для конкретного приложения.
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}
🟠Signature (Подпись) Подпись создается путем кодирования заголовка и полезной нагрузки с использованием Base64URL и их объединения. Затем применяется алгоритм, указанный в заголовке, к объединенной строке с использованием секретного ключа.
HMACSHA256(
  base64UrlEncode(header) + "." + base64UrlEncode(payload),
  secret
)
🚩Пример использования 1⃣Установка библиотеки
pip install pyjwt
2⃣Создание JWT
import jwt
import datetime

# Секретный ключ
secret_key = "your-256-bit-secret"

# Заголовок
header = {
    "alg": "HS256",
    "typ": "JWT"
}

# Полезная нагрузка
payload = {
    "sub": "1234567890",
    "name": "John Doe",
    "admin": True,
    "exp": datetime.datetime.utcnow() + datetime.timedelta(seconds=30)  # Время истечения действия токена
}

# Создание JWT
token = jwt.encode(payload, secret_key, algorithm="HS256", headers=header)
print(token)
3⃣Декодирование JWT
import jwt

# Секретный ключ
secret_key = "your-256-bit-secret"

# Декодирование JWT
try:
    decoded_payload = jwt.decode(token, secret_key, algorithms=["HS256"])
    print(decoded_payload)
except jwt.ExpiredSignatureError:
    print("Signature has expired")
except jwt.InvalidTokenError:
    print("Invalid token")
Ставь 👍 и забирай 📚 Базу знаний

– Помощь с pet-проектом – Составление roadmap – Общая консультация – Проведение код-ревью и mock-собеседования – Помощь с тру
– Помощь с pet-проектом – Составление roadmap – Общая консультация – Проведение код-ревью и mock-собеседования – Помощь с трудоустройством Все это и многое другое может Ментор. Он обеспечит вам необходимый boost, ускорит и упростит вход в IT. 🔥 Здесь размещен список менторов, и многие из них предлагают бесплатную первую консультацию