Flask和Django是Python最流行的两个Web框架(尽管还有更多 )。 在这篇文章中,我将讨论在Flask和Django之间进行选择时应该考虑的一些要点。 我们还将在每个应用程序中使用“Hello,World”应用程序,以便更好地了解它们的工作方式。
(注意:我是Flask的长期用户和Flask by Example的书的作者,所以我个人对Flask有点偏见。我会尽可能保持这个概述的目标)。
- 等等,为什么我需要一个Web框架
- 快速比较
- 你好,世界!
- 最后的评论
等等,为什么我需要一个Web框架。
当您第一次开始开发Python应用程序时,您可能开发了所谓的“命令行应用程序”。 用户必须在shell或命令提示符下运行这些脚本,并将输入作为参数或通过标准输入传递。 几年前,构建这些应用程序的自然进展是构建桌面应用程序 - 一个允许用户使用鼠标和键盘进行交互的程序,其中包含菜单和其他交互元素。 目前,过渡到构建Web应用程序更为常见 - 您的用户将通过其Web浏览器与您的程序进行交互。 为了更好地概述为什么Web应用程序可以说比桌面应用程序更好,请参阅Patrick“patio11”McKenzie的帖子:http://www.kalzumeus.com/2009/09/05/desktop-aps-versus-web-apps/ 。
当您第一次开始开发Python应用程序时,您可能开发了所谓的“命令行应用程序”。 用户必须在shell或命令提示符下运行这些脚本,并将输入作为参数或通过标准输入传递。 几年前,构建这些应用程序的自然进展是构建桌面应用程序 - 一个允许用户使用鼠标和键盘进行交互的程序,其中包含菜单和其他交互元素。 目前,过渡到构建Web应用程序更为常见 - 您的用户将通过其Web浏览器与您的程序进行交互。 为了更好地概述为什么Web应用程序可以说比桌面应用程序更好,请参阅Patrick“patio11”McKenzie的帖子:http://www.kalzumeus.com/2009/09/05/desktop-aps-versus-web-apps/ 。
确切地说,框架中实现的内容以及应用程序开发人员编写的内容因框架而异。 Flask和Django之间的最大区别是:
- Flask实现了最低限度的功能,并为附加组件或开发人员留下了铃声和口哨声
- Django遵循“包含电池”的理念,为您提供更多开箱即用的功能。
我们现在将更详细地讨论它们的不同之处。
快速比较
如果您在这里寻求快速解答,本节适合您!
主要对比:
- Flask提供简单 , 灵活和细粒度控制 。(它可以让你决定如何实现它)。
- Django提供全面的体验:您可以获得开箱即用的应用程序和项目的管理面板 , 数据库接口 , ORM和目录结构。
你应该选择:
- Flask,如果您专注于体验和学习机会,或者您想要更多地控制使用哪些组件(例如您想要使用哪些数据库以及如何与它们进行交互)。
- Django,如果你专注于最终产品。 特别是如果你正在开发一个直接的应用程序,如新闻网站,电子商店或博客,你希望总是有一种明显的做事方式。
更多信息:
- Django已经存在了很长时间 - 它于2005年首次发布,而Flask于2010年首次亮相 - 并且更受欢迎 - 在2017年1月,有关于Django的2631个StackOverflow问题和Flask的575个问题。 这两个框架都在逐渐普及,从下图中每个框架的StackOverflow问题数量可以看出。
- Flask的占地面积要小得多,包括不到10000条源代码行,Django的大约240000行代码。
Hello,World!
人们在学习新技术时通常会做的第一件事就是输出“Hello,World!”的最简单的步骤。 下面,我们将介绍使用Flask和Django构建“Hello World”应用程序的步骤。
请注意,专注于简单性和极简主义的Flask使我们能够更快地运行“Hello World”,但这并不意味着Flask是优秀的框架。 在Django中运行比在Flask中运行更复杂的Web应用程序(例如处理和验证用户输入并将其存储在数据库中)的Web应用程序可能需要更少的时间和精力。 但是,看到两个Hello World项目将使我们对这两个框架有更好的感觉,并且它将允许我们描述它们的一些内部工作。
Flask
为了使用Flask,我们需要做的第一件事就是安装它。 这可以通过使用pip
轻松完成。 根据您的pip
的设置方式以及您通常使用的Python版本,您可能不需要在下面的命令中使用3
或--user
标志。
pip3 install flask --user
完成后,创建一个名为flaskhello.py
的Python文件并插入以下代码:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, World!"
if __name__ == "__main__":
app.run()
让我们分解一下这段代码的作用:
- 第1行导入Flask
- 第3行使用
__name__
属性初始化app
变量 - 第5行是Flask发生魔法的地方。
@app.route
是一个Python装饰器 。 它直接在它下面的函数并修改它。 在这种情况下,我们使用它将来自特定URL的路由到下面的功能。 使用不同的@app.route
调用,当用户访问应用程序的不同部分时,我们可以“触发”代码的不同部分。 在这种情况下,我们只有一个route/
,它是我们应用程序的默认“根”。 - 在第6行中 ,函数名称
hello
并不重要。 我们不会在代码中的其他位置调用此函数,而是自动调用它。 尽管如此,给它一个相关的名称仍然是一个好习惯。 - 第7行将字符串返回给我们的用户。 通常我们会在这里渲染一个模板或返回HTML,这样用户就可以看到一个格式很好的页面,但返回一个Python字符串也可以正常工作。
- 第9行是普通的Python样板文件,以确保如果我们的代码由另一个Python脚本导入,我们就不会自动运行任何内容。
- 第10行调用我们在第3行初始化的
app
的run()
方法。这将启动Flask的开发服务器,并允许我们通过访问localhost从本地计算机访问我们的Web应用程序。
您现在可以运行命令python3 flaskhello.py
,您应该看到类似于的输出:
>>> Running on http://127.0.0.1:5000/ (Press CTRL C to quit)
在上面的消息中,'5000'是运行我们的应用程序的端口号(你的可能不同,例如'5003')和'127.0.0.1'意味着应用程序在本地主机上运行 - 它只能在我们的开发机器。 如果您打开Web浏览器并访问http://127.0.0.1:5000/(必要时替换端口号),您将看到一个返回“Hello,World!”的网页。
Django
Django也可以通过pip
安装。 运行以下命令:
pip3 install django --user
一旦安装完毕,我们需要运行一些Django脚本来创建项目以创建应用程序。 当您安装Django时,它还会设置django-admin
命令,我们现在将使用它。 运行以下命令:
django-admin startproject hellodjango
这将创建一个新的Django“项目”,并将在您运行该命令的位置创建hellodjango
目录。 如果你查看hellodjango
目录,你会看到它创建了一个manage.py
文件和一个名为hellodjango
的子目录。 在子目录中有三个Python脚本。 我们只需要关心urls.py
为我们的“Hello World”项目。
下一步是使用Django创建一个App,这是一个低于Django项目的组织结构(一个Project可以包含许多应用程序)。 我们将使用上一个命令创建的manage.py
文件来创建应用程序。从外部hellodjango
目录中,运行以下命令:
python3 manage.py startapp helloworld
这创建了helloworld
应用程序并使其成为我们的hellodjango
项目的一部分。 现在我们需要配置URL路由(就像我们在Flask中使用@app.route
一样)。 因为Django项目的默认结构比Flask应用程序更多,所以我们还有一些额外的步骤。 上一个命令在外部hellodjango
目录中创建了一个helloworld
目录。 打开自动创建的helloworld/views.py
文件并添加以下代码:
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, World!")
- 第1行导入
HttpResponse
函数,我们可以使用该函数通过HTTP将字符串发送给我们的Web应用程序的用户。 与Flask一样,我们通常不会使用它,因为我们想要渲染HTML模板来做更复杂的事情。 但是,对于我们的Hello World应用程序,这就是我们所需要的。 - 在第3行中 ,我们定义了一个索引函数。 在这里,与Flask不同,我们不使用装饰器,当用户访问我们的应用程序时应该调用此函数。 相反,我们将通过两个
urls.py
文件设置它 - 一个用于项目,一个是自动创建的,一个用于应用程序,我们需要创建它们。 - 第4行返回“Hello,World!” 包含在HttpResponse中的字符串,以便它可以在我们用户的Web浏览器中显示。
现在我们需要为我们的应用程序创建一个urls.py
文件。 创建helloworld/urls.py
并添加以下代码:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
]
- 第1行导入
url
函数,以便我们可以将特定URL链接到views.py
文件中的函数。 - 第3行导入我们添加了“Hello,World”
index()
视图的views.py
文件。 - 第5-7行设置了
urlpatterns
列表 - 这相当于我们在Flask中使用的@app.route
装饰器。我们使用正则表达式匹配特定URL,并将这些URL链接到views.py
脚本中的函数。 在这种情况下,我们设置一个模式,它匹配一个空URL(如Flask中的“/” - 换句话说,我们的应用程序的默认页面),并将它链接到我们之前写的views.index
函数。
这是我们的应用程序 ( helloworld
)的URL配置。 我们还需要为我们的项目 ( hellodjango
)配置URL。 编辑自动创建的hellodjango/hellodjango/urls.py
文件(有两个urls.py
文件可能有点令人困惑,但是如果你想到一个属于整个项目的文件,将URL路由到不同的应用程序,另一个属于helloworld
应用程序)。 添加以下代码:
from django.conf.urls import include, url
urlpatterns = [
url(r'^hello/', include('helloworld.urls')),
]
这与之前的文件类似。 但是,我们不是将特定模式的URL路由到特定视图 ,而是将它们路由到特定应用程序 。 在这种情况下,任何包含/hello
URL都将被发送到我们的helloworld
应用程序,并查看helloworld.urls
以确定要调用的视图。
现在返回到outer /hellodjango
目录(包含manage.py
文件的目录)并运行以下命令:
python3 manage.py runserver
这运行Django开发服务器,它允许我们访问localhost上的应用程序,就像我们使用Flask一样。 您应该看到类似于以下内容的输出:
代码语言:javascript复制Performing system checks...
System check identified no issues (0 silenced).
You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
February 03, 2017 - 16:14:20
Django version 1.10.5, using settings 'hellodjango.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
您可以忽略有关迁移的警告 - 这与我们未使用的Web应用程序的数据库有关。 第10行是重要的一行,与Flask类似,它告诉您运行服务器的端口。 在上面的例子中,它是8000,所以我们可以访问http://127.0.0.1:8000/hello
来查看我们的“Hello,World!” 问候(不要忘记最后的/hello
,告诉Django要访问哪个应用程序)。
最后的评论
在这篇文章中,我介绍了Flask和Django,然后对两者进行了简短的比较,接着展示了如何使用每个框架构建一个“Hello World”应用程序。
Django是一个比Flask更重的框架 - 如果你正在学习Web编程,那么要弄清楚哪些部分负责什么功能,以及你需要改变什么来获得你想要的结果可能更难。 但是,一旦你习惯了Django,它所做的额外工作可能非常有用,可以节省你设置Web应用程序重复,枯燥的组件的时间。
有时很难在两个框架之间进行选择 - 好的是,即使你进入更高级的功能,例如模板,这两个在许多方面仍然非常相似(许多招聘广告要求“Django 或 Flask体验”结果)。 因此,如果您需要或想要,可以轻松地从一个切换到另一个。
如果您在阅读本指南后仍然怀疑使用哪个框架,我建议您使用Flask - 您将弄清楚这些部分如何更容易组合在一起,并且您将永远不会有功能你实际上并没有使用。
文章转载自:
https://www.codementor.io/garethdwyer/flask-vs-django-why-flask-might-be-better-4xs7mdf8v#wait-why-do-i-need-a-web-framework-and-what-is-it-anyway
希望大家对Flask和Django有个好的了解,接下来我会开始学习记录这两个框架的知识,欢迎大家一起讨论交流。
关注公号
下面的是我的公众号二维码图片,欢迎关注。
yale记公众号