Какие части django MVC становятся неактуальными при использовании django + REST framework?
Недавно начал изучать Джанго. Короче говоря,
Если я решу объединить:
- Django Framework на моей стороне сервера
- REST как слой промежуточного программного обеспечения
- некоторые из клиентских сред (например, React, Angular и т. д.)
какой из компонентов django MVC станет неактуальным?
Я предполагаю, что шаблоны компонентов. Существуют ли какие-либо другие фундаментальные компоненты (модель / вид...), которые в этом случае не понадобятся?
1 ответ
Исходя из вашего сообщения, что вы используете Django просто для извлечения данных из базы данных и передачи их обратно клиенту в формате JSON, и что ваши шаблоны будут отображаться на стороне клиента (используя, например, Angular), тогда вы правы, что вы скорее всего, вам не понадобятся шаблоны Django. Однако вам все равно потребуются какие-то модели (используете ли вы модели Django или что-то еще), а также контроллеры (которые Django называет представлениями) для того, чтобы:
- Выполните маршрутизацию URL (то есть, привязайте некоторый URL к некоторому контроллеру / функции просмотра).
- Сделайте некоторую обработку на стороне сервера. Даже если ваше приложение представляет собой одностраничное приложение и выполняет много операций на стороне клиента, вам все равно, вероятно, потребуется реализовать различные виды бизнес-требований и проверки на стороне сервера. Некоторые из этих требований вы, вероятно, можете присоединить к моделям, но другие вам может потребоваться реализовать в контроллерах.
Таким образом, хотя ваши контроллеры (иначе говоря, представления) могут быть намного "худее" из-за того, как вы структурируете свое приложение, они все равно будут в некоторой степени необходимы. Модели всегда будут необходимы, если вы хотите иметь чистый и согласованный API для вашей БД.
РЕДАКТИРОВАТЬ: Чтобы расширить это - хотя есть библиотека Python под названием Django REST Framework, она действительно только для того, чтобы помочь вам в создании RESTful API. Вы, конечно, можете создать RESTful API самостоятельно, используя Django, не используя его или какие-либо дополнительные библиотеки. В ответе пользователя D. Shawley на этот вопрос говорится: что такое RESTful-программирование? - API-интерфейс RESTful - это, по сути, всего лишь один, в котором ресурсы идентифицируются с помощью постоянного идентификатора (в данном случае URI), а ресурсы управляются с использованием общего набора глаголов (в данном случае, таких методов HTTP, как GET, POST, DELETE, так далее). Поэтому, используя эту идею URI в качестве существительных и HTTP-методов в качестве глаголов, ваша инфраструктура Django может поддерживать следующие операции RESTful:
GET
https://your-app.com/product/123
- эта операция выбирает продукт, идентифицированный по идентификатору123
POST
https://your-app.com/product
- эта операция создает новый продуктPUT
https://your-app.com/product/123
- эта операция обновляет продукт, идентифицированный по идентификатору123
DELETE
https://your-app.com/product/123
- эта операция удаляет продукт, идентифицированный по идентификатору123
Данные, возвращаемые этими операциями, необязательно должны быть в каком-либо конкретном формате (будь то JSON, XML или что-то еще). В приложении, которое строго придерживается принципов REST, клиент (потребитель вашего RESTful API, в данном случае ваше интерфейсное приложение) сможет указать (используя HTTP Accept
заголовок) в каком формате они хотят использовать данные.
Я надеюсь, что это не слишком смущает, но на самом деле я хочу прояснить, что архитектура REST - это просто набор принципов, и API-интерфейсы, которые разрабатывают веб-программисты, могут не обязательно придерживаться этих принципов на 100%. Необходимость строгого соблюдения вашим приложением принципов RESTful зависит от ваших конкретных требований. Тогда задайте себе один вопрос: чего вы надеетесь достичь путем создания RESTful API с использованием Django? Для многих разработчиков ответ прост: "чтобы у меня был простой в использовании интерфейс для моего приложения Angular/React/ и т. Д. Для извлечения и обновления ресурсов на стороне сервера".