Я новичок в Django REST Framework и мне нужен ваш совет. Я занимаюсь разработкой веб-сервиса. Служба должна предоставлять интерфейс REST другим службам. Интерфейс REST, который мне нужно реализовать, не работает с моими моделями напрямую (я имею в виду операции get, put, post, delete). Вместо этого он предоставляет другим службам некоторые результаты расчетов. По запросу мой сервис выполняет некоторые вычисления и просто возвращает результаты обратно (не сохраняет результаты в своей собственной базе данных).
Ниже мое понимание того, как этот интерфейс REST может быть реализован. Поправь меня, если я ошибаюсь.
- Создать класс, который делает вычисления. Назовите его «CalcClass». CalcClass использует модели в своей работе.
- Параметры, необходимые для расчетов, передаются в конструктор.
- Реализуйте операцию calc. Возвращает результаты как ResultClass.
- Создать ResultClass.
- Получено от объекта.
- Он имеет только атрибуты, содержащие результаты вычислений.
- Одна часть результатов вычислений представлена как кортеж кортежей. Как я понимаю, для дальнейшей сериализации было бы лучше реализовать отдельный класс для этих результатов и добавить список таких объектов в ResultClass.
- Создать сериализатор для ResultClass.
- Производные от сериализаторов. Сериализатор.
- Результаты вычислений доступны только для чтения, поэтому для полей используйте в основном класс Field, а не специализированные классы, такие как IntegerField.
- Я не должен включать метод save () ни в ResultClass, ни в Serializer, потому что я не собираюсь хранить результаты (я просто хочу вернуть их по запросу).
- Impl сериализатор для вложенных результатов (помните кортеж из упомянутых выше кортежей).
- Создать представление, чтобы вернуть результаты расчета.
- Получено из APIView.
- Нужно просто получить ().
- В get () создайте CalcClass с параметрами, полученными из запроса, вызовите его calc (), получите ResultClass, создайте Serializer и передайте ему ResultClass, верните Response (serializer.data).
- URL-адрес
- В моем случае нет корня API. Мне просто нужно иметь URL-адреса, чтобы получить различные результаты вычислений (calc с diff-параметрами).
- Добавьте вызов format_suffix_patterns для просмотра API.
Я что-то пропустил? Правильный ли подход в целом?
django
rest
django-rest-framework
Захара
источник
источник
Ответы:
Django-rest-framework работает хорошо даже без привязки к модели. Ваш подход звучит хорошо, но я считаю, что вы можете обрезать некоторые шаги, чтобы все заработало.
Например, инфраструктура отдыха поставляется с несколькими встроенными средствами рендеринга. Из коробки он может вернуть JSON и XML потребителю API. Вы также можете включить YAML, просто установив необходимый модуль Python. Django-rest-framework выведет любой базовый объект, такой как dict, list и tuple, без дополнительной работы с вашей стороны.
Таким образом, в основном вам нужно только создать функцию или класс, который принимает аргументы, выполняет все необходимые вычисления и возвращает результаты в виде кортежа в представление REST API. Если JSON и / или XML соответствуют вашим потребностям, django-rest-framework позаботится о сериализации для вас.
В этом случае вы можете пропустить шаги 2 и 3 и просто использовать один класс для вычислений и один для представления потребителю API.
Вот несколько фрагментов, которые могут вам помочь:
Обратите внимание, что я не проверял это. Это только в качестве примера, но это должно работать :)
CalcClass:
ОТДЫХ:
Ваш urls.py:
Этот код должен выводить список списков при доступе к http://example.com/api/v1.0/resource/?format=json . Если вы используете суффикс, вы можете заменить его
?format=json
на.json
. Вы также можете указать кодировку, которую хотите получить, добавив"Content-type"
или"Accept"
к заголовкам.Надеюсь, что это помогает вам.
источник
.model
или.queryset
свойство.». Я попробовал точный пример при условии. Может ли это быть что-то с недавней версией django-rest-framework?В файле urls.py функция login_required требует
источник
add a comment
сессии