Flask VS Django:为什么Flask可能会更好

2019-07-30 10:33:27 浏览数 (1)

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文件并插入以下代码:

代码语言:javascript复制
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行初始化的apprun()方法。这将启动Flask的开发服务器,并允许我们通过访问localhost从本地计算机访问我们的Web应用程序。

您现在可以运行命令python3 flaskhello.py ,您应该看到类似于的输出:

代码语言:javascript复制
>>> 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命令,我们现在将使用它。 运行以下命令:

代码语言:javascript复制
 django-admin startproject hellodjango

这将创建一个新的Django“项目”,并将在您运行该命令的位置创建hellodjango目录。 如果你查看hellodjango目录,你会看到它创建了一个manage.py文件和一个名为hellodjango的子目录。 在子目录中有三个Python脚本。 我们只需要关心urls.py为我们的“Hello World”项目。

下一步是使用Django创建一个App,这是一个低于Django项目的组织结构(一个Project可以包含许多应用程序)。 我们将使用上一个命令创建的manage.py文件来创建应用程序。从外部hellodjango目录中,运行以下命令:

代码语言:javascript复制
 python3 manage.py startapp helloworld 

这创建了helloworld应用程序并使其成为我们的hellodjango项目的一部分。 现在我们需要配置URL路由(就像我们在Flask中使用@app.route一样)。 因为Django项目的默认结构比Flask应用程序更多,所以我们还有一些额外的步骤。 上一个命令在外部hellodjango目录中创建了一个helloworld目录。 打开自动创建的helloworld/views.py文件并添加以下代码:

代码语言:javascript复制
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并添加以下代码:

代码语言:javascript复制
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应用程序)。 添加以下代码:

代码语言:javascript复制
from django.conf.urls import include, url 
 
urlpatterns = [ 
    url(r'^hello/', include('helloworld.urls')), 
]

这与之前的文件类似。 但是,我们不是将特定模式的URL路由到特定视图 ,而是将它们路由到特定应用程序 。 在这种情况下,任何包含/hello URL都将被发送到我们的helloworld应用程序,并查看helloworld.urls以确定要调用的视图。

现在返回到outer /hellodjango目录(包含manage.py文件的目录)并运行以下命令:

代码语言:javascript复制
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记公众号

0 人点赞