Всем привет!
В этот пятничный вечер мы приглашаем вас присоединиться к нам, взять большую порцию попкорна, устроиться поудобнее и наслаждаться просмотром фильма. Возможно, это будет фильм, который вы давно хотели посмотреть, или же это будет что-то новое, что вы еще не видели. В любом случае, мы уверены, что это будет отличный вечер!
Фильм: Унесённые призраками
Год: 2001
Тихиро с мамой и папой переезжает в новый дом. Заблудившись по дороге, они оказываются в странном пустынном городе, где их ждет великолепный пир. Родители с жадностью набрасываются на еду и к ужасу девочки превращаются в свиней, став пленниками злой колдуньи Юбабы. Теперь, оказавшись одна среди волшебных существ и загадочных видений, Тихиро должна придумать, как избавить своих родителей от чар коварной старухи.
https://www.sspoisk.ru/film/370/
Приятного ппросмотра!
В этот пятничный вечер мы приглашаем вас присоединиться к нам, взять большую порцию попкорна, устроиться поудобнее и наслаждаться просмотром фильма. Возможно, это будет фильм, который вы давно хотели посмотреть, или же это будет что-то новое, что вы еще не видели. В любом случае, мы уверены, что это будет отличный вечер!
Фильм: Унесённые призраками
Год: 2001
Тихиро с мамой и папой переезжает в новый дом. Заблудившись по дороге, они оказываются в странном пустынном городе, где их ждет великолепный пир. Родители с жадностью набрасываются на еду и к ужасу девочки превращаются в свиней, став пленниками злой колдуньи Юбабы. Теперь, оказавшись одна среди волшебных существ и загадочных видений, Тихиро должна придумать, как избавить своих родителей от чар коварной старухи.
https://www.sspoisk.ru/film/370/
Приятного ппросмотра!
🔥5
Что выведет код с изображения? №27
Anonymous Quiz
23%
[1, 2, 3, [4, 5]]
30%
[1, 2, 3, 4, 5]
26%
TypeError
9%
[1, 2, 3, [4], [5]]
7%
[1, 2, 3, (4, 5)]
5%
ValueError
Вчерашняя задача была короткой, но интересной и как оказалось сложной. Правильно ответили всего 9 человек из 33-х, что равно 27%.
Код задачи:
Разбор задачи
Сперва пройдёмся по строкам.
Сначала объявляем переменную
Затем у переменной
В конце вызываем функцию
Что могло пойти не так?
Функции в Python принимают два вида аргументов: позиционные и ключевые.
В нашем случае, мы передаём в метод
Всё дело в том, что, когда применяется распаковка, все элементы передаются как отдельные аргументы, в связи с чем и получаем ошибку
Код задачи:
numbers = [1, 2, 3]
numbers.append(*[4, 5])
print(numbers)
Разбор задачи
Сперва пройдёмся по строкам.
Сначала объявляем переменную
numbers и присваиваем ей список чисел [1, 2, 3].Затем у переменной
numbers вызываем метод .append(), передав в него распакованный список [4, 5].В конце вызываем функцию
print(), передав в неё переменную numbers для вывода результата.Что могло пойти не так?
Функции в Python принимают два вида аргументов: позиционные и ключевые.
В нашем случае, мы передаём в метод
.append() один позиционный аргумент - список [4, 5], однако, затем мы применяем к нему распаковку. Мы уже писали про работу распаковки в разборе задачи "Найди ошибку №2". Всё дело в том, что, когда применяется распаковка, все элементы передаются как отдельные аргументы, в связи с чем и получаем ошибку
TypeError, поскольку метод .append() принимает только один позиционный аргумент, а мы ему передаём два.🔥6
Подготовили видео ко вчерашней задаче!
https://youtube.com/shorts/gx1UZlqQ3sc
Будем благодарны за лайк и комментарий!
https://youtube.com/shorts/gx1UZlqQ3sc
Будем благодарны за лайк и комментарий!
🔥8
Tips & Tricks. №2
2. Chocolatey - пакетный менеджер для Windows.
Многие знают про пакетные менеджеры в Linux, такие, как
В Windows с приложениями, обычно, всё сильно проще - зашёл на сайт, скачал
Внимание! Для полноценной работы с Chocolatey необходимо использовать Powershell, запущенный от имени администратора!
Установка Chocolatey.
Для установки выполните команду ниже в PowerShell, открытом от имени администратора:
Установка пакета.
Устаревшие пакеты.
Обновление пакета.
Удаление пакета.
Список установленных пакетов.
#код_на_салфетке #chocolatey #пакетный_менеджер #полезное #winget #python
2. Chocolatey - пакетный менеджер для Windows.
Многие знают про пакетные менеджеры в Linux, такие, как
rpm, deb и другие. Если с ними ещё не сталкивались, то точно столкнётесь при работе с VPS. В Windows с приложениями, обычно, всё сильно проще - зашёл на сайт, скачал
exe или msi, запустил и установил. Нужно обновить приложение в котором нет автоматического обновления? Повторяешь цикл. Это не говоря о том, что пользователь по ошибке может скачать не то, что хочет...Chocolatey - на текущий момент самый популярный менеджер пакетов для Windows. Обеспечивает удобное управление установленными приложениями, оперативно обновляет версии в репозитории, при этом тщательно проверяет находящиеся там пакеты.Внимание! Для полноценной работы с Chocolatey необходимо использовать Powershell, запущенный от имени администратора!
Установка Chocolatey.
Для установки выполните команду ниже в PowerShell, открытом от имени администратора:
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))Установка пакета.
choco install имя_пакета
choco install python312
# установится последняя на дынный момент версия 3.12.4
choco install python312 --version=3.12.0
# установится версия 3.12.0
Устаревшие пакеты.
choco outdated
Обновление пакета.
choco upgrade имя_пакета
choco upgrade python312
# если был установлен, к примеру, 3.12.0, то будет обновлено до 3.12.4
choco upgrade all
# обновит версии всех устаревших пакетов
Удаление пакета.
choco uninstall имя_пакета
Список установленных пакетов.
choco list
#код_на_салфетке #chocolatey #пакетный_менеджер #полезное #winget #python
🔥3
Подготовили новое видео посвящённое Chocolatey!
https://youtube.com/shorts/JwVtQnkYsQs?feature=share
Будем рады вашим лайкам и комментариям!
https://youtube.com/shorts/JwVtQnkYsQs?feature=share
Будем рады вашим лайкам и комментариям!
🔥3
Приветствую!
В длинных постах можно запутаться поэтому, собираю воедино всё, что есть на данный момент.
Оглавления:
Для удобства навигации есть посты с оглавлениями по темам:
"Сайт на Django"
"Telegram-бот на AIOgram3"
"Применение Docker"
"Полезные инструменты"
"Путь в IT."
"Код в мешке"
"Boosty эксклюзив"
"Сравнение Python и C"
Задачи "Что выведет этот код?"
Задачи "Найди ошибку в коде"
Ресурсы канала:
Уютный и немного безумный чат канала.
Бот с материалами к постам
Сайт со всеми постами
Канал в Dzen
Сообщество в VK
Поддержка.
Если вам нравится канал и выходящий материал, поделитесь ссылкой с людьми, кому это тоже может быть интересно.
Также поддержать канал можно:
Подпиской или донатом на Boosty.
Донатом в нашем Telegram-боте.
Отправив донат в DonationAlerts.
Или внеся сайт в исключения вашего блокировщика рекламы.
В длинных постах можно запутаться поэтому, собираю воедино всё, что есть на данный момент.
Оглавления:
Для удобства навигации есть посты с оглавлениями по темам:
"Сайт на Django"
"Telegram-бот на AIOgram3"
"Применение Docker"
"Полезные инструменты"
"Путь в IT."
"Код в мешке"
"Boosty эксклюзив"
"Сравнение Python и C"
Задачи "Что выведет этот код?"
Задачи "Найди ошибку в коде"
Ресурсы канала:
Уютный и немного безумный чат канала.
Бот с материалами к постам
Сайт со всеми постами
Канал в Dzen
Сообщество в VK
Поддержка.
Если вам нравится канал и выходящий материал, поделитесь ссылкой с людьми, кому это тоже может быть интересно.
Также поддержать канал можно:
Подпиской или донатом на Boosty.
Донатом в нашем Telegram-боте.
Отправив донат в DonationAlerts.
Или внеся сайт в исключения вашего блокировщика рекламы.
🔥3
Обновление бота автоответчика и ответы на вопросы о Telegram Stars
Автор: Иван Ашихмин
Приветствую.
Невозможно сразу знать или учесть все нюансы во время программирования, как бы этого не хотелось. Также порой приходят мысли по улучшению или изменению чего-либо. В этом посте я проведу некую "работу над ошибками", опишу изменения в нескольких постах, а также постараюсь расписать всё, что на данный момент известно о Telegram Stars, вопросы о котором поступают с удивляющей частотой.
Обновления затронут следующие посты:
- Бот-автоответчик с ChatGPT для Бизнес-аккаунта в Telegram на Aiogram 3
- AIOgram3 18. Подключаем оплату Telegram Stars
Бот-автоответчик с ChatGPT для Бизнес-аккаунта в Telegram на Aiogram 3
Автор: Иван Ашихмин
Приветствую.
Невозможно сразу знать или учесть все нюансы во время программирования, как бы этого не хотелось. Также порой приходят мысли по улучшению или изменению чего-либо. В этом посте я проведу некую "работу над ошибками", опишу изменения в нескольких постах, а также постараюсь расписать всё, что на данный момент известно о Telegram Stars, вопросы о котором поступают с удивляющей частотой.
Обновления затронут следующие посты:
- Бот-автоответчик с ChatGPT для Бизнес-аккаунта в Telegram на Aiogram 3
- AIOgram3 18. Подключаем оплату Telegram Stars
Бот-автоответчик с ChatGPT для Бизнес-аккаунта в Telegram на Aiogram 3
🔥6
В этом посте в процессе написания миддлвари для отслеживания времени работы в профиле Telegram, я не нашёл способ получить время при помощи бота, поэтому обращался за этой информацией к серверам Telegram. На Github репозитория AIOgram я задавал по этому поводу вопрос и получил ответ - я неправильно пытался получить информацию. Что ж, бывает, давайте это исправим.
У нас был следующий код в файле
Уберём всё, что было до блока
Можно было получить информацию о чате администратора просто обратившись к боту. Спасибо за эту информацию пользователю Olegt0rr с Github.
Для Boosty.
Также, для подписчиков на Boosty обновил репозиторий с проектом. Добавил поддержку контекста для бесед (ведение истории диалогов) в Redis.
AIOgram3 18. Подключаем оплату Telegram Stars
Ответы на вопросы.
Прочитать подробнее можно в "Условиях обслуживания": https://telegram.org/tos/bot-developers#6-payments
- Для кого это всё? - Звёзды ввели для продажи цифровых товаров и услуг. Они не распространяются на продажу физических товаров. Если вы продаёте что-то электронное или не существующее физически, например, доступ к закрытому чату, курс и т.д., подключать звёзды
обязательно. Telegram будет следить и проверять транзакции в ботах, они уже сообщали, что заблокировали некоторое количество ботов которые всё ещё не перешли на звёзды.
Пункт 6.2. Digital Goods and Services.
- Куда уходят звёзды после оплаты? - это сейчас главная загадка. Возможность получать за звёзды вознаграждения (именно так назвали вывод) или тратить их на рекламу появится в Июле 2024г. Вероятно, будет внедрено в платформу Fragment. Более подробной информации на данный момент нет. Также учтите, что звёзды на балансе будут появляться с задержкой до 21-го дня.
Пункты 6.2.4. Rewards for Stars и 6.2.4.1. Receiving Rewards.
- Сколько я получу за звёзды? - За каждую полученную звезду вы получите эквивалент
Грубо говоря, за 100 звёзд купленных пользователем по цене в 189 рублей, на выходе получим примерно ~110 рублей, это ещё не считая комиссии за вывод/обмен TON.
Пункт 6.2.4. Rewards for Stars.
Рефактор кода.
Провёл небольшие изменения в коде бота. Обновил файл поста с материалами.
Заключение.
Думал, изменений будет больше. Хотелось бы получать больше обратной связи по постам и коду в них.
Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram
#Python #код_на_салфетке #рефакторинг #aiogram #гайды #telegram #telegram_stars #криптовалюта #TON #звёзды_Telegram #middleware #изменения
У нас был следующий код в файле
business_middleware.py:async with httpx.AsyncClient() as client:
resp = await client.get(
f"https://api.telegram.org/bot{secrets.token}/getChat?chat_id={secrets.admin_id}"
)
chat = resp.json()
full_chat = ChatFullInfo(**chat["result"])
if check_opening_hours(full_chat.business_opening_hours):
Уберём всё, что было до блока
if и заменим на две строчки:from app.settings import secrets, bot
chat = await bot.get_chat(secrets.admin_id)
hours = chat.business_opening_hours
if check_opening_hours(hours):
Можно было получить информацию о чате администратора просто обратившись к боту. Спасибо за эту информацию пользователю Olegt0rr с Github.
Для Boosty.
Также, для подписчиков на Boosty обновил репозиторий с проектом. Добавил поддержку контекста для бесед (ведение истории диалогов) в Redis.
AIOgram3 18. Подключаем оплату Telegram Stars
Ответы на вопросы.
Прочитать подробнее можно в "Условиях обслуживания": https://telegram.org/tos/bot-developers#6-payments
- Для кого это всё? - Звёзды ввели для продажи цифровых товаров и услуг. Они не распространяются на продажу физических товаров. Если вы продаёте что-то электронное или не существующее физически, например, доступ к закрытому чату, курс и т.д., подключать звёзды
обязательно. Telegram будет следить и проверять транзакции в ботах, они уже сообщали, что заблокировали некоторое количество ботов которые всё ещё не перешли на звёзды.
Пункт 6.2. Digital Goods and Services.
- Куда уходят звёзды после оплаты? - это сейчас главная загадка. Возможность получать за звёзды вознаграждения (именно так назвали вывод) или тратить их на рекламу появится в Июле 2024г. Вероятно, будет внедрено в платформу Fragment. Более подробной информации на данный момент нет. Также учтите, что звёзды на балансе будут появляться с задержкой до 21-го дня.
Пункты 6.2.4. Rewards for Stars и 6.2.4.1. Receiving Rewards.
- Сколько я получу за звёзды? - За каждую полученную звезду вы получите эквивалент
0.013 USD, вероятно в криптовалюте TON. Также была предоставлена таблица с разъяснением ценообразования: https://core.telegram.org/file/400780400418/1/NMQCu-wgDpo.397006/5304141797eccc38c4Грубо говоря, за 100 звёзд купленных пользователем по цене в 189 рублей, на выходе получим примерно ~110 рублей, это ещё не считая комиссии за вывод/обмен TON.
Пункт 6.2.4. Rewards for Stars.
Рефактор кода.
Провёл небольшие изменения в коде бота. Обновил файл поста с материалами.
Заключение.
Думал, изменений будет больше. Хотелось бы получать больше обратной связи по постам и коду в них.
Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram
#Python #код_на_салфетке #рефакторинг #aiogram #гайды #telegram #telegram_stars #криптовалюта #TON #звёзды_Telegram #middleware #изменения
🔥7
ООП на Python, ч. 3. Методы __str__ и __repr__.
Автор: Андрей Лебедев
Продолжаем цикл постов об ООП на Python. В прошлый раз мы говорили о статических и классовых методах. Сегодня разберем методы
Автор: Андрей Лебедев
Продолжаем цикл постов об ООП на Python. В прошлый раз мы говорили о статических и классовых методах. Сегодня разберем методы
__str__ и __repr__.👍3🔥2
В рамках первого поста об ООП на Python мы уже рассматривали метод
Метод __str__().
Наверняка вам доводилось создать объект какого-нибудь класса и сразу же этот объект распечатать методом
Используем класс футбольного клуба из предыдущего поста:
Вместо того, чтобы вызвать метод
Если явным образом не оповестить Python о том, как должно выглядеть представление объекта в виде строки, будет распечатано сообщение, содержащее следующую информацию:
• Имя запускаемого файла
• Имя класса, который использовался для создания объекта
• Ячейка памяти, в которой хранится объект.
Эта информация бывает полезна в процессе отладки кода, когда нужна заниматься поиском и устранением багов, но простому пользователю она мало о чем говорит. И выглядит, откровенно говоря, не очень читабельно для неподготовленного человека. Метод
Переопределим метод
И результат выполнение кода теперь выглядит куда дружелюбнее:
Метод
Рассмотрим пример из официального туториала по созданию приложений на Django. В нём разбирается пример класса модели
__init__. Все три эти метода (__str__, __repr__ и __init__), как нетрудно заметить, объединяют по два нижних подчеркивания до и после собственно названия метода. Такой синтаксис обозначает так называемые магические (или dunder - от английского “double under(scores)” - “двойное нижнее подчёркивание”) методы. Они используются для определения специального поведения объектов и вызываются во время использования стандартных операций (сложение, вычитание, доступ к атрибутам и др.).Метод __str__().
Наверняка вам доводилось создать объект какого-нибудь класса и сразу же этот объект распечатать методом
print(). Чаще всего результат выглядел немного загадочно. Давайте создадим свой собственный класс и попробуем распечатать его объект.Используем класс футбольного клуба из предыдущего поста:
class FootballClub:
def __init__(self, name, description=""):
self.name = name
self.description = description
def describe_club(self):
msg = f"{self.name}: {self.description}"
print(msg)
club = FootballClub(“Манчестер Юнайтед”, “Манчестер, Англия”)
print(club)
Вместо того, чтобы вызвать метод
describe_club(), мы просто распечатаем вновь созданный объект нашего класса. Результат получается примерно таким:<__main__.FootballClub object at 0x1050effd0>
Если явным образом не оповестить Python о том, как должно выглядеть представление объекта в виде строки, будет распечатано сообщение, содержащее следующую информацию:
• Имя запускаемого файла
• Имя класса, который использовался для создания объекта
• Ячейка памяти, в которой хранится объект.
Эта информация бывает полезна в процессе отладки кода, когда нужна заниматься поиском и устранением багов, но простому пользователю она мало о чем говорит. И выглядит, откровенно говоря, не очень читабельно для неподготовленного человека. Метод
__str__() позволяет переопределить, что должно выводиться на печать, когда по отношению к объекту класса используется метод print().Переопределим метод
__str__() для нашего класса:
class FootballClub:
def __init__(self, name, description=""):
self.name = name
self.description = description
def describe_club(self):
msg = f"{self.name}: {self.description}"
print(msg)
def __str__(self):
return self.name
club = FootballClub("Манчестер Юнайтед", "Манчестер, Англия")
print(club)
И результат выполнение кода теперь выглядит куда дружелюбнее:
Манчестер Юнайтед
Метод
__str__() используется не только для вывода строк на печать в терминале. Многие панели управления “ищут” именно __str__() для отображения данных, связанных с экземплярами того или иного класса. Так, к примеру, происходит в админ панели Django, поэтому в большинстве случаев метод __str__() определен в классах моделей.Рассмотрим пример из официального туториала по созданию приложений на Django. В нём разбирается пример класса модели
Question - вопроса в рамках приложения для проведения анкетирования. Код модели выглядит следующим образом:
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date_published')
def __str__(self):
return self.question_text
🔥4
Так как метод
Таким образом, на печать выводится название класса, слово
Метод __repr__().
Прежде чем пускаться в объяснения работы метода
Сначала мы импортируем класс
На печать выводится название модуля, название класса, слово
Если вы хотите, чтобы в этот момент в терминале (или ином служебном окружении) выводилась другая информация, необходимо переопределить метод
“Если это возможно, вывод должен быть в виде выражения Python, которое можно использовать для воссоздания объекта с тем же значением (при условии наличия подходящего окружения). Если это невозможно, вывод должен быть в виде строки с текстом в таком формате <…полезная информация…>. Возвращаемое значение должно быть строкой Python.
Вывод метода обычно используется для дебаггинга, поэтому важно, чтобы он был информативным и недвусмысленным”.
Альтернативный вывод метода
Чтобы этот код сработал, надо заново открыть окно терминала и повторить весь порядок ввода:
На этот раз выводится не стандартная запись, а вывод нашего перезаписанного метода
__str__() переопределен, в админ панели будет выводиться непосредственно сам вопрос. Если бы метод не переопределялся, то там бы виднелось что-то вроде Question object (1). Дело в том, что в Django все модели наследуются от базового класса модели в модуле django.db.models, где метод __str__() определяется следующим образом:
def __str__(self):
return "%s object (%s)" % (self.__class__.__name__, self.pk)
Таким образом, на печать выводится название класса, слово
object и первичный ключ объекта в скобках.Метод __repr__().
Прежде чем пускаться в объяснения работы метода
__repr__(), разберёмся с тем, что же он делает. Для этого откроем терминал и зайдём в папку, где лежит наш файл с классом футбольного клуба, который мы создали ранее. Таким образом мы сможем получить доступ к классам и функциям нашего файла прямо из терминала:
$ ls
football.py
$ python
>>> from football import FootballClub
>>> club = FootballClub("Манчестер Юнайтед")
>>> print(club)
Манчестер Юнайтед
>>>
Сначала мы импортируем класс
FootballClub. Затем создаем объект этого класса, передав в него название клуба ("Манчестер Юнайтед”), и записываем его в переменную club. Далее выводим на печать содержимое этой самой переменной. Срабатывает метод __str__(), который мы создали, и мы видим название клуба. А что случится, если мы в терминале просто введем имя переменной, не передавая его предварительно в метод print()?
>>> club
<football.FootballClub object at 0x10bdc8040>
На печать выводится название модуля, название класса, слово
object и адрес ячейки, в которую он записан.Если вы хотите, чтобы в этот момент в терминале (или ином служебном окружении) выводилась другая информация, необходимо переопределить метод
__repr__(). Но прежде чем бросаться это делать, прочитаем официальную документацию к этому методу:“Если это возможно, вывод должен быть в виде выражения Python, которое можно использовать для воссоздания объекта с тем же значением (при условии наличия подходящего окружения). Если это невозможно, вывод должен быть в виде строки с текстом в таком формате <…полезная информация…>. Возвращаемое значение должно быть строкой Python.
Вывод метода обычно используется для дебаггинга, поэтому важно, чтобы он был информативным и недвусмысленным”.
Альтернативный вывод метода
__repr__() должен помочь заново создать эквивалентный объект данного класса. Давайте добавим метод __repr__() в класс FootballClub:
class FootballClub:
def __init__(self, name, description=""):
self.name = name
self.description = description
def describe_club(self):
msg = f"{self.name}: {self.description}"
print(msg)
def __str__(self):
return self.name
def __repr__(self):
if self.description:
return (f"FootballClub(name={self.name}, "
f"description={self.description})")
else:
return f"FootballClub(name={self.name})"
Чтобы этот код сработал, надо заново открыть окно терминала и повторить весь порядок ввода:
$ python
>>> from football import FootballClub
>>> club = FootballClub("Манчестер Юнайтед")
>>> club
FootballClub("Манчестер Юнайтед")
На этот раз выводится не стандартная запись, а вывод нашего перезаписанного метода
__repr__(): строка, позволяющая создать объект, полностью эквивалентный тому, в котором и был вызван метод __repr__().🔥4
В нашем примере срабатывал кусок кода, записанный в
Python вызывает метод
В следующий раз поговорим о методе
Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram
#Python #ООП #код_на_салфетке #код_в_мешке #класс #init #метод #магический_метод #repr #dunder #str #dunder_метод
else. Если мы добавим в наш объект описание (description), вывод будет уже другим:
$ python
>>> from football import FootballClub
>>> club = club = FootballClub("Манчестер Юнайтед", "Английский футбольный клуб")
>>> club
FootballClub(name=Манчестер Юнайтед, description=Английский футбольный клуб)
Python вызывает метод
__repr__(), когда генерирует вывод для дебаггинга. В момент дебаггинга кусок кода, который позволит сгенерировать объект, задействованный в проблемном коде.В следующий раз поговорим о методе
__new__().Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram
#Python #ООП #код_на_салфетке #код_в_мешке #класс #init #метод #магический_метод #repr #dunder #str #dunder_метод
🔥6
Подготовили новый Shorts посвящённый Telegram Stars и ответам на вопросы.
https://youtube.com/shorts/pXC8LZKWNlU
Будем благодарны за лайк и комментарий!
https://youtube.com/shorts/pXC8LZKWNlU
Будем благодарны за лайк и комментарий!
🔥8
Приветствуем.
В прошлую пятницу мы опубликовали пост, в котором попросили вас задавать нам вопросы.
Был всего один вопрос в комментариях к посту.
Давайте на него ответим.
Помощь с Django.
Ссылка на комментарий
Вариантов итогового проекта по Django из GeekBrains у нас нет, т.к. когда мы учились, его ещё не было. Но, Александр из комментариев сам предложил вариант репозитория для "обзора".
Проект выглядит очень комплексным. Видно, что человек сам хорошо разбирается в Django, т.к. таких знаний в GB не дают. В целом, проект может служить отличным подспорьем в качестве "референса" (копировать плохо, подглядывать полезно 😉).
Однако, есть вопросы к реализации некоторых моментов:
- В моделях используется кастомный транслитератор, а потом на основе его происходит слагификация для URL, записанного в поле CharField, а не SlugField, т.е. без валидации. Странное решение, поскольку есть библиотека
- В проекте используется доступ к API Kandinsy от СБЕР. Файл с ключами выполнен в виде
- Представления. В некоторых представлениях происходит много логики, которую по хорошему вынести в отдельные функции. В таком виде они становятся перегруженными. Также, в некоторых представлениях используется множественный вызов методов разделённый переносом строки через символ
На самом деле, разбирать чужой код, без запуска и конкретной цели не самое "удобное" занятие. Код выглядит хорошо и на высоком уровне. К API-приложению вообще не прикопаться. По большому счёту, описанное выше тянет на "вкусовщину" и добавить больше нечего.
В прошлую пятницу мы опубликовали пост, в котором попросили вас задавать нам вопросы.
Был всего один вопрос в комментариях к посту.
Давайте на него ответим.
Помощь с Django.
Ссылка на комментарий
Вариантов итогового проекта по Django из GeekBrains у нас нет, т.к. когда мы учились, его ещё не было. Но, Александр из комментариев сам предложил вариант репозитория для "обзора".
Проект выглядит очень комплексным. Видно, что человек сам хорошо разбирается в Django, т.к. таких знаний в GB не дают. В целом, проект может служить отличным подспорьем в качестве "референса" (копировать плохо, подглядывать полезно 😉).
Однако, есть вопросы к реализации некоторых моментов:
- В моделях используется кастомный транслитератор, а потом на основе его происходит слагификация для URL, записанного в поле CharField, а не SlugField, т.е. без валидации. Странное решение, поскольку есть библиотека
pytils с функцией slugify, работающая с кириллицей. При её использовании можно сразу сохранять Slug-поле без необходимости в лишних полях и действиях.- В проекте используется доступ к API Kandinsy от СБЕР. Файл с ключами выполнен в виде
.py-файла и доступен в открытом виде. Как по мне, это плохое решение. Такие данные должны находиться в .env и браться из основного settings.py. - Представления. В некоторых представлениях происходит много логики, которую по хорошему вынести в отдельные функции. В таком виде они становятся перегруженными. Также, в некоторых представлениях используется множественный вызов методов разделённый переносом строки через символ
\, это не хорошая практика. Лучшим решением, обернуть всё выражение в скобки () и тогда внутри не будет проблем с переносом строк. Код станет визуально понятнее.На самом деле, разбирать чужой код, без запуска и конкретной цели не самое "удобное" занятие. Код выглядит хорошо и на высоком уровне. К API-приложению вообще не прикопаться. По большому счёту, описанное выше тянет на "вкусовщину" и добавить больше нечего.
🔥8
Всех с вечером пятницы!
Наступила пятница, и это значит, что настало время расслабиться и отдохнуть после усердной недели. Надеюсь, ваша неделя была продуктивной, и вы достигли всех своих целей. Пусть вечер пятницы будет полон приятных моментов, а выходные принесут вам заслуженный отдых.
Фильм: Цветы войны
Год: 2011
1937 год, Японо-китайская война. Американский гробовщик Джон направляется в Католическую церковь в Нанкине, чтобы подготовить священника к похоронам. По прибытии он оказывается в эпицентре военных действий и единственным мужчиной среди учениц монастыря и проституток из соседнего борделя. Джон решает выдать себя за священника и попытаться спасти обе группы от японской армии.
https://www.sspoisk.ru/film/464561/
Приятного просмотра!
Наступила пятница, и это значит, что настало время расслабиться и отдохнуть после усердной недели. Надеюсь, ваша неделя была продуктивной, и вы достигли всех своих целей. Пусть вечер пятницы будет полон приятных моментов, а выходные принесут вам заслуженный отдых.
Фильм: Цветы войны
Год: 2011
1937 год, Японо-китайская война. Американский гробовщик Джон направляется в Католическую церковь в Нанкине, чтобы подготовить священника к похоронам. По прибытии он оказывается в эпицентре военных действий и единственным мужчиной среди учениц монастыря и проституток из соседнего борделя. Джон решает выдать себя за священника и попытаться спасти обе группы от японской армии.
https://www.sspoisk.ru/film/464561/
Приятного просмотра!
🔥3👍1
Что выведет код с изображения? №28
Anonymous Quiz
12%
TypeError
44%
14
8%
ValueError
29%
2 2 2 2 2 2 2
8%
Нет верного ответа
🔥6
Анонс конкурса для начинающих программистов от Telegram-канала "Код на салфетке"
Приветствуем!
Мы объявляем о конкурсе по программированию на Python для начинающих программистов!
Посмотреть анонс конкурса можно на нашем YouTube-канале!
Вся информация о задаче, условиях проведения и призе будет завтра.
Рассказывайте друзьям! Вместе будет интереснее! Также вступайте в наш чат для обсуждения!
P.S. Как оказалось, YouTube в Shorts любит не только лайки, но и время просмотра видео. Будем благодарны, если вы посмотрите видео до конца и поставите лайк. Так мы сможем получить больший охват. Спасибо!
Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram
#проект #код_на_салфетке #python #shorts #соревнование #programming #github #обучение #программирование #портфолио #конкурс
Приветствуем!
Мы объявляем о конкурсе по программированию на Python для начинающих программистов!
Посмотреть анонс конкурса можно на нашем YouTube-канале!
Вся информация о задаче, условиях проведения и призе будет завтра.
Рассказывайте друзьям! Вместе будет интереснее! Также вступайте в наш чат для обсуждения!
P.S. Как оказалось, YouTube в Shorts любит не только лайки, но и время просмотра видео. Будем благодарны, если вы посмотрите видео до конца и поставите лайк. Так мы сможем получить больший охват. Спасибо!
Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram
#проект #код_на_салфетке #python #shorts #соревнование #programming #github #обучение #программирование #портфолио #конкурс
🔥4👍1🤩1