前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flask VS Django:为什么Flask可能会更好

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

作者头像
XXXX-user
修改2019-07-30 10:33:27
8.2K0
修改2019-07-30 10:33:27
举报
文章被收录于专栏:不仅仅是python不仅仅是python

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记公众号

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yale记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 等等,为什么我需要一个Web框架。
  • 我们现在将更详细地讨论它们的不同之处。
  • 快速比较
  • Hello,World!
    • Django
    • 最后的评论
      • 关注公号
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档