Flask和Django是两个最流行的基于 Python 的 Web 框架。两者都是成熟的、开源的,并且拥有许多欢欣鼓舞的用户。因此,一个自然的问题是:使用哪一个?
Django 和 Flask 的区别
Django 和 Flask 框架的设计都将它们描述为基于 Python 的、开源的和免费的。这些框架的方法加快了 Web 应用程序的开发。
Django 框架对Flask 中没有的“ battery included ”方法感到不满。这种特性使它比它的克星更稳定。我们可以将这些电池视为开箱即用的特性、工具、功能和模式。僵化和更长的发布周期也解释了 Django 的稳定性。Django 框架的每一次初始放弃都将打包改进的功能。此外,它强大的向后兼容性使得来自旧 Django 版本的文件和数据可以在初始版本的环境中使用。
另一方面,Flask 是核心脚手架的大师。它在模板、URL 路由、cookie、请求、错误处理、调试和单元测试支持方面具有极大的灵活性。大多数 Web 应用程序都需要详细和定制的身份验证和制裁方法,而不会忘记 ORM 的需求。Flask 的灵活性让您可以在构建应用程序时决定要遵循的应用程序结构。一旦你启动了一个初始项目,你就不必像 Django 那样遵循默认结构。如果您对 Flask 源代码感到好奇,您会发现它更易于查看。它的代码比它的同胞 Django 少。
特征:
我们要查看的比较 Django 和 Flask 功能涉及两个框架的核心。
数据库:
Django 中的 ORM(对象关系映射)简单而强大。这个 ORM 提供的防御延伸到几个开箱即用的关系数据库,如 MySQL、SQLite、Oracle 和 PostgreSQL。通过 Django 中的迁移,用户可以通过 ORM 轻松地生成和管理多个数据库。此外,使用已经存在或生成的数据库模型,使用视图、表单和模板变得相当容易或直接。因此,如果您有一个 CRUD Web 应用程序,那么 Django 数据库功能将使您的应用程序开发周期变得不那么复杂。
授权:
身份验证是 Web 应用程序用来质疑试图访问其功能的用户身份的一种方法。这是网络应用程序向用户询问问题的方式,你是谁?另一方面,制裁是网络应用程序询问您应该在其可访问功能上执行哪些活动的方式。它问用户一个问题,你应该在这里做什么具体的活动?这些功能在 Django 中可用,具有附加会话的支持和帐户管理。Django 通过用户模型实现了这个特性。
管理Admin:
可服务的管理界面使 Django 成为一个强大的 Web 系统。与 Flask 完全不同,Django 集成了一个易于使用的管理系统,该系统可以增强客户持续执行细长组织任务的能力。以企业为基础,自然会产生管理模块。工程师确实可以自定义管理界面,以满足特定的交易需求。
Flask 的方法不会为您打包此功能。然而,Flask-Admin扩展的可行性优于 Django 的管理面板,因为它拥有众多功能。Django 将自动化您的大部分管理面板功能。然而,Flask 的哲学采用了一种明确的方法。它让开发人员决定需要初始化哪些管理功能。此外,Flask 的方法通常要求开发人员在高级项目设置中制作一些样板代码。这种方法对于在您的 Web 应用程序上实现自定义逻辑很重要。
路由和视图:
这两个 Python 框架加入了对类谓词和函数视图的强化以及将 URL 映射到视图的匹配方法。
在 Django 中,视图-路由关系如下。HTTP 请求将检查它是否与目标 URL 模式匹配。如果真实,请求对象持有的 HTTP 请求信息将传递到其链接视图。然后请求对象调用视图。因此,访问请求的对象指定显式传递它,直到它匹配它可以调用的视图。
内置模板引擎:
与 Django 完全不同,Flask 没有内置的布局 motor 。Flask 基于 Jinja2 format motor 。Jinja2 本身受到 Django format motor 的影响。它的用途是协调沙盒执行环境,支持工程师加快精力充沛的 Web 应用程序的开发进程。而 Django 包含一个内置的 format motor ,可以让工程师一致且快速地为 Web 应用程序创建面向用户的层。
Hello, World 比较:
Flask 的主页上有一个著名的“Hello, World”示例。以下是如何配置它。导航到计算机上的初始目录,例如桌面上的 flask 目录。然后生成一个虚拟环境,激活它,然后安装 Flask。
# Windows > cd onedrive\desktop\code > mkdir flask > cd flask > python -m venv .venv > .venv\Scripts\Activate.ps1 (.venv) > python -m pip install flask # macOS (.venv) % python3 -m pip install flask
在您的文本编辑器中创建一个新文件 hello_flask.py,并按如下方式填充它:
hello_flask.py
from flask import Flask, escape, request app = Flask(__name__) @app.route("/") def hello(): name = request.args.get("name", "World") return f"Hello, {escape(name)}!"
然后从命令行启动 Flask 服务器:
(.venv) > env FLASK_APP=hello_flask.py flask run * Serving Flask app "hello_flask.py" * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
导航到 http://127.0.0.1:5000/ 并且有一个很好的“你好,世界!” 信息。
在 Django 中,在 Django 网站上没有等价的示例,但事实上,我们只需多几行代码就可以完成同质的壮举。导航到另一个目录,可能在您的桌面上称为django 。然后安装 Django:
# Windows > cd onedrive\desktop\code > mkdir django > cd django > python -m venv .venv > .venv\Scripts\Activate.ps1 (.venv) > python -m pip install django # macOS (.venv) % python3 -m pip install django
在您的文本编辑器中,使用以下代码创建一个hello_django.py文件:hello_django.py
from django.conf import settings from django.core.handlers.wsgi import WSGIHandler from django.core.management import execute_from_command_line from django.http import HttpResponse from django.urls import path settings.configure( ROOT_URLCONF=__name__, DEBUG=True, ) def hello_world(request): return HttpResponse("Hello, Django!") urlpatterns = [path("", hello_world)] application = WSGIHandler() if __name__ == "__main__": execute_from_command_line()
并使用以下命令启动 Django 的内置 Web 服务器:
(.venv) > python hello_django.py runserver Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). Aug 29, 2022 - 13:48:54 Django version 4.0, using settings None Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
导航到 Django 的标准端口 8000,http://127.0.0.1:8000/,可以看到“Hello,Django!” 信息。
很棒的功能
Flask: – 轻量级代码库,无需battery – 如果您需要非关系型数据库 – 添加简单的网站或简单的 API 端点
Django: – 包含battery – 强大的文档 – 充满活力的社区 – 强大的内置管理 – 异步功能 – 安全是重中之重
我希望它会帮助你……
django-vs-flask-which-python-framework-to-choose