Django 和 Node——它是如何工作的?

Django and Node – how does it work?

为了制作具有 RESTful 功能的 Web 应用程序,我阅读并观看了大量的文章和视频,但我仍然没有完全了解它是如何工作的。我应该选择哪个。其他所有答案都是无用的“视情况而定”。我将其归结为 Django 和 Node.js 之间的首选。但是我在任何地方都找不到关于各个部分如何协同工作以及需要哪些模块的完整“图景”。因此,我试图将所有内容都放在一个粗略的说明中。请注意,我是这方面的新手。

我开发了一个带有会计模块的 ERP 应用程序。基本上除了看图、打印、存储文档以外,主要是CRUD。所以这就是“视情况而定”

我唯一能做出决定的就是使用 nginx、Postgresql 和 Debian 8 tools/os。这些是恒星。

我的问题不是真正常见的 Django vs Node.js,这不仅仅是我想要的意见:

  1. 下图正确吗?有什么意见吗?
  2. 是否还需要其他组件?要开始了吗?

您有 很多 个问题 - 在 Whosebug 上应该有一个问题可以在不引起大量争论或有意见而不是事实的情况下得到回答。

因此,我认为您的问题可能会被关闭 "too broad";但是我认为它值得一个答案。

我不会说 "it depends",虽然这就是所有归结为 - 但我试图解释它。

nodejs是一个运行时代。它是一个允许您使用 javascript 在服务器上开发代码的环境。为了对 nodejs 做任何有用的事情,超越 "hello world";您将需要使用一个框架,并且周围有大量的框架,并且社区已经开发了各种堆栈来将所有组件绑定在一起。这种堆栈的一个例子是 MEAN,它是 MongoDB 用于数据库,Express 用于框架,Angular 用于协助前端,而 Node 用于 运行 这一切。

django 是一个框架 - 它不是 运行时代。这意味着它是从节点世界中移除的一步。 运行django 的时间是 Python。 django 也不是像 MEAN 那样的 "stack",你可以在它之上开发你自己的堆栈 - 但由于 django 是一个 "batteries included" 框架,你只需要向它添加一个数据库 - 它包括一切否则你需要。

REST 只是一种设计网络服务的方式。它不是一种语言,也不是一个平台或一个图书馆。它是一组规则,描述了一种设计 API 的方法,以便它们利用 HTTP 的语义动词。

您可以使用任何库和编程语言来开发 RESTful 服务。您真正需要的只是两件事 [a] 一个通过 HTTP 进行通信的库 [b] 一种序列化数据的方式,最好是 JSON(但这也不是必需的)。

nginx 只是一个非常快速的网络服务器和反向代理。它经常被提及的原因是因为框架为静态媒体提供服务非常昂贵。所有对框架的请求(无论是在 django 世界中,还是在 nodejs 世界中)都必须经过一个大型组件链,这些组件有助于解码 HTTP 请求并创建一个易于开发人员使用的数据结构。这个组件链通常称为中间件。由于每个请求都必须通过这个中间件,出于性能原因,不需要应用程序的 "power" 来执行的请求(例如对图像、样式表、视频文件的请求)更好) 由其他东西处理。这就是 nginx 的用途,因为它是一个非常快的网络服务器。


既然已经解释了这些,您需要了解哪种堆栈最适合您的应用程序。为此,您需要了解一些 philosophy/justification 或每个堆栈试图解决的问题。

对于 django - 这很容易。 Django 是由一个在多家报纸上工作的团队创建的,以帮助他们管理在不同站点上发布的内容。因此,它的设计使内容管理成为首要关注的问题。这就是为什么它有一个非常强大的管理控制台作为标准组件;以及一个内置的非常强大的 ORM 和它自己的模板引擎。 Django 让您自己决定如何最好地 运行 并部署它;尽管他们确实提供了很多建议和示例 - 但最终还是由您决定使用哪个数据库、使用哪个 Web 服务器以及如何部署应用程序。

在 nodejs 世界中 - 主要焦点是非阻塞I/O响应速度。 Nodejs 擅长在有限的资源上同时处理大量请求。因此,它为您提供了一个非常强大的基础来开发需要快速响应请求的应用程序……仅此而已。当您在节点或任何其他专门的低级别库中编程时,您需要确保您的代码充分利用该库。所以,如果你开始在 node 中编写阻塞代码,你会发现你期望的性能并没有达到。

nodejs 不关心应用程序实际做什么。把它想象成一个非常快速、非常强大的工具。您可以使用它构建任何东西,但您需要了解该工具的最佳用途,以便知道何时使用它。

nodejs 让你在较低的层次上工作——这就是为什么有很多包可以帮助你用 node 做各种各样的事情;以及多种获取组件和创建自己的堆栈的方法——取决于您在节点之上构建的内容。把它想象成乐高积木。

nodejs 和 django 并不相互排斥。您可以在您的应用程序中同时利用它们并发挥它们的优势,并充分利用它们的长处。


就您的具体问题而言:

Did I get the picture? Any comments?

我不知道。有吗?

Is there any further components that will be needed? To get started?

答案是肯定的,因为您不想从头开始构建所有内容。每个堆栈都有自己的用于开发服务的库组件。对于django,有django rest framework (DRF)。

Which framework are best for CRUD? Which framework are best for RESTful? Any other module needed? Best report generator for printing? Best diagram tools?

没有什么是 "best" 的。这个问题只是征求意见。就像在问什么果汁最好喝?

Which framework are fastest and most reliable for CRUD using Postgresql

人们已经在 postgresql 之上开发了许多健壮的应用程序;然而,由于 nodejs 绑定到 javascript - 在这方面还有很多工作要做。

Can I lock the library (trade secrets) in both environments?

是的。

Is there better tools for creating ERP/Accounting?

ERP 和会计是两个截然不同的东西。 Python 中有大量会计 packages/applications。用Python.

写的ERP系统很少

不能将两者结合起来混为一谈。

What is the benefits using Angular on top of Node.js?

在 _____ 之上使用 Angular 的相同好处(插入您最喜欢的后端)。 Angular 只是一个前端库。

一个有趣的好处是 Angular 和 Node 使用相同的编程语言。