Flask Run运行机制剖析

这篇具有很好参考价值的文章主要介绍了Flask Run运行机制剖析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

已经玩了一段时间Flask ,每次调用app.run(或flask run)就可以启动应用,今天我们就来了解一下run背后究竟做了些什么事情。

Flask Run运行机制剖析,Python&Go,flask,python,后端

注:通过上面几行代码就可以启动一个Flask服务器,打开浏览器输入http://127.0.0.1:5000, 页面上就能显示Hello,Qingcai18036!,实在是够简单的。

二、WSGI介绍

WSGI全称Web Server Gateway Interface ,它是一个规范,定义了Web服务器如何与Python应用程序进行交互,使得Python写的Web应用程序可以和Web服务器对接起来,它与JAVA体系中的Servlet是差不多的概念。

Flask Run运行机制剖析,Python&Go,flask,python,后端

注:application定义WSGI接口,是一个标准的http处理函数.applicaton必须由WSGI服务器调用,这里我们用了Python内置的WSGI模块wsgiref,它是WSGI服务器的参考实现。

make_server()创建服务器,设置处理函数是application,然后调用serve_forever()启动监听。但一般我们几乎不会直接写WSGI接口,这样编写代码还是过于低级编写维护困难,然后在WSGI基础上进一步抽象,用一个函数处理一个URL,这样就交由Web框架来做,实现WSGI的Web框架有Flask、Django、Tornado等等。

三、Werkzeug

Werkzeug它是一个WSGI工具包,它可以做为Web框架的底层库,Flask就是基于Werkzeug开发的。当然它还有一个安全工具包,可以参见《Werkzeug生成散列值》

四、从app.run说起

app = Flask(__name__)构建Flask应用,Flask对象实现WSGI规范,Flask应用创建成功后,它将提供视图、路由、模板配置功能。

Flask Run运行机制剖析,Python&Go,flask,python,后端

注:run后调用概略时序图,从Flask->Werkzeug->Python HTTPServer

Flask Run运行机制剖析,Python&Go,flask,python,后端

注:app.run调用app.py中的run方法,run方法中导入了 werkzeug.serving 中的 run_simple 函数并执行该函数。

Flask Run运行机制剖析,Python&Go,flask,python,后端

注:run_simple方法执行了make_server并返回srv。

Flask Run运行机制剖析,Python&Go,flask,python,后端

注:make_server根据threaded参数值(外部传入的是True)执行ThreadedWSGIServer。

Flask Run运行机制剖析,Python&Go,flask,python,后端

注:ThreadedWSGIServer其实是对BaseWSGIServer的扩展。

Flask Run运行机制剖析,Python&Go,flask,python,后端

Flask Run运行机制剖析,Python&Go,flask,python,后端

注:BaseWSGIServer -> HTTPServer -> TCPServer -> BaseServer 其中BaseWSGIServer是werkzeug组件中的,而其它HTTPServer、TCPServer、BaseServer是Python内置的模块。

在BaseServer有serve_forever的实现多路复用监听,当请求就绪后会调用_handle_request_noblock来处理请求。

Flask Run运行机制剖析,Python&Go,flask,python,后端

然后会调用

Flask Run运行机制剖析,Python&Go,flask,python,后端

注:BaseRequestHandler在实例化时就会执行handler()方法,这个由子类去实现。

Flask Run运行机制剖析,Python&Go,flask,python,后端

注:这就是 WSGI 协议中服务器调用 Web 服务规定的方法。

总结为一句话:Flask 依赖 Werkzug 的 run_simple 函数启动服务,而 run_simple 通过对 Python 标准的 Web 服务器的拓展,实现了请求交由 Flask 处理的过程。文章来源地址https://www.toymoban.com/news/detail-716829.html

到了这里,关于Flask Run运行机制剖析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 将python flask项目打包成可以用运行的软件(包含报错解决)

    准备好要打包的flask项目,如下图run.py文件的代码 导入打包函数库pyinstaller 执行打包指令,参数如下表所示 命令 解释 pyinstaller -F run.py 只在dist文件夹中生成一个程序run.exe文件,适用于一个模块没有多依赖.py文件 pyinstaller -D run.py 默认选项,除了主程序run.exe外,还会在在dis

    2024年02月19日
    浏览(39)
  • 用flask run代替flask run --debug

    安装 python-dotenv 依赖。 在项目根目录下新建 .flaskenv 文件,并作如下配置:

    2024年02月15日
    浏览(37)
  • 如何把本地flask项目(框架)上传到服务器(Linux),并后台持续运行(包括requirements文件生成,python项目与域名绑定,保姆级教程)

     2023年中旬,参加了一个比赛,需要搭建一个网站。在不断探索琢磨之后,搭建了一个基于flask的web。直接上干货: 一、首先,在本地准备好自己的flask项目。包括最基本的三个文件: 然后准备生成requirements.txt文件,这个文本文件会告诉服务器你的项目运行所需要的环境,即

    2024年02月04日
    浏览(50)
  • Python Flask flasgger api文档[python/flask/flasgger]

    首先需要安装依赖: 封装swagger.py文件,代码如下:  然后在主应用中(项目入口文件)加入以下代码: 然后在user.py文件中加入以下代码: 运行项目, 访问:http://127.0.0.1:5000/apidocs/

    2024年02月10日
    浏览(33)
  • (五)Flask之深入剖析路由源码

    路由(Route)这个概念在所有web框架中都非常重要,它是用于定义URL和对应的处理函数(视图)之间的映射关系。通过定义路由,可以使web框架应用程序能够响应不同的URL请求,并执行相应的逻辑。 在Flask项目(比如下面这个hello world项目)刚启动时,Flask内部肯定会将所有的

    2024年02月15日
    浏览(42)
  • python项目结构示例(python代码结构、python目录结构)与python部署结构、python部署目录、flask项目结构、flask目录

    myproject/ :项目的根目录,也是Python包的根目录。 myproject/__init__.py :一个空的 __init__.py 文件,用于将 myproject 目录标记为一个Python包。 myproject/module1.py 、 myproject/module2.py 等:项目的模块文件,包含项目的核心代码。 tests/ :测试目录,包含用于测试项目代码的测试文件。

    2024年02月12日
    浏览(62)
  • 【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)

    flask作为一个微框架,Flask 允许您以很少的开销构建 Web 服务。 它为您(设计师)提供了自由,以适合您的方式实施您的项目 特定应用。 一个最小的 Flask 应用如下: Flask-Admin是一个batteries-included,易于使用的Flask扩展,可让您 向 Flask 应用程序添加管理界面。它的灵感来自 d

    2024年02月02日
    浏览(89)
  • 【Python】【Flask】flask_login的初始化

    想要更高效地用现有的Flask_login包来实现用户管理方面的常用功能会话管理等。不想再手搓了。 首先引入flask_login 然后进行app级别的设置和初始化

    2024年02月08日
    浏览(38)
  • flask python 设置定时任务 flask 周期性执行任务方案

    flask 通常使用 flask_apscheduler 框架设计定时任务,flask_apscheduler 功能很全面,能按设定的时间规则执行任务,可以持久化到各类数据库(mysql,redis,mongodb),实现对定时任务增、删、改、查等操作。 方法三:通过调用 flask_apscheduler 的 api (推荐) 实例对象 scheduler 拥有增、删

    2024年01月21日
    浏览(44)
  • Python Flask教程

    Doc: https://rest-apis-flask.teclado.com/docs/course_intro/what_is_rest_api/ Github: https://github.com/tecladocode/rest-apis-flask-python 最小应用 启动 代码热加载 新建一个文件,名为: .flaskenv , 在文件内开启debug模式。(需要下载doenv)库 1.1 url传参规则 参数规则: string (default) accepts any text without a sla

    2024年01月17日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包