实验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 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等。
实验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 ...
随机推荐
- 每天一道面试题LeetCode 26--删除排序数组中的重复项(python实现)
题目1:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. ...
- 使用Github+Picgo搭建图床
虽然我的大部分博客使用的腾讯云的对象存储(COS)作为图床,但是腾讯云的免费对象存储空间结束了,购买资源西南地区大致存储资源包50元/12月+下行流量9元/3月,价格较为高昂,而使用GitHub或者G ...
- 学javaweb 先学Servlet 应用理论很重要
package cn.Reapsun.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.ser ...
- 脱壳入门----常见的寻找OEP的方法
一步直达法 所谓的一步直达法就是利用壳的特征.壳一般在执行完壳代码之后需要跳转到OEP处,而这个跳转指令一般是call ,jmp ,push retn类型的指令,而且因为壳代码所在的区段和OEP代码所 ...
- Java并发编程(二)如何保证线程同时/交替执行
第一篇文章中,我用如何保证线程顺序执行的例子作为Java并发系列的开胃菜.本篇我们依然不会有源码分析,而是用另外两个多线程的例子来引出Java.util.concurrent中的几个并发工具的用法. ...
- windows调起git bash执行sh脚本定时统计git仓库代码量
本来挺简单的一个东西硬是弄了两天 心力交瘁 找了网上不少资料 整理一下发给大家 首先是统计每个人的代码量的git命令 在网上找的 我这里做了以下修改 git log --format='%aN'|so ...
- 【BUAA软工】结对编程作业
项目 内容 课程:2020春季软件工程课程博客作业(罗杰,任健) 博客园班级链接 作业:BUAA软件工程结对编程项目作业 作业要求 课程目标 学习大规模软件开发的技巧与方法,锻炼开发能力 作业目标 完 ...
- Cookie&Session-授课
1 会话技术 1.1 会话管理概述 1.1.1 什么是会话 会话:浏览器和服务器之间的多次请求和响应 为了实现一些功能,浏览器和服务器之间可能会产生多次的请求和响应,从浏览器访问服务器开始,到访问服务 ...
- Spring Boot 允许跨域设置失败的问题深究
在公司开发过程中,一个前后端分离的项目遇见了跨域的问题. 前端控制台报错:No 'Access-Control-Allow-Origin' header is present on the reque ...
- [刷题] PTA 02-线性结构1 两个有序链表序列的合并
程序: 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef int ElementType; 5 typedef st ...