实验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提取数据后需要花费更多时间来呈现模板。

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 pathfrom .import viewsurlpatterns = [path('/path',view.handler_method)] |
在views.py下使用@app.route("/path")装饰器可以设置route@app.route("/path")def handler_method() |
| 6 | 渲染模板 | 在视图中from django.shortcuts import renderdef example_view(request):tempvar="value_for_template" return render(request, 'demo.html', {'tempvar':tempvar} |
from . import appfrom 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-RESTfulFlask-RESTXConnecxtion |
| 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等。
实验7、Django VS Flask VS Node:如何选择的更多相关文章
- Django和Flask对于URL尾斜杠(back slash)的处理
最近在看Flask,其中提到了对于URL尾斜杠的处理.感觉算是一个需要注意的地方吧,就和Django的处理方式来进行一个简单的对比. 首先说下什么是尾斜杠. http://www.baidu.com/ ...
- [ 转载 ] Python Web 框架:Django、Flask 与 Tornado 的性能对比
本文的数据涉及到我面试时遇到过的问题,大概一次 http 请求到收到响应需要多少时间.这个问题在实际工作中与框架有比较大的关系,因此特别就框架的性能做了一次分析. 这里使用 2016 年 6 月 9 ...
- django和flask的区别
转载至https://blog.csdn.net/tulan_xiaoxin/article/details/79132214 (1)Flask Flask确实很“轻”,不愧是Micro Framew ...
- Django和Flask的区别以及运行流程
Django: Python Web框架里比较有名当属Django,Django功能全面,它提供一站式解决方案,集成了MVT(Model-View-Template)和ORM,以及后台管理.但是缺点也 ...
- 选择一个 Python Web 框架:Django vs Flask vs Pyramid
Pyramid, Django, 和 Flask都是优秀的框架,为项目选择其中的哪一个都是伤脑筋的事.我们将会用三种框架实现相同功能的应用来更容易的对比三者.也可以直接跳到框架实战(Framework ...
- 真正搞明白Python中Django和Flask框架的区别
在谈Python中Django框架和Flask框架的区别之前,我们需要先探讨如下几个问题. 一.为什么要使用框架? 为了更好地阐述这个问题,我们把开发一个应用的过程进行类比,往往开发一个应用(web应 ...
- 测试开发中Django和Flask框架
Python测试开发中Django和Flask框架 为了更好地阐述这个问题,我们把开发一个应用的过程进行类比,往往开发一个应用(web应用.系统应用)跟建造房子的过程一样,需要先打地基,搭好骨架,然后 ...
- Django和Flask框架学习目录
Django目录 Django基本配置与URLconf DjangoMTV模型之视图层views及模板层template DjangoMTV模型之model层——ORM操作数据库(基本增删改查) Dj ...
- Django、Flask、Tornado的比较
一:常用请求参数的接收 Django中: request.GET/POST Tornado中: self.get_query_argument()/get_query_arguments() self ...
随机推荐
- Portswigger web security academy:HTTP request smuggling
HTTP request smuggling 目录 HTTP request smuggling HTTP request smuggling, basic CL.TE vulnerability H ...
- 【tee小白的第一篇随笔】keystone代码略读
武大信安在读,最近在自学Risc-v架构的可信执行环境. (实验报告多半是为了交差.临时起意写写博客,分享一些自己读代码的心得理解.) 本篇内容由队和我友总结而成,如有错误欢迎指正交流. keysto ...
- SpringBoot系列——Activiti7工作流引擎
前言 工作流程是我们日常开发项目中常见的功能,本文记录springboot整合activiti7. Activiti介绍 官网:https://www.activiti.org 数据库表 act_hi ...
- MySQL字段默认值设置详解
前言: 在 MySQL 中,我们可以为表字段设置默认值,在表中插入一条新记录时,如果没有为某个字段赋值,系统就会自动为这个字段插入默认值.关于默认值,有些知识还是需要了解的,本篇文章我们一起来学习下字 ...
- Linux下ftp搭建
FTP服务器搭建教程: https://blog.csdn.net/plssmile/article/details/17061271 https://blog.csdn.net/guofengdid ...
- Linux性能分析利器——火焰图的安装使用
火焰图(flame graph)是性能分析的利器,通过它可以快速定位性能瓶颈点. perf 命令(performance 的缩写)是 Linux 系统原生提供的性能分析工具,会返回 CPU 正在执行的 ...
- 025.Python面向对象以及对对象的操作
一 面向对象基本概念 1.1 OOP面向对象的程序开发 用几大特征表达一类事物称为一个类,类更像是一张图纸,表达只是一个抽象概念 对象是类的具体实现,更像是由这图纸产出的具体物品,类只有一个,但是对象 ...
- S6 文件备份与压缩命令
6.1 tar:打包备份 6.2 gzip:压缩或解压文件 6.3-4 zip.unzip 6.5 scp:远程文件复制 6.6 rsync:文件同步工具
- Python break/continue - Python零基础入门教程
目录 一.break 二.continue 三.重点总结 四.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 在 Python wh ...
- iapp后台一本通php源码+iapp源码
给大家分享一个后台源码,内有后台php源码,还有iapp对接源码,一本通 iapp+ PHP源码 经过一个小时的研究看看,测试了一下, 1.注册登录以修复正常,签到正常 2.所有工具正常 3.接口,i ...