实验7、Django VS Flask VS Node:如何选择

实验介绍

1. 实验内容

在本教程中,我们将详细介绍Django和Flask之间的比较。Flask和Django是基于Python的Web开发框架。许多正在朝着轻型微框架发展。这些框架敏捷,灵活,小巧,有助于开发微服务和无服务器应用程序。

考虑到NodeJS的流行,我们在Flask vs. Node部分下提供了Flask和Node的惊人对比。在以下功能上评估Django和Flask将帮助您选择一个。

2. 实验要点

  • 学习和掌握Flask与Django的区别
  • 学习和掌握Flask与NodeJS的区别

Flask VS Django

默认Admin管理

这两个框架都提供了一个引导管理应用程序。在Django中,它是内置的,并带有默认安装。但是,对于Flask,您需要安装Flask-Appbuilder才能具有管理界面。同时,请记住在Flask的情况下在Django和admin中创建一个超级用户,以便您可以使用浏览器登录到admin后端。

数据库与ORMS

Django附带了一个默认的内置ORM,它完全支持与RDBMS(例如Oracle,MySQL,PostgreSQL,SQLite等)进行交互。该ORM还支持迁移的生成和管理。使用内置验证来创建数据库模型相对来说比较实用。Flask不强加任何一种特定的方法,并且可以与支持类似于Django所概述的相似功能的各种扩展一起使用。在该系列教程之一中,我们给出了Flask-SQLAlchemy,Flask-Migrate,Flask-MongoEngine的示例。

视图与route

这两个框架都有声明基于方法和基于类的视图的机制。在Django中,路由和视图在单独的文件中提到。另外,我们总是需要显式传递请求对象。另一方面,在Flask中,我们可以使用装饰器来提及相应处理程序的route。Flask中的请求对象是全局的,仅在没有任何显式传递的情况下可用。在我们的教程之一中,我们详细介绍了使用视图和route的概念。

表单与模板

Django表单内置在框架中,无需安装。表单对于应用程序而言非常重要,在Django中,表单可以传递给模板标签,并且可以在模板中呈现。但是,对于Flask,我们需要使用Flask-WTF。我们还使用了Flask-Appbuilder创建表单。而且,WTF-Alembic可以用于基于数据库模型生成HTML表单。这两个框架都支持Jinja2模板,并且都支持带有内置函数的静态文件服务以生成资源的URL,这在当今的所有框架中都是很常见的模式。尽管传递变量和以其特定的查看方法呈现模板的方式不同,但是这两种框架在访问模板中的变量时都具有相同的语法。

灵活性

Django由于其庞大的规模和复杂性,不如Flask灵活。Flask可以通过其支持的大量扩展轻松扩展。因此,由于我们需要评估更多扩展,因此需要更多的时间和精力来安装Flask。给予开发人员某种程度的自由会导致开发和交付速度变慢。另一方面,Django遵循了一组已经建立的约定,并且遵循的原型要求与项目目的和目标的偏差较小。

学习曲线

学习Django和Flask几乎需要相同的时间。Flask的API较小;因此,就核心框架而言,人们也许能够更快地完成它。在使用扩展时,它也同样具有挑战性。很快可能会变得很麻烦。但是,由于并非所有内容都打包在一个包中,因此在Flask框架的情况下,更容易实现关注点分离。我们建议您学习模式,而不要学习语法。Django和Flask都有出色的文档。开发功能时,您可以轻松地遵循它。

项目规模和期限

当您与较大的团队一起进行较大的项目时,最好利用Django的成熟性及其广泛的贡献者支持。如果您的项目较小并且需要较少的开发人员,则最好使用Flask。而且,如果您的项目要持续很长时间,那么Django是正确的选择。否则,您可以选择Flask。

应用程序类型

当需要成熟的企业级Web应用程序时,早期的Django被认为是正确的选择。但是,今天Flask同样成熟,可以在相同条件下很好地使用。但是,开发人员倾向于选择Flask来开发小型或静态网站,或者在实现快速交付RESTful API Web服务时选择。

开发人员招聘

在您使用的框架约定中拥有熟练的资源将物有所值。您可以期望更快的开发,更快的测试,更快的交付和更快的问题修复。

在Flask的情况下,找到新的开发人员非常容易。但是,在Django中寻找熟练的资源非常困难。Django开发人员没有太多可供雇用的人才。而且,Django框架已经很老了,因此,与熟练使用Flask框架的人相比,大多数新雇员的聘用成本都很高。

刚毕业的技术人员也正在选择诸如Flask之类的轻型框架,因为行业趋势正在朝着使用去耦微服务或支持创建无服务器实现的技术创建应用程序。Javascript与更易于使用和流行的框架一起被广泛使用。

开源

Flask和Django都是开源项目。您可以在此处找到Django,在此处找到Flask。从这些项目来看,Django的贡献者数量远远多于Flask的贡献者。

因此,如果我们有一些需要解决的问题和查询,我们可以期望获得更多更快的支持。与典型的假设相反,Flask项目的用户数量高于Django。

关于Flask的一个令人担忧的事实是,对于特定任务可能没有稳定的扩展。因此,评估出最佳选择的工作仍由扩展程序的用户承担。

频繁维护是一个开源项目将面临的典型挑战。开源项目的支持和管理通常与付费服务相关。您可能需要等待很长时间才能使项目的贡献者解决一些问题。

性能

Flask框架比Django轻巧,并且在差异可忽略的情况下表现更好,尤其是在考虑I / O操作时。

看一下下面给出的比较。随着需求的增加,Flask的性能几乎保持不变。但是,Django使用ORM提取数据后需要花费更多时间来呈现模板。

![img](C:\Users\YunHai\Desktop\Flask课程资源\新建文件夹\img\实验7、Django VS Flask VS Node:如何选择\1488ll1610678607.png)

Flask VS Django表格比较

# 特点 Django Flask
1 默认Admin管理 内置管理后端 安装Flask-Appbuilder
2 启用默认管理员 在settings.py下
INSTALLED_APPS=['django.contrib.admin']
从flask_appbuilder导入AppBuilder和SQLA,首先初始化数据库,然后从flask初始化Appbuilder从flask_appbuilder导入Flask导入AppBuilder,SQLA
app = Flask(__ name__)
db = SQLA(app)
appbuilder = AppBuilder(app,db.session)
3 创建管理员用户 python manager.py createsuperuser flask fab create-admin
4 数据库与ORMS 使用RDBMS的内置ORM将Django-nonrel用于NoSQL后端 安装Flask-SQLAlchemy一种NoSQL特定的Flask-Extension,例如Flask-MongoEngine
5 视图与route 视图信息存在urls.py

from django.urls import path
from .import views
urlpatterns = [path('/path',view.handler_method)]
views.py下使用@app.route("/path")装饰器可以设置route

@app.route("/path")
def handler_method()
6 渲染模板 在视图中
from django.shortcuts import render
def example_view(request):
tempvar="value_for_template"
return render(request, 'demo.html', {'tempvar':tempvar}
from . import app
from flask import request, render_template
@app.route("/path")
def demo():
temp_var="value_for_template"
return render_template("demo.html", temp_var=temp_var
7 模板中的变量 templates/demo.html
{{tempvar}}
templates/demo.html
{{tempvar}}
8 灵活性 不够灵活 更灵活
9 设计决策 开发人员仅需要进行较少的设计决策 开发人员自由度更高
10 项目偏差 与项目目标的偏差较小 由于自由度导致偏差较大
11 源代码大小 较大 较小
12 API数量
13 应用程序类型 完整的Web应用程序 微服务、较小的应用程序
14 RESTful应用 用于RESTful应用程序的Django REST框架 需要使用以下拓展之一
Flask-RESTful
Flask-RESTX
Connecxtion
15 性能 请求数量大时性能降低 始终保持一致的性能
16 开发贡献
17 开发者 需要经验丰富的开发人员,因此不容易招募 大多数开发人员经验不足,数量充足

Flask VS NodeJS

关于Web开发堆栈,事实证明,为Web开发需要融合各种技术。我们需要将Web应用程序分解为前端和后端。应用程序的前端部分是使用浏览器中运行的技术(例如JavaScript,HTML和CSS)进行最佳开发的。

通常,后端以适合服务器端的语言开发,并在需要时可以与基础操作系统,连接的数据库或网络进行交互。

但是,一个名为NodeJS的基于JavaScript的框架改变了上述观点,使开发人员能够在Web应用程序的前端和后端开发中保持一致和统一。开发人员可以使用JavaScript为后端开发。

在此Flask与Node的部分中,我们将Flask(基于Python编程语言的框架)与Node(其基于Chrome的JavaScript运行时,并基于各种标准,例如架构,速度,社区支持等)进行了比较。

通常,后端是用适合服务器端的语言开发的,并且在需要时可以与底层操作系统、连接的数据库或网络交互。

然而,一个名为NodeJS的基于javascript的框架改变了上述观点,使开发人员能够在web应用程序的前端和后端开发中保持一致性和一致性。开发人员可以使用JavaScript进行后端开发。

在Flask vs Node部分,我们比较了Flask和Node,前者是基于Python编程语言的框架,后者是基于Chrome的JavaScript运行时,在各种标准上,比如架构,速度,社区支持等。

Flask VS NodeJS表格比较

# 标准 Flask Node
1 语言运行环境 Python Chrome‘s V8 JavaScript 引擎
2 体系结构 非阻塞I / O需要使用非阻塞Web服务器,例如gunicorn。
微框架(后端)类别。
内置提供非阻塞I / O。
全栈类别
3 包管理 pip npm
4 速度 由于Python解释器速度较慢 JIT,速度很快
5 开发社区支持 Github
2.3 K Watches
51.4 K Stars
13.7 K Forks
Github
2.9 K Watches
71.9 K Stars
17.6 K Forks
6 调试 使用Python调试器更容易调试,而无需依赖。 需要配置。
使用带有Bluebird / Promise库的开发IDE更容易。
7 维护 低维护成本 高维护成本
8 实时应用 自身没有相应功能。但是,它可以与socket.io一起用于实时用例。使用Flask-socketio扩展。 由于事件驱动的体系结构和流模块而适合。本质上是异步的。
9 开发库 更成熟更稳定 成熟性和稳定性较差,仍在积极开发和修订内容
10 代码质量 专门用于后端开发 前后端耦合度高
11 开发团队组成 团队通常由后端开发人员和前端开发人员组成。关注点是分开的。 开发人员可以交换角色为前端和后端工作。
12 与现有系统和应用程序集成 使用Python的机器学习和大数据应用程序生态系统,可以更轻松地与其他现有的旧版后端应用程序集成。 相对较新,需要创建自定义或新的库以与其他现有应用程序集成。

实验总结

总结

我们不应该在一个框架上停留太久。我们应该准备好学习新的技术集,并顺应趋势。我们中的一些人想要开箱即用,使用严格的发布周期,保持更紧密的向后兼容性,等等。

如果你认为你属于这种类型,那么你必须选择Django。然而,Flask框架的新特性和灵活性的发展是令人难以置信的。如果你想保持前端和后端之间的一致性,你可以选择一个全栈框架,比如NodeJS。

使用框架更多的是一种选择,取决于我们想要解决的环境和问题。选择一个框架总是很困难的。我们希望我们已经在本教程中提出了基本的复习要点,它将帮助您最终确定一个框架。但是,我们建议学习这两个框架。

从Flask开始,在获得一些Web开发经验后再转到Django会更容易一些。如果由于某些原因,您的开发工作需要使用JavaScript,那么您可以继续使用NodeJS。

常见问题

Q:Django和Flask应该从哪个先开始?
A:最好先学习Flask。一旦您掌握了一些Web开发经验,就可以开始学习Django。Django假定您已经知道Web应用程序的工作方式,并且它自己可以处理大多数功能。

Q:Flask和Django哪个更好?
A: Flask和Django都非常优秀,并满足开发的需求。Django用于创建更出色的企业级应用程序。Flask用于创建静态和较小的应用程序。Flask也适用于原型制作。但是,通过使用Flask扩展,我们也可以创建大型应用程序。

Q:哪些公司使用Flask?
A:使用Flask的公司包括Reddit,Mailgun,Netflix,Airbnb等。

Q:哪些网站使用Django?
A:使用Django的一些网站包括Instagram,Spotify,YouTube,Dropbox,Bitbucket,Eventbrite等。

posted @ 2021-05-12 23:05  liuyang9643  阅读(2688)  评论(0编辑  收藏  举报