使用 django + REST 框架时,django MVC 的哪些部分变得无关紧要?

what parts of django MVC becomes irrelevant when using django + REST framework?

最近开始学习 Django。 长话短说 -

如果我选择合并:

django 的哪个 MVC components 会变得无关紧要?
我假设 templates 组件。在这种情况下是否还有其他不需要的基本组件(model/view ...)?

根据您的 post 假设您使用 Django 只是从数据库中提取数据并以 JSON 格式将其返回给客户端,并且您的模板将被呈现 client-side(使用,例如 Angular)那么你是对的,你可能不需要 Django 模板。但是,您仍然需要某种模型(无论您使用 Django 模型还是其他东西)并且还需要控制器(Django 调用 views)以便:

  1. 进行URL路由(即绑定一些URL到一些controller/view 功能)。
  2. 进行某种 server-side 处理。即使你的应用 是一个 single-page 应用程序并进行大量 client-side 处理, 您仍然可能需要实施不同类型的业务 服务器端的要求和验证。其中一些 您可能会附加到模型的要求,但您可能会附加其他要求 需要在控制器中实现。

因此,尽管由于您构建应用程序的方式,您的控制器(又名视图)可能很多 "skinnier",但它们在某种程度上仍然是必需的。如果您想要一些干净且一致的数据库 API,模型将始终是必需的。

编辑:为了对此进行更多扩展——虽然有一个名为 Django REST Framework 的 Python 库,但它实际上只是帮助您构建 RESTful APIs。您当然可以使用 Django 自己构建 RESTful API,而无需利用它或任何其他库。正如用户 D. Shawley 在回答这个问题时所说的那样 -- What exactly is RESTful programming? -- RESTful API 基本上只是一个资源由持久标识符标识的资源(在这种情况下, URIs),以及使用一组通用动词(在本例中为 HTTP 方法,如 GET、POST、DELETE 等)操作资源的位置。因此,使用 URI 作为名词和 HTTP 方法作为动词的想法,您的 Django 框架可能支持以下 RESTful 操作:

  • GET https://your-app.com/product/123 - 此操作获取由 ID 123
  • 标识的产品
  • POST https://your-app.com/product - 此操作创建一个新产品
  • PUT https://your-app.com/product/123 - 此操作更新由 ID 123
  • 标识的产品
  • DELETE https://your-app.com/product/123 - 此操作删除由 ID 123
  • 标识的产品

从这些操作返回的数据不一定需要采用任何特定格式(可以是 JSON、XML 或其他格式)。在严格遵守 REST 原则的应用程序中,客户端(您的 RESTful API 的消费者,在本例中是您的 front-end 应用程序)将能够指定(使用 HTTP Accept header)他们想要使用哪种格式的数据。

我希望这不会太混乱,但我真的想说清楚 REST 架构只是一组原则,APIweb 程序员开发的可能不一定 100% 遵守这些原则.您的应用程序是否有必要严格遵守 RESTful 原则取决于您的特定要求。那么要问自己的一个问题是,您希望通过使用 Django 构建 RESTful API 来完成什么?对于很多开发人员来说,答案很简单 "so that I have an easy-to-use interface for my Angular/React/etc. app to retrieve and update server-side resources."