(一)Flask简介和快速使用

news2025/6/23 16:07:00

关于Python三大Web框架浅谈一嘴:

Django、Flask和Tornado三个框架都是Python Web应用的开发框架,虽然它们都能够开发Web应用,但在使用方式、适用领域和处理方式上还是有很多不同的。

  1. Django
    Django是一个高层次(大而全)的Python Web框架,它采用了MVC模式,集成了ORM框架、自带的后台管理系统和认证框架,提供了丰富的应用程序接口(API),如:中间件、Form、session、缓存、信号、CSRF等。可以快速开发出功能齐全的Web应用程序,非常适合用于大规模的Web应用开发。

    优势:

    • 内置了ORM框架,能够快速、方便地实现数据操作,统一维护数据库连接。
    • 拥有完善的后台管理系统,减少了开发人员的工作量,使开发变得更加高效。
    • 在开发过程中,Django使用了丰富的模块,如模板引擎、表单系统和URL响应框架等,能够快速创建高性能的Web应用程序。

    劣势:

    • Django是一个比较重量级的框架,对服务器资源和数据存储要求较高,适合处理大规模数据和高负载应用场景,但对小型应用程序来说则显得过于臃肿。

    • Django需要较长的学习时间,需要熟悉其体系结构,以及如何使用其模块进行开发和部署。


  1. Flask
    Flask是一个短小精悍、可扩展强、第三方组件非常丰富的轻量级的Python Web框架,它基于Werkzeug、Jinja2模板引擎和WSGI工具箱开发,相比Django更加灵活,功能和体积都较小,适用于中小型Web应用开发。

    优势:

    • Flask是一个轻量级的框架,模块化、灵活,具有强大的定制性,能够快速、简便地实现Web应用程序。
    • Flask提供了丰富的扩展库,如Flask-Login、Flask-RESTful等,能够进一步降低开发难度。

    劣势:

    • Flask缺乏官方后台管理系统,需要开发者自己搭建后台管理模块。
    • Flask的模块比较分散,整体的学习成本较高,需要对相关模块进行一个一个学习和整合。

  1. Tornado
    Tornado是一个短小精悍、异步非阻塞的Python Web框架,基于异步IO操作和协程实现数据同步,内部使用的是异步网络库(tornado.ioloop)和协程库(tornado.gen),能够高效处理高并发和大流量的Web服务。

    优势:

    • Tornado基于协程和异步IO实现,代码简洁、高效,能够支持大量的并发连接,支持高效的异步编程。
    • Tornado的性能表现非常优越,比其他同类框架具有更快的响应速度和更高的并发性。

    劣势:

    • Tornado缺乏一些常见的组件,如ORM、表单处理等,开发者需要自己引入第三方组件。
    • Tornado因为使用异步IO技术,在开发过程中会出现回调地狱(Callback hell)的问题,需要开发者具有较高的编程能力。

总结:

  • Tornado采用异步IO处理请求,请求的处理速度相对更快,可以处理高并发、大流量的Web服务。Django采用同步阻塞的处理方式,处理大量请求时可能被阻塞,处理速度相对较慢。Flask在性能上介于两者之间,相对Django,请求处理速度较快。

三大Web框架各自的适用场景:

  • 根据上述的特点,Django适用于大型阻塞请求的Web应用,比如一些大型的社交网络、电商等;Flask适用于中小型的Web应用,可自由配置选择不同的第三方库来适应不同的需求,比如轻量级的Web服务、简单的博客、小型的数据服务等场景;Tornado适用于高并发、大流量、高实时性的Web应用,例如消息推送和实时日志分析等场景。

值得一提的是,当1000个请求同时到来时,这三个框架在处理上各有不同(可能就是你的技术面一道题哦~):

  1. Django的处理方式: Django是一个基于WSGI协议(wsgiref)的Web框架,由于它是同步阻塞的架构,每个请求的处理必须等待前一个请求的处理完成后才能开始。因此,当有大量请求同时到来时,Django会发生阻塞,导致请求超时或响应延迟等问题。

  2. Flask的处理方式: Flask同样是一个基于WSGI协议(werkzeug)的Web框架,但是它采用的是基于线程的架构,即每个请求会在单独的线程中处理。因此,当有大量请求同时到来时,Flask可以利用多线程来处理请求,但由于线程上下文切换成本,也存在性能和效率上的问题。

  3. Tornado的处理方式: Tornado是一个异步非阻塞的Web框架,采用单线程Reactor模型,通过事件循环机制处理请求。当有大量请求同时到来时,Tornado可以快速的将请求放到消息队列中,并且在请求的数据处理阶段和IO传输阶段均是异步的,因此不会造成阻塞和等待。在性能和并发上表现的非常优异。

因此,一千个请求同时到来时,Django和Flask处理速度可能会变慢,出现阻塞或线程饱和等问题,而Tornado凭借其异步非阻塞的方式,可以更好地处理并发请求,提高性能和吞吐量。使用Tornado可以更好的满足高并发的网站需求,在一些对性能有严格要求的场景下表现非常突出。

引子:werkzeug实现hello world

Flask就是在下面这段代码之上进行开发的一个web系统【下面会走进Flask源码看到类似的代码】。

from werkzeug.wrappers import Request, Response
from werkzeug.serving import run_simple


@Request.application
def hello(request):
    return Response('hello world')


if __name__ == '__main__':
    # 请求一旦进来,执行第三个参数加括号
    run_simple('localhost', 4000, hello)   # hello(xxx)

在这里插入图片描述

主角:Flask实现hello world

from flask import Flask

app = Flask(__name__)   # 一个Flask类对象


@app.route('/')
def index():
    return 'hello world'


if __name__ == '__main__':
    app.run()  # run_simple(host, port, app)

可以查看一下Flask源码【进入app.run()的run方法里】,来证实Flask是基于werkzeug开发的。
在这里插入图片描述

  • 如上图,可以看到最终运行的就是werkzeug的run_simple()方法

  • 而在werkzeug版本的hello world里说过请求一旦进来,就会执行run_simple()方法第三个参数加括号

  • 此处是app对象调用的run()方法,所以第三个参数self就是app对象

  • app对象加括号就是调用对象的call()方法【留坑,后面会继续深究~】

拓展:Flask常用的三方组件官方文档

以下是常用的Flask第三方组件的官方文档链接:

  1. Flask-RESTful:https://flask-restful.readthedocs.io/en/latest/
  2. Flask-SQLAlchemy:https://flask-sqlalchemy.palletsprojects.com/
  3. Flask-Login:https://flask-login.readthedocs.io/en/latest/
  4. Flask-WTF:https://flask-wtf.readthedocs.io/en/stable/
  5. Flask-Mail:https://pythonhosted.org/Flask-Mail/
  6. Flask-Admin:https://flask-admin.readthedocs.io/en/latest/
  7. Flask-Cache:https://pythonhosted.org/Flask-Cache/

这些文档不仅包含了这些插件的使用说明,还提供了官方的API文档、示例和用法,可以快速了解和学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/640734.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flutter自定义系列之折线波动图,心率图,价格走势图

随着前两篇文章的学习,我今天继续给大家演示下简单的自定义之折线波动图,心率图,价格走势图。 这里,我们创建一个自定义的StatefulWidget,用于显示动态的价格线。 我们将使用CustomPaint和CustomPainter来绘制价格线…

chatgpt赋能python:Python中如何截断字符串

Python中如何截断字符串 Python是一种简单易学、高效的编程语言,旨在让开发人员更快、更方便地完成任务。然而,在实际开发过程中,我们常常需要对字符串进行截断操作。那么,Python中怎么截断字符串呢?接下来就让我们来…

如何最大限度地利用ChatGPT、Bard和其他聊天机器人

作者:Hayden Field 译者:明明如月 当下,随着生成式人工智能的发展,面向消费者的聊天机器人能够处理不同领域的需求,并提供相应的帮助和建议,如制定商业战略、设计数学学习指南、提供薪资谈判建议&#xff…

chatgpt赋能python:Python字符串截断-解决方式及实现方法

Python字符串截断-解决方式及实现方法 在Python编程中,处理字符串是一个非常常见的任务。其中,字符串截断也是在许多场景下必不可少的功能之一。Python不仅提供了许多内置函数来处理字符串,而且还有许多方法来截断字符串。 什么是字符串截断…

chatgpt赋能python:Python怎么截图速度快?

Python怎么截图速度快? 在现在这个数字时代,我们所有人都需要进行屏幕截图。无论是用于记录重要笔记,制作教程,或是用于软件质量控制,高速、高质量、高效的屏幕截图工具都非常必要。 在Python编程领域中,…

S3C2440A的ARM工作模式以及寄存器种类

文章目录 前言一、ARM的工作模式二、寄存器的种类(注意特殊寄存器的使用)总结 前言 本期和大家主要分享的是ARM工作模式以及寄存器种类,不同系列的ARM的工作模式以及寄存器的种类大同小异,所以针对于S3C2440A,一定得通…

【题目解析】第六届字节后端青训营结营小测试全解析

前言 👏 Hi! 我是 Yumuing,一个技术的敲钟人 👨‍💻 每天分享技术文章,永远做技术的朝拜者 📚 欢迎关注我的博客:Yumuing’s blog 由于官方答案没有出来,所以,这部分都是…

03.填充中断向量表IDT,使用中断

填充中断描述符表IDT,使用中断 通过初始化中断控制芯片,编码中断函数,实现BIOS中断 操作系统的中断是一种异步事件,用于通知 CPU 某个事件已经发生,例如硬件设备完成数据传输、发生错误或用户发起的系统调用。当操作系…

栈和队列(栈的应用)[二]

文章目录 栈的应用一、栈在系统中的应用简化路径(leetcode. 71) 二、扩号匹配问题有效的括号(leetcode. 20) 三、字符串去重删除字符串中的所有相邻重复项(leetcode. 1047) 四、逆波兰表达式问题逆波兰表达式求值(leetcode. 150) 总结 栈的应用 递归的实现是栈:每一…

使用腾讯手游助手作为开发测试模拟器的方案---以及部分问题的解决方案-1

目录 前言: 一.目录结构 二.注册表研究 1.HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Tencent\MobileGamePC 2.HKEY_CURRENT_USER\Software\Tencent\MobileGamePC 三.模拟器快捷启动 1.快捷启动命令: 2.启动命令如何放入桌面: 3.adb端口,目前测试均可以使用: 前言: 此…

PyTorch深度学习实战(3)——使用PyTorch构建神经网络

PyTorch深度学习实战(3)——使用PyTorch构建神经网络 0. 前言1. PyTorch 构建神经网络初体验1.1 使用 PyTorch 构建神经网络1.2 神经网络数据加载1.3 模型测试1.4 获取中间层的值 2. 使用 Sequential 类构建神经网络3. PyTorch 模型的保存和加载3.1 模型…

【框架源码】Spring源码解析之Bean生命周期流程

观看本文前,我们先思考一个问题,什么是Spring的bean的生命周期?这也是我们在面试的时候,面试官常问的一个问题。 在没有Spring之前,我们创建对象的时候,采用new的方式,当对象不在被使用的时候&…

【网络】UDP/TCP网络程序

目录 UDP网络程序 简单通信版本(UDP) 准备工作(接口学习、分析) 整体代码(Server.hpp/Server.cpp/Client.hpp/Client.cpp) 添加“婴儿版”业务逻辑 英译汉翻译 my_shell 聊天室 linux和windows通信 TCP网络程序 简单通…

AB32VG1:SDK_AB53XX_V061(3)IO口复用功能的补充资料

文章目录 1.IO口功能复用表格2.功能映射寄存器 FUNCTION03.功能映射寄存器 FUNCTION14.功能映射寄存器 FUNCTION2 AB5301A的官方数据手册很不完善,没有开放出来。我通过阅读源码补充了一些关于IO口功能复用寄存器的资料。 官方寄存器文档:《 AB32VG1_Re…

chatgpt赋能python:Python怎么截屏Windows

Python怎么截屏Windows Python是一种高级编程语言,具有快速开发、易于学习、可移植性强等优点,因此在实现Windows屏幕截图方面也是一种非常强大的工具。 什么是Windows屏幕截图? Windows屏幕截图是将当前屏幕或窗口的图像保存成文件或剪贴…

Android BlueToothBLE入门(二)——设备的连接和通讯(附Demo源码地址)

学更好的别人, 做更好的自己。 ——《微卡智享》 本文长度为7870字,预计阅读12分钟 前言 接《Android BlueToothBLE入门(一)——低功耗蓝牙介绍》上篇,这篇文章主要就是来做Demo实现Android两台设备的数据通讯。 实现效…

chatgpt赋能python:Python如何快速处理数据

Python如何快速处理数据 在当今数据爆炸的时代,数据处理已经成为一项非常重要的任务。因此,如何快速、高效地处理数据就成为了每个数据科学家、数据工程师以及数据分析师的必备技能之一。而Python正是其中的佼佼者。 为什么选择Python进行数据处理 Py…

Spring事物失效的八大场景

1.方法内的自调用:spring事物是基于aop的,只要使用代理对象调用某个方法时,spring事物才能生效,而在一个方法内使用this.xxx()时。this并不是代理对象,所以会失效(实际上是transaction注解失效)…

用程序控制对文本的复制和粘贴pyperclip模块

【小白从小学Python、C、Java】 【等级考试500强双证书考研】 【Python-数据分析】 用程序控制对文本的复制和粘贴 pyperclip模块 选择题 关于下列代码说法错误的是? import pyperclip print(【执行】pyperclip.copy("Python 太强大了!")) p…

读发布!设计与部署稳定的分布式系统(第2版)笔记01_生产环境的生存法则

1. 系统“应该”做什么 1.1. 添加所需特性 2. 系统“不应该”做什么 2.1. 崩溃 2.2. 停止响应 2.3. 丢失数据 2.4. 侵犯隐私 2.5. 损失金钱 2.6. 摧毁公司 2.7. “杀死”客户 3. QA部门的测试 3.1. 团队的大部分工作是想方设法地通过测试 3.2. 做了敏捷、务实和自动…