Продолжим предыдущий пост и напишем обработчик запросов.
Обработчик запросов.
Перейдём в файл api.py.
Создадим класс GetFilePath наследуемый от APIView.
Мы будем обрабатывать GET запрос, то есть бот отправит запрос на получение данных, поэтому создадим в классе статический метод get принимающий в качестве атрибута request - HTTP-запрос.
Можно создавать не только GET, но и POST, PUT, DELETE и другие типы HTTP-запросов.
Query-параметры.
В запросе, мы будем использовать query-параметры. Они передаются вместе с запросом добавляя в URL-адрес символ вопроса ? и перечисление именованных переменных, разделённых между собой знаком амперсанда &.
Например, https://pressanybutton.ru/?code=123, где code параметр, а 123 его значение.
Обработка запроса.
Создадим переменную code в которую будем получать из запроса значение одноимённого параметра.
Во избежание ошибок, если вдруг пользователь введёт не существующий код файла, обернём дальнейший код в try-except.
Внутри блока try создадим переменную file, в которую получим объект модели с совпадающим кодом. Если объект не будет найден, то дальнейший код не сработает и нас выбросит на обработку исключения, о ней чуть позже.
Успешно получив объект файла, вызовем его метод для увеличения числа загрузок.
Далее создадим переменную serialized_data в которую будет записан объект сериализованных данных.
Обработав все данные можно возвращать пользователю ответ, передав в качестве ответа JSON представление сериализованных данных.
В случае если, объект по запрошенному коду не найден, провалившись в блок except, мы сразу делаем возврат пустого значения пользователю со статус-кодом 404.
Код обработчика:
from django.core.exceptions import ObjectDoesNotExist
from rest_framework.response import Response
from rest_framework.views import APIView
from . import models, serializers
class GetFilePath(APIView):
@staticmethod
def get(request):
code = request.GET.get('code')
try:
file = models.PostFilesModel.objects.get(code=code)
file.increment_download_count()
serialized_data = serializers.FileModelSerializer(file)
return Response(serialized_data.data)
except ObjectDoesNotExist:
return Response(None, status=404)
URL-паттерн для API.
Обработчик написан, осталось только прописать URL-паттерн для обращения к нашему API.
Перейдём в файл urls.py нашего приложения. Что бы отделить паттерны страниц от паттернов API, под переменной urlpatterns, сделаем ещё одну с таким же именем. Только вместо = добавим сложение списков +=.
В новой переменной, определим список и добавим в него переменную объект паттерна.
Код urls.py.
from django.urls import path
from . import views, api
app_name = 'blog'
# Паттерны сайта
urlpatterns = [
path('', views.index, name='index'),
]
# Паттерны API
urlpatterns += [
path('bot/get-file/', api.GetFilePath.as_view()),
]
Проверяем работу.
Теперь, запустив Django и обратившись с GET запросом при помощи программы Postman или библиотеки requests по пути http://127.0.0.1:8000/bot/get-file/?code=0 получим в ответ JSON содержащий необходимые нам данные.

Комментарии
Оставить комментарийВойдите, чтобы оставить комментарий.
Комментариев пока нет.