🤔 Как работает пакетирование библиотек?
Пакетирование — это процесс подготовки библиотеки к установке и распространению через PyPI.
Основные этапы:
- Создание структуры пакета: папки с модулями и __init__.py.
- Создание pyproject.toml или setup.py с описанием пакета.
- Сборка пакета с помощью build:
pip install build
python -m build
- В результате получается .whl и .tar.gz архив, который можно установить или загрузить на PyPI.
Пакетирование облегчает повторное использование и установку библиотек в разных проектах.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Основные этапы:
- Создание структуры пакета: папки с модулями и __init__.py.
- Создание pyproject.toml или
- Сборка пакета с помощью build:
pip install build
python -m build
- В результате получается .whl и .tar.gz архив, который можно установить или загрузить на PyPI.
Пакетирование облегчает повторное использование и установку библиотек в разных проектах.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Можно ли при вызове метода save указать какие поля изменять?
Да, в Django ORM можно указать конкретные поля для сохранения, используя параметр
🚩Как использовать `update_fields`
Пример модели
Обновляем только поле
🚩Что делает `update_fields`?
Генерирует SQL-запрос только для указанных полей, например:
🚩Когда `update_fields` полезен?
Уменьшает нагрузку на БД, так как обновляет только нужные поля.
Полезен, если нужно изменить одно поле, а не всю запись.
Избегает ненужных изменений в
🚩Ограничения `update_fields`
Нельзя использовать при создании объекта (
Не обновляет
Решение: обновить вручную:
Ставь 👍 и забирай 📚 Базу знаний
Да, в Django ORM можно указать конкретные поля для сохранения, используя параметр
update_fields в методе .save(). 🚩Как использовать `update_fields`
Пример модели
from django.db import models
class UserProfile(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField()
age = models.IntegerField()
Обновляем только поле
name, не трогая email и age user = UserProfile.objects.get(id=1)
user.name = "Новый пользователь"
user.save(update_fields=["name"]) # Обновит только поле `name`
🚩Что делает `update_fields`?
Генерирует SQL-запрос только для указанных полей, например:
UPDATE user_profile SET name = 'Новый пользователь' WHERE id = 1;
🚩Когда `update_fields` полезен?
Уменьшает нагрузку на БД, так как обновляет только нужные поля.
Полезен, если нужно изменить одно поле, а не всю запись.
Избегает ненужных изменений в
auto_now и auto_now_add полях (DateTimeField). 🚩Ограничения `update_fields`
Нельзя использовать при создании объекта (
save() с update_fields не работает для .create()). user = UserProfile(name="Alice", email="alice@example.com")
user.save(update_fields=["name"]) # ❌ Ошибка, объект ещё не в базе!
Не обновляет
auto_now-поля (DateTimeField) автоматически! updated_at = models.DateTimeField(auto_now=True) # Не обновится с `update_fields`
Решение: обновить вручную:
user.updated_at = timezone.now()
user.save(update_fields=["name", "updated_at"])
Ставь 👍 и забирай 📚 Базу знаний
🤔 В чём разница между decimal и float?
- float — тип с плавающей точкой, быстрый, но подвержен ошибкам округления из-за бинарного представления. Например: 0.1 + 0.2 != 0.3.
- decimal.Decimal — тип из модуля decimal, который сохраняет точность десятичных дробей и идеально подходит для финансовых и бухгалтерских расчётов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
- float — тип с плавающей точкой, быстрый, но подвержен ошибкам округления из-за бинарного представления. Например: 0.1 + 0.2 != 0.3.
- decimal.Decimal — тип из модуля decimal, который сохраняет точность десятичных дробей и идеально подходит для финансовых и бухгалтерских расчётов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍3🔥1
🤔 Какие есть виды файловых объектов?
В Python существует несколько типов файловых объектов, которые используются для работы с различными типами данных. Рассмотрим основные виды файловых объектов и их особенности.
🟠Текстовые файлы (`TextIOWrapper`)
Это самый распространённый тип файловых объектов. Такие файлы используются для работы с текстовыми данными и поддерживают строковые операции.
🟠Бинарные файлы (`BufferedReader`, `BufferedWriter`)
Эти файлы используются для работы с двоичными данными (изображениями, видео, аудиофайлами и т. д.).
🟠Файлы ввода-вывода в памяти (`io.StringIO`, `io.BytesIO`)
Эти объекты представляют собой файловые буферы, которые хранят данные в оперативной памяти, а не на диске.
Пример работы с
🟠Файловые объекты на основе сокетов, пайпов и других источников
Python позволяет работать с файловыми объектами, полученными из нестандартных источников, например, сокетов или каналов связи (
Ставь 👍 и забирай 📚 Базу знаний
В Python существует несколько типов файловых объектов, которые используются для работы с различными типами данных. Рассмотрим основные виды файловых объектов и их особенности.
🟠Текстовые файлы (`TextIOWrapper`)
Это самый распространённый тип файловых объектов. Такие файлы используются для работы с текстовыми данными и поддерживают строковые операции.
with open("example.txt", "w", encoding="utf-8") as file:
file.write("Привет, мир!") # Записываем текст в файл
with open("example.txt", "r", encoding="utf-8") as file:
content = file.read() # Читаем текст из файла
print(content)🟠Бинарные файлы (`BufferedReader`, `BufferedWriter`)
Эти файлы используются для работы с двоичными данными (изображениями, видео, аудиофайлами и т. д.).
with open("image.jpg", "rb") as file:
binary_data = file.read() # Читаем файл в бинарном режиме
print(binary_data[:10]) # Выведем первые 10 байтов
with open("copy.jpg", "wb") as file:
file.write(binary_data) # Записываем данные в новый файл🟠Файлы ввода-вывода в памяти (`io.StringIO`, `io.BytesIO`)
Эти объекты представляют собой файловые буферы, которые хранят данные в оперативной памяти, а не на диске.
from io import StringIO
file = StringIO()
file.write("Привет, мир!") # Запись данных в буфер
file.seek(0) # Перемещаем указатель в начало
print(file.read()) # Читаем данные из буфера
Пример работы с
BytesIO:from io import BytesIO
file = BytesIO()
file.write(b"Binary data") # Запись бинарных данных
file.seek(0)
print(file.read()) # Чтение данных
🟠Файловые объекты на основе сокетов, пайпов и других источников
Python позволяет работать с файловыми объектами, полученными из нестандартных источников, например, сокетов или каналов связи (
pipes).import socket
s = socket.socket()
s.connect(("example.com", 80))
s.sendall(b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n")
response = s.makefile("r", encoding="utf-8") # Создание файлового объекта
print(response.readline()) # Читаем первую строку HTTP-ответа
s.close()
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Что такое авторизация?
Авторизация — это процесс проверки прав доступа.
После того как пользователь прошёл аутентификацию (подтвердил, кто он), система проверяет, что ему разрешено делать: какие страницы открывать, какие действия выполнять и т. д.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
После того как пользователь прошёл аутентификацию (подтвердил, кто он), система проверяет, что ему разрешено делать: какие страницы открывать, какие действия выполнять и т. д.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔2
🤔 Какие есть операторы ограничений?
Ограничения (constraints) в SQL используются для контроля целостности данных в таблицах. Они помогают предотвратить некорректные значения и обеспечить согласованность данных.
🚩`NOT NULL` (Запрещает `NULL`)
Используется, если поле обязательно для заполнения
Нельзя вставить
🚩`UNIQUE` (Гарантирует уникальность значений)
Запрещает дубликаты в столбце
Попытка вставить одинаковый email вызовет ошибку
Создание
🚩`PRIMARY KEY` (Главный ключ, уникальный идентификатор)
Объединяет
Можно создать
🚩`FOREIGN KEY` (Связь таблиц)
Создаёт связь между таблицами и поддерживает ссылочную целостность.
Есть таблица пользователей (
Что делать при удалении пользователя?
Ставь 👍 и забирай 📚 Базу знаний
Ограничения (constraints) в SQL используются для контроля целостности данных в таблицах. Они помогают предотвратить некорректные значения и обеспечить согласованность данных.
🚩`NOT NULL` (Запрещает `NULL`)
Используется, если поле обязательно для заполнения
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL -- Поле name обязательно
);
Нельзя вставить
NULL в name INSERT INTO users (id, name) VALUES (1, NULL); -- Ошибка!
🚩`UNIQUE` (Гарантирует уникальность значений)
Запрещает дубликаты в столбце
CREATE TABLE users (
id INT PRIMARY KEY,
email VARCHAR(100) UNIQUE -- Email должен быть уникальным
);
Попытка вставить одинаковый email вызовет ошибку
INSERT INTO users (id, email) VALUES (1, 'test@example.com');
INSERT INTO users (id, email) VALUES (2, 'test@example.com'); -- Ошибка!
Создание
UNIQUE на нескольких колонках CREATE TABLE orders (
user_id INT,
product_id INT,
UNIQUE (user_id, product_id) -- Запрещает заказывать один товар дважды
);
🚩`PRIMARY KEY` (Главный ключ, уникальный идентификатор)
Объединяет
NOT NULL + UNIQUE и гарантирует, что строка уникальна. CREATE TABLE users (
id INT PRIMARY KEY, -- Уникальный идентификатор
name VARCHAR(50)
);
Можно создать
PRIMARY KEY на нескольких колонках CREATE TABLE enrollments (
student_id INT,
course_id INT,
PRIMARY KEY (student_id, course_id) -- Один студент не может записаться дважды на один курс
);
🚩`FOREIGN KEY` (Связь таблиц)
Создаёт связь между таблицами и поддерживает ссылочную целостность.
Есть таблица пользователей (
users) и таблица заказов (orders), где user_id в orders должен ссылаться на id в users. CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50)
);
CREATE TABLE orders (
id INT PRIMARY KEY,
user_id INT,
FOREIGN KEY (user_id) REFERENCES users(id) -- Связь с таблицей users
);
Что делать при удалении пользователя?
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Что такое garbage collector?
Garbage collector (сборщик мусора) — это механизм, который освобождает память от объектов, которые уже не используются. В Python он работает совместно с системой подсчёта ссылок, дополнительно удаляя объекты с взаимными ссылками, которые не доступны извне (циклические зависимости).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Garbage collector (сборщик мусора) — это механизм, который освобождает память от объектов, которые уже не используются. В Python он работает совместно с системой подсчёта ссылок, дополнительно удаляя объекты с взаимными ссылками, которые не доступны извне (циклические зависимости).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1🔥1
🤔 Что такое Host?
Host (хост) — это устройство или сервер, подключённый к сети, который может предоставлять или запрашивать данные.
🚩Где используется `Host`?
🟠В HTTP-запросах (заголовок `Host`)
Когда браузер запрашивает сайт, он отправляет заголовок
🟠В настройке DNS и доменных имён
Host — это доменное имя, привязанное к IP-адресу.
-
-
🟠3. В локальной сети (локальные хосты)
Внутри сети устройства тоже считаются хостами (
Ставь 👍 и забирай 📚 Базу знаний
Host (хост) — это устройство или сервер, подключённый к сети, который может предоставлять или запрашивать данные.
GET /index.html HTTP/1.1
Host: example.com
🚩Где используется `Host`?
🟠В HTTP-запросах (заголовок `Host`)
Когда браузер запрашивает сайт, он отправляет заголовок
Host, чтобы сервер знал, какой сайт нужно отдать. GET / HTTP/1.1
Host: google.com
User-Agent: Mozilla/5.0
🟠В настройке DNS и доменных имён
Host — это доменное имя, привязанное к IP-адресу.
-
example.com → 192.168.1.100 -
mail.example.com → 192.168.1.101 127.0.0.1 mysite.local
🟠3. В локальной сети (локальные хосты)
Внутри сети устройства тоже считаются хостами (
192.168.1.10, 192.168.1.20). localhost (127.0.0.1) — это всегда локальный компьютер.Ставь 👍 и забирай 📚 Базу знаний
🔥2👍1
🤔 Что такое ветка в GIT?
Ветка — это указатель на одну из версий истории. Позволяет работать над отдельными фичами, багфиксами и экспериментами, не затрагивая основную ветку. Это основа для параллельной разработки и коллаборации.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ветка — это указатель на одну из версий истории. Позволяет работать над отдельными фичами, багфиксами и экспериментами, не затрагивая основную ветку. Это основа для параллельной разработки и коллаборации.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍3
🤔 Для чего нужны библиотеки sqlparse, asgiref в Django?
Django использует
🟠`sqlparse` – разбор SQL-запросов
🚩Где используется в Django?
Форматирование SQL-запросов в
Логирование SQL-запросов
Команда
🟠`asgiref` – асинхронность в Django
🚩Где используется в Django?
🟠Поддержка ASGI
Django с версии 3.0 поддерживает асинхронные вьюхи, WebSockets и асинхронные базы данных (например, с
В
🟠Асинхронные middleware
Django 4.x поддерживает асинхронные middleware через
🟠Преобразование `async` → `sync` и наоборот
Django использует
🟠Локальное хранилище для асинхронных задач (`asgiref.local.Local`)
Позволяет хранить данные отдельно для каждого потока или запроса.
Ставь 👍 и забирай 📚 Базу знаний
Django использует
sqlparse и asgiref как вспомогательные библиотеки для работы с SQL и асинхронностью. Разберём их назначение подробно. 🟠`sqlparse` – разбор SQL-запросов
sqlparse (SQL Parser) — это библиотека для анализа, форматирования и обработки SQL-запросов. В Django она используется в админке, логах и отладке ORM. 🚩Где используется в Django?
Форматирование SQL-запросов в
django.db.connection.queriesfrom django.db import connection
from sqlparse import format
queries = connection.queries # Получаем список SQL-запросов
for q in queries:
print(format(q["sql"], reindent=True, keyword_case="upper")) # Красивый SQL
Логирование SQL-запросов
sqlparse помогает Django красиво выводить SQL-запросы в DEBUG=True.Команда
sqlmigratepython manage.py sqlmigrate app_name 0001
🟠`asgiref` – асинхронность в Django
asgiref (Asynchronous Server Gateway Interface Reference) — это библиотека, которая помогает Django работать в асинхронном (async) режиме. Django поддерживает ASGI с версии 3.0, и asgiref — это её обязательная зависимость.🚩Где используется в Django?
🟠Поддержка ASGI
Django с версии 3.0 поддерживает асинхронные вьюхи, WebSockets и асинхронные базы данных (например, с
asyncpg).В
settings.py есть параметр:ASGI_APPLICATION = "myproject.asgi.application"
🟠Асинхронные middleware
Django 4.x поддерживает асинхронные middleware через
asgiref.sync и asgiref.local.🟠Преобразование `async` → `sync` и наоборот
Django использует
sync_to_async() и async_to_sync() из asgiref:from asgiref.sync import sync_to_async
def sync_function():
return "Hello from sync!"
async_function = sync_to_async(sync_function)
print(async_function()) # Вызывает синхронную функцию в асинхронном коде
🟠Локальное хранилище для асинхронных задач (`asgiref.local.Local`)
Позволяет хранить данные отдельно для каждого потока или запроса.
Ставь 👍 и забирай 📚 Базу знаний
👍3