В предыдущем посте мы закончили писать API для бота. Вернёмся к боту и напишем функционал обращения к API и отправке файла пользователю.
Обращение к API.
Начнём с написания логики обращения к API.
В пакете botlogic
создадим пакет utils
. В данном пакете, будем писать логику не связанную с ботом. В пакете создадим файл api_actions.py
.
Для отправки запросов и получения данных, нам нужна библиотека requests
. Установим её командой pip install requests
и добавим в requirements.txt
.

В начале файла создадим константу API_URL
и пропишем туда URL-адрес созданного ранее API. У меня это http://127.0.0.1:8000/bot/
.
Создадим функцию get_path
, получающую аргумент code
.
В теле функции создадим переменную response
и получим в неё ответ на запрос. Запрос будет отправлять при помощи метода requests.get()
, в параметры которого передадим API_URL + f'get-file/?code={code}'
.
В случае, если получим от API данные, тогда возвращаем из функции ответ в виде JSON.
Если же данных не будет(значит, что файла с таким кодом нет), вернём None
.
Код.
import requests
API_URL = 'http://127.0.0.1:8000/bot/'
def get_path(code):
response = requests.get(API_URL + f"get-file/?code={code}")
if response:
return response.json()
return None
Тестирование.
И для уверенности, что всё работает можно прямо здесь и протестировать.
После функции напишем print(get_path(0))
, запустим Django в отдельном окне IDE и запустим наш скрипт. В выводе терминала должны получить JSON
, похожий на питоновский словарь.
{'title': 'Тестовый файл', 'file_path': 'C:\\Users\\proDream\\PycharmProjects\\pressanybutton\\pressanybutton\\media\\post_files\\68.zip'}

Отлично. API отрабатывает. Удалим принт, что бы при вызове функции не было лишних вызовов.
Подготовка.
Подготовим всё необходимое к следующему посту.
В этом же пакете utils
создадим файл statesform.py
и commands.py
. В файле statesform.py
мы будем хранить группы состояний для машины состояний. В файле commands.py
будет список команд бота, которые будут отображаться в виде кнопки меню у пользователя.
Команды бота, заготовка.
Давайте сразу пропишем будущие команды, пусть их пока и нет.
Откроем файл commands.py
и напишем асинхронную функцию set_commands
в аргументы которой будет передаваться экземпляр класса Bot
.
В теле функции создадим переменную commands
и присвоим ей список. В списке будут находиться объекты класса BotCommand
, в параметры которого передаётся команда и описание.
Ниже запустим метод, присваивающий написанный ранее список команд нашему боту.
Код команд:
from aiogram import Bot
from aiogram.types import BotCommand, BotCommandScopeDefault
async def set_commands(bot: Bot):
commands = [
BotCommand(
command='start',
description='Начало работы'
),
BotCommand(
command='get_file',
description='Получить материалы'
),
BotCommand(
command='about',
description='Информация о боте'
)
]
await bot.set_my_commands(commands, BotCommandScopeDefault())

Подключаем меню с командами.
Откроем файл events.py
в пакете handlers
. В функции start_bot
перед отправкой сообщения добавим добавление команд в меню:
from botlogic.utils.commands import set_commands
async def start_bot():
await set_commands(bot)
await bot.send_message(Secrets.admin_id, start_bot_msg())

Комментарии
Оставить комментарийВойдите, чтобы оставить комментарий.
Добрый день.
Скажите, как узнать свой URL-адрес?
Про API_URL? В посте указан путь до локального веб-сервера Django из постов в соседнем разделе "Сайт на Django".