文章目录
- dash==2.18.1 纯Python的Web应用框架
- Python Dash库的功能介绍和用法示例
- 功能介绍
- 用法示例
- Flask-Compress==1.15 Flask响应数据的压缩
- 功能介绍
- 用法示例
- 注意事项
- feffery-antd-charts==0.1.0rc5 数据可视化组件库
- 功能介绍
- 用法示例
- feffery-antd-components==0.3.8 Dash 第三方组件库
- 功能介绍
- 用法示例
- feffery-markdown-components==0.2.10 Markdown 组件库
- 功能介绍
- 用法示例
- feffery-utils-components==0.2.0rc24 Dash开发百宝箱
- 功能介绍
- 用法示例
- fastapi[all]==0.115.0 Web框架
- 功能介绍
- 用法示例
- pydantic-validation-decorator==0.1.2 数据验证库
- 功能介绍
- 用法示例
- SQLAlchemy[asyncio]==2.0.31 SQL 工具包和ORM库
- SQLAlchemy 库的功能介绍
- 连接 PostgreSQL 和 MySQL 数据库的用法示例
- 使用 ORM 进行数据库操作
- psycopg2==2.9.10 访问PostgreSQL数据库系统
- 功能介绍
- 用法示例
- 其他功能示例
- asyncpg==0.30.0 PostgreSQL数据库客户端库
- 功能介绍
- 用法示例
- redis==5.0.7 与 Redis 数据库进行交互
- 功能介绍
- 用法示例
- requests==2.32.3 HTTP 客户端库
- 功能介绍
- 用法示例
- APScheduler==3.10.4 定时任务调度库
- 功能介绍
- 用法示例
- cachebox==4.1.2 缓存库
- 功能介绍
- 用法示例
- DateTime==5.5 日期时间库
- Python `datetime` 库的功能介绍和用法示例
- 功能介绍
- 用法示例
- 注意事项
- jsonpath-ng==1.5.3 解析和操作JSON数据
- 功能介绍
- 用法示例
- loguru==0.7.2 日志库
- 功能介绍
- 用法示例
- openpyxl==3.1.5 读写Excel
- 功能介绍
- 用法示例
- pandas==2.2.2 数据分析工具
- Pandas库的功能介绍
- Pandas库的用法示例
- passlib[bcrypt]==1.7.4 密码的安全存储和验证
- Passlib库的功能介绍
- Passlib库的用法示例
- Pillow==10.4.0 图像处理库
- Pillow库的功能介绍
- Pillow库的用法示例
- psutil==6.0.0 获取系统进程和系统资源的利用率
- 功能介绍
- 用法示例
- PyJWT[crypto]==2.8.0 处理JSON Web Tokens(JWT)
- 功能介绍
- 用法示例
- 1. 安装PyJWT
- 2. 创建JWT
- 3. 解析JWT
- 4. 验证JWT
- 5. 自定义过期时间处理逻辑
- 6. 选择加密算法
- 7. 刷新令牌
- user-agents==2.2.0 解析user agent字符串
- 功能介绍
- 用法示例
- waitress==3.0.0 高性能 WSGI服务器
- 功能介绍
- 用法示例
- 高级用法
dash==2.18.1 纯Python的Web应用框架
Python Dash库的功能介绍和用法示例
功能介绍
Python中的Dash库是一个强大的Web应用框架,主要用于创建交互式数据可视化界面和数据分析型Web应用。它由Plotly团队开发,集成了Plotly.js图表库,支持多种图表类型如折线图、柱状图、散点图、地图等,并允许用户通过简单的Python代码定义应用的行为和界面布局。Dash的主要功能包括:
- 快速构建交互式Web应用
- Dash使用Python语法,对于熟悉Python的用户来说很容易上手。
- 提供了丰富的UI组件,如文本框、按钮、下拉菜单、滑块等,方便构建用户界面。
- 支持用户交互,如点击事件、下拉列表选择等,能够实时更新数据和图表。
- 支持多种数据可视化图表
- Dash集成了Plotly.js,可以直接生成支持缩放、平移和导出为图片等功能的图表。
- 提供了超过50种图表类型,包括地图、热力图、三维图表等,满足不同的数据可视化需求。
- 服务器端渲染与响应式设计
- Dash应用程序在服务器端渲染,然后将结果发送到客户端浏览器。
- 提供了对移动设备友好的布局,支持响应式设计,确保应用在不同设备上都能良好显示。
- 易于扩展与集成
- Dash可以与Pandas等数据处理库集成,方便处理和展示各种数据,如CSV、Excel等。
- 支持将Dash应用无缝嵌入现有网站,或将Dash集成到现有的Flask应用程序中,实现更复杂的功能组合。
- 高级功能与企业级支持
- Dash企业版提供了更多功能和支持,如应用管理器、Kubernetes扩展、无代码认证、作业队列等,适合在部门或公司范围内部署Dash应用。
- 提供了设计工具包、快照引擎、仪表板工具包等高级功能,帮助用户快速构建高质量的数据应用。
用法示例
以下是一个简单的Dash应用示例,它展示了一个包含标题和折线图的Web页面:
-
安装Dash
你可以使用pip来安装Dash库:
pip install dash
由于Dash应用通常会用到Plotly来绘制图表,因此Plotly也会被自动安装。
-
创建Dash应用
下面是一个完整的示例代码,用于创建一个简单的Dash应用:
import dash import dash_core_components as dcc import dash_html_components as html from dash.dependencies import Input, Output import plotly.graph_objs as go # 创建Dash应用实例 app = dash.Dash(__name__) # 设置应用布局 app.layout = html.Div(children=[ html.H1(children='Dash应用示例'), html.Div(children=''' 这是一个简单的Dash应用,它包含一个折线图。 '''), dcc.Graph( id='example-graph', figure={ 'data': [ go.Scatter( x=[1, 2, 3, 4, 5], y=[10, 11, 12, 13, 14], mode='lines', marker={ 'size': 10, }, ) ], 'layout': go.Layout( title='折线图示例', xaxis={'title': 'X轴'}, yaxis={'title': 'Y轴'}, ) } ) ]) # 如果需要添加回调函数来处理用户交互,可以在这里定义 # 例如,根据用户输入更新图表 # @app.callback( # Output('example-graph', 'figure'), # [Input('some-input-id', 'value')] # ) # def update_graph(input_value): # # 根据input_value更新图表数据并返回 # pass # 运行应用 if __name__ == '__main__': app.run_server(debug=True)
-
运行Dash应用
将上述代码保存为一个Python文件(例如
app.py
),然后在命令行中运行该文件:python app.py
Dash应用将在本地服务器上启动,并默认在浏览器中打开
http://127.0.0.1:8050/
。你将看到一个包含标题和折线图的简单Web页面。
通过以上介绍和示例代码,你可以了解到Dash库的基本功能和用法。Dash以其强大的数据可视化能力和易于扩展的Web应用框架特性,成为数据科学和机器学习领域构建Web应用的首选工具之一。
Flask-Compress==1.15 Flask响应数据的压缩
Flask-Compress是一个专为Flask应用设计的扩展,旨在简化响应数据的压缩过程,以提高Web应用的性能。以下是对Flask-Compress库的功能介绍和用法示例:
功能介绍
- 压缩响应数据
- Flask-Compress能够自动检查请求的Accept-Encoding头信息,确定客户端支持的压缩算法(如gzip、deflate和brotli),并根据配置选择合适的压缩方式对响应数据进行压缩。
- 这显著减少了传输数据量,加快了页面加载速度,特别是在带宽有限的情况下。
- 自动处理HTTP头信息
- Flask-Compress能够自动处理压缩响应所需的HTTP头信息,如Content-Encoding和Vary头,使得开发者无需手动干预即可享受压缩带来的性能提升。
- 灵活的配置选项
- Flask-Compress提供了多个配置选项,允许开发者自定义压缩行为。例如,可以设置压缩级别、指定需要压缩的MIME类型、在调试模式下是否启用压缩等。
- 全局和按视图压缩
- Flask-Compress不仅支持全局压缩,还提供了按视图压缩的功能。开发者可以根据具体需求灵活配置,以优化不同视图或路由的响应数据。
- 易于集成和缓存友好
- Flask-Compress易于集成到现有的Flask应用中,只需几行代码即可实现。此外,它还支持与缓存机制集成,直接从缓存中提供压缩后的响应数据,进一步减少服务器负载和响应时间。
用法示例
以下是一个简单的Flask应用示例,展示了如何使用Flask-Compress来压缩响应数据:
from flask import Flask, jsonify
from flask_compress import Compress # 创建Flask应用实例
app = Flask(__name__) # 初始化Flask-Compress
compress = Compress()
compress.init_app(app) # 配置压缩选项(可选)
app.config['COMPRESS_LEVEL'] = 6 # 设置压缩级别,默认为6(在1到9之间)
app.config['COMPRESS_MIMETYPES'] = ['text/html', 'text/xml', 'text/plain', 'text/css', 'text/javascript', 'application/javascript', 'application/x-javascript', 'application/json'] # 指定需要压缩的MIME类型
app.config['COMPRESS_DEBUG'] = False # 在调试模式下是否启用压缩,默认为False # 路由示例
@app.route('/json')
def get_json_data(): data = {'name': '小明', 'age': 14} lst = [data] * 1000 # 生成一个较大的JSON数据 return jsonify(lst) # 运行Flask应用
if __name__ == '__main__': app.run()
在这个示例中,Flask-Compress会自动压缩/json
路由返回的JSON数据。当Flask应用处理请求并返回响应时,Flask-Compress会检查响应的内容类型,并尝试对其进行压缩(如果可能的话)。
注意事项
- 在使用Flask-Compress时,请确保客户端(如浏览器)支持相应的压缩算法。
- 压缩会增加CPU使用率,因为需要在发送响应之前对数据进行压缩。因此,在CPU资源有限的环境中,请仔细评估压缩的利弊。
- Flask-Compress默认不会对静态文件进行压缩。如果需要压缩静态文件(如CSS、JavaScript文件),可能需要使用Web服务器(如Nginx)或CDN提供的压缩功能。
总之,Flask-Compress是一个强大的Flask扩展,能够显著提升应用的性能。通过简单的配置和集成,开发者可以轻松地在Flask应用中启用响应数据压缩功能。
feffery-antd-charts==0.1.0rc5 数据可视化组件库
功能介绍
feffery-antd-charts
是一个由国内DASH第一人Feffery(费老师)基于 Ant Design 和 ECharts 的 Python Web 开发库中的数据可视化组件库。它专为 Dash 应用设计,将 Ant Design 的美观性和 ECharts 的强大数据可视化功能相结合,为开发者提供了丰富的图表组件。通过使用 feffery-antd-charts
,开发者可以轻松地在 Dash 应用中集成各种美观且功能强大的图表,从而创建出具有吸引力的交互式数据可视化界面。
feffery-antd-charts
库的主要功能包括:
- 丰富的图表类型:提供了多种类型的图表,如折线图、柱状图、饼图、散点图、地图等,满足不同场景下的数据可视化需求。
- 美观的 UI 设计:基于 Ant Design 的 UI 组件库,确保了图表的美观性和一致性。
- 易于使用:通过 Python 代码即可轻松配置和自定义图表,降低了开发门槛。
- 交互式体验:支持用户交互,如缩放、平移、点击等,提升了数据可视化的交互性和用户体验。
- 与 Dash 深度集成:作为 Dash 的第三方组件库,与 Dash 框架紧密结合,方便在 Dash 应用中使用。
用法示例
以下是一个使用 feffery-antd-charts
在 Dash 应用中创建折线图的示例代码:
import dash
from dash import dcc, html
import feffery_antd_charts as fac # 创建 Dash 应用实例
app = dash.Dash(__name__) # 准备数据
data = [ {"date": "2023-10-01", "value": 10}, {"date": "2023-10-02", "value": 15}, {"date": "2023-10-03", "value": 13}, {"date": "2023-10-04", "value": 17}, {"date": "2023-10-05", "value": 16},
] # 配置图表
line_chart = fac.AntdLine( linestyle_opts=opts.LineStyleOpts(color="#1890ff"), label_opts=opts.LabelOpts(is_show=False), xaxis_data=[item["date"] for item in data], yaxis_data=[item["value"] for item in data], title="折线图示例", tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
) # 设置应用布局
app.layout = html.Div( [ html.H1("feffery-antd-charts 示例"), dcc.Graph(figure=line_chart.get_figure()), ]
) # 运行应用
if __name__ == "__main__": app.run_server(debug=True)
注意:
- 在上述代码中,
opts
是 ECharts 的配置项,但在feffery-antd-charts
的高级用法中,通常会通过fac
提供的接口来配置图表,而不是直接使用opts
。上述示例为了简洁起见,直接使用了opts
,但在实际使用中,请查阅feffery-antd-charts
的官方文档以获取正确的配置方式。 - 由于
feffery-antd-charts
是基于 Dash 的第三方组件库,因此需要先安装 Dash 和feffery-antd-charts
才能运行上述代码。你可以使用pip
命令来安装它们:pip install dash feffery-antd-charts
。 - 示例代码中的
AntdLine
是feffery-antd-charts
提供的折线图组件,你可以根据需要选择其他类型的图表组件,如AntdBar
(柱状图)、AntdPie
(饼图)等。
通过 feffery-antd-charts
,你可以轻松地在 Dash 应用中集成各种美观且功能强大的图表,从而创建出具有吸引力的交互式数据可视化界面。
feffery-antd-components==0.3.8 Dash 第三方组件库
功能介绍
feffery-antd-components
(简称 fac
)是一个基于 Ant Design 的 Dash 第三方组件库,由 Feffery 老师开源维护。它提供了丰富的页面常用交互组件功能,使开发者可以使用纯 Python 的方式快速构建现代化的交互式 Web 应用。fac
组件底层与 Dash 框架紧密结合,涵盖了通用、布局、导航、数据录入、数据展示、反馈等七大类功能,拥有多达上百个组件,满足了各种常用应用功能需求。
feffery-antd-components
的主要特点包括:
- 丰富的组件类型:提供了超过 100 个组件,满足不同开发需求。
- 简洁的 Python 接口:降低了学习成本,使得开发者能够更快速地上手使用。
- 遵循 Ant Design 设计规范:组件具有统一的视觉风格和一致化的交互方式,提高了应用程序的可读性和整体质量。
- 支持多语言:可设置不同的语言环境,满足不同地域和用户的语言需求。
- 支持静态资源通过 CDN 加载:加速了应用访问速度,提升了用户体验。
- 减少应用初始加载时间:按需加载资源,优化了应用的性能。
- 利用批量属性监听:提升了回调函数编排效率,简化了代码结构。
用法示例
以下是一个使用 feffery-antd-components
在 Dash 应用中创建简单布局的示例代码:
import dash
from dash import html
import feffery_antd_components as fac # 创建 Dash 应用实例
app = dash.Dash(__name__) # 设置应用布局
app.layout = html.Div( [ # 创建一个标题组件 fac.AntdTitle('您好! Dash', level=2), # 创建一条分割线组件 fac.AntdDivider(lineColor='red', isDashed=True), # 创建一个文本组件,显示 Dash 版本信息 fac.AntdText('Dash 版本: %s' % dash.__version__, underline=True), # 再次创建分割线组件,设置不同样式 fac.AntdDivider('分割线', lineColor='#6EAA82', isDashed=True, fontColor='#4F78B0', fontStyle='italic'), # 创建一个按钮组件 fac.AntdButton('点击我', type='primary', on_click=lambda: print('按钮被点击了!')), # 创建一个输入框组件 fac.InputNumber(id='input-number', value=10, min=0, max=100, step=1), # 创建一个表格组件,并设置一些示例数据 fac.AntdTable( columns=[ {'title': '名称', 'dataIndex': 'name', 'key': 'name'}, {'title': '年龄', 'dataIndex': 'age', 'key': 'age'}, {'title': '地址', 'dataIndex': 'address', 'key': 'address'}, ], dataSource=[ {'key': '1', 'name': '张三', 'age': 32, 'address': '北京'}, {'key': '2', 'name': '李四', 'age': 42, 'address': '上海'}, {'key': '3', 'name': '王五', 'age': 28, 'address': '广州'}, ], ), ]
) # 运行应用
if __name__ == "__main__": app.run_server(debug=True)
说明:
- 在上述代码中,我们首先导入了 Dash 框架和
feffery-antd-components
库。 - 然后,我们创建了一个 Dash 应用实例,并设置了应用布局。
- 在布局中,我们使用了多个
feffery-antd-components
提供的组件,如AntdTitle
(标题组件)、AntdDivider
(分割线组件)、AntdText
(文本组件)、AntdButton
(按钮组件)、InputNumber
(输入框组件)和AntdTable
(表格组件)等。 - 每个组件都通过相应的属性进行了配置,如标题级别、分割线颜色、文本内容、按钮点击事件、输入框的值和范围等。
- 最后,我们运行了 Dash 应用,并通过浏览器访问了应用界面,查看了各个组件的显示效果和交互功能。
通过 feffery-antd-components
,开发者可以轻松地构建出具有美观界面和丰富交互功能的 Web 应用。
feffery-markdown-components==0.2.10 Markdown 组件库
功能介绍
feffery-markdown-components
是一个用于 Dash 应用的 Markdown 组件库,它使得开发者能够在 Dash 应用中轻松地集成和渲染 Markdown 内容。该库提供了丰富的 Markdown 渲染功能,并支持自定义样式,从而满足开发者对于文档展示、内容编辑等场景的需求。
feffery-markdown-components
的主要特点包括:
- Markdown 渲染:支持标准的 Markdown 语法,包括标题、段落、列表、代码块、链接、图片等。
- 自定义样式:通过参数配置,可以自定义 Markdown 内容的 CSS 样式,包括代码块容器及代码文字内容的样式。
- 易于集成:作为 Dash 的第三方组件库,
feffery-markdown-components
与 Dash 框架紧密结合,方便在 Dash 应用中使用。 - 丰富的扩展功能:除了基本的 Markdown 渲染外,还支持其他扩展功能,如代码高亮、目录生成等(具体扩展功能需参考官方文档)。
用法示例
以下是一个使用 feffery-markdown-components
在 Dash 应用中渲染 Markdown 内容的示例代码:
import dash
from dash import html
import feffery_markdown_components as fmc # 创建 Dash 应用实例
app = dash.Dash(__name__) # 准备 Markdown 内容
raw_markdown = '''
# 这是一个标题 这是一个段落。Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档。 ## 列表 - 无序列表项 1
- 无序列表项 2
- 无序列表项 3 1. 有序列表项 1
2. 有序列表项 2
3. 有序列表项 3 '''# 设置应用布局app.layout = html.Div([\# 使用 fmc.FefferyMarkdown 组件渲染 Markdown 内容fmc.FefferyMarkdown(markdownStr=raw_markdown,\# 可选:自定义代码块容器的 CSS 样式codeBlockStyle={'backgroundColor': '#f5f5f5','padding': '10px','borderRadius': '5px','overflowX': 'auto'},\# 可选:自定义代码文字内容的 CSS 样式codeStyle={'color': '#333','fontSize': '14px','fontFamily': 'monospace'})]
)# 运行应用if **name** == "**main**":
app.run_server(debug=True)
说明:
- 在上述代码中,我们首先导入了 Dash 框架和
feffery-markdown-components
库。 - 然后,我们创建了一个 Dash 应用实例,并准备了要渲染的 Markdown 内容。
- 在应用布局中,我们使用了
fmc.FefferyMarkdown
组件来渲染 Markdown 内容,并通过markdownStr
参数传入了 Markdown 字符串。 - 此外,我们还通过
codeBlockStyle
和codeStyle
参数自定义了代码块容器和代码文字内容的 CSS 样式。 - 最后,我们运行了 Dash 应用,并通过浏览器访问了应用界面,查看了 Markdown 内容的渲染效果。
通过 feffery-markdown-components
,开发者可以轻松地在 Dash 应用中集成和渲染 Markdown 内容,并根据需要进行样式自定义。
feffery-utils-components==0.2.0rc24 Dash开发百宝箱
功能介绍
feffery-utils-components
是一个实用的 Python 网页开发工具库,专为 Dash 应用设计。它提供了一系列便捷的组件和工具函数,旨在帮助开发者更高效地构建现代化的交互式 Web 应用。这些组件和工具函数涵盖了多种常见应用功能需求,如尺寸调整、颜色选择、文件上传与下载等。
feffery-utils-components
的主要特点包括:
- 丰富的组件类型:提供了多种实用的网页组件,如尺寸调整组件、颜色选择器组件等。
- 便捷的工具函数:包含了一系列帮助开发者加速开发工作的工具函数。
- 易于集成:作为 Dash 的第三方组件库,
feffery-utils-components
与 Dash 框架紧密结合,方便在 Dash 应用中使用。 - 可定制性强:组件和工具函数均支持自定义配置,满足开发者对于不同应用场景的需求。
用法示例
以下是一个使用 feffery-utils-components
中的 FefferyResizable
组件在 Dash 应用中实现尺寸可调整容器的示例代码:
import dash
from dash import html
import feffery_utils_components as fuc # 创建 Dash 应用实例
app = dash.Dash(__name__) # 准备应用布局
app.layout = html.Div( [ # 使用 fuc.FefferyResizable 组件实现尺寸可调整的容器 fuc.FefferyResizable( # 要调整的容器内容,可以是任意 Dash 组件 fuc.FefferyDiv( html.P("这是一个可以调整尺寸的容器!"), style={ 'backgroundColor': '#f0f0f0', 'padding': '20px', 'border': '1px solid #ccc' } ), # 可选:设置容器的初始尺寸 defaultSize={'width': 300, 'height': 200}, # 可选:设置尺寸调整的方向,'both' 表示可以同时在水平和垂直方向调整 direction=['both'], # 可选:设置尺寸调整手柄的样式 resizeHandleStyle={ 'width': '10px', 'backgroundColor': '#333', 'cursor': 'se-resize' } ) ]
) # 运行应用
if __name__ == "__main__": app.run_server(debug=True)
说明:
- 在上述代码中,我们首先导入了 Dash 框架和
feffery-utils-components
库。 - 然后,我们创建了一个 Dash 应用实例,并准备了应用布局。
- 在应用布局中,我们使用了
fuc.FefferyResizable
组件来实现一个尺寸可调整的容器。该组件接受一个子组件作为要调整的容器内容,并提供了defaultSize
、direction
和resizeHandleStyle
等参数来配置容器的初始尺寸、尺寸调整方向和尺寸调整手柄的样式。 - 最后,我们运行了 Dash 应用,并通过浏览器访问了应用界面,查看了尺寸可调整容器的效果。
通过 feffery-utils-components
,开发者可以更加便捷地构建现代化的交互式 Web 应用,并根据需要进行自定义配置和扩展。
fastapi[all]==0.115.0 Web框架
Python中的FastAPI库是一个现代、快速且高性能的Web框架,专注于构建API。以下是FastAPI库的主要功能和用法示例:
功能介绍
高性能与异步支持:
FastAPI基于ASGI(Asynchronous Server Gateway Interface)协议,支持异步编程,能够高效处理大量并发请求。
利用Python的异步特性,FastAPI提供了卓越的性能和并发处理能力。
自动生成文档:
FastAPI内置了Swagger UI和ReDoc等交互式的API文档生成工具。
开发者无需额外配置,即可自动生成详细的API文档,方便调试和分享。
数据验证与类型检查:
FastAPI利用Python的类型提示和Pydantic库进行数据验证和类型检查。
开发者可以定义数据模型,确保输入数据的格式和类型正确无误。
快速开发与易用性:
FastAPI提供了简洁明了的API设计方式,结合声明式的路由定义和自动路由解析,提高了开发效率。
开发者可以快速上手并编写出清晰、可读性强的代码。
高度可扩展性与兼容性:
FastAPI支持多种数据库和中间件,可以轻松地与其他第三方库集成。
开发者可以根据项目的具体需求选择合适的组件和服务,实现高度定制化的开发。
用法示例
安装FastAPI和Uvicorn:
pip install fastapi uvicorn
创建一个简单的FastAPI应用:
from fastapi import FastAPI app = FastAPI() @app.get("/")
async def read_root(): return {"Hello": "World"}
运行应用:
使用Uvicorn运行FastAPI应用:
uvicorn main:app --reload
其中,main是Python文件名(去掉.py后缀),app是FastAPI实例的名称。–reload选项用于在代码更新时自动重启服务器,非常适合开发阶段使用。
访问API:
打开浏览器并访问http://127.0.0.1:8000/,应该能够看到以下JSON响应:
{"Hello": "World"}
自动生成文档:
访问以下地址可以查看自动生成的API文档:
Swagger UI: http://127.0.0.1:8000/docs
ReDoc: http://127.0.0.1:8000/redoc
处理路径参数和查询参数:
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None): return {"item_id": item_id, "q": q}
访问http://127.0.0.1:8000/items/5,返回:
{"item_id": 5}
访问http://127.0.0.1:8000/items/?q=fastapi,返回:
{"q": "fastapi"}
处理请求体和响应模型:
from pydantic import BaseModel
from fastapi import HTTPException class Item(BaseModel): name: str price: float is_offer: bool = None @app.post("/items/")
async def create_item(item: Item): return item
发送一个POST请求到http://127.0.0.1:8000/items/,请求体示例:
{"name": "Item Name", "price": 99.99, "is_offer": true}
返回结果将是:
{"name": "Item Name", "price": 99.99, "is_offer": true}
处理异常:
@app.get("/items/{item_id}")
async def read_item(item_id: int): if item_id < 0: raise HTTPException(status_code=400, detail="Item ID must be positive") return {"item_id": item_id}
如果传递负值,将返回400错误:
{"detail": "Item ID must be positive"}
添加中间件:
from fastapi.middleware.cors import CORSMiddleware app.add_middleware(CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"])
部署FastAPI应用:
可以使用ASGI服务器(例如Uvicorn或Gunicorn)来运行和部署FastAPI应用。
以上示例展示了FastAPI的基本用法和高级特性,开发者可以根据这些示例快速上手并构建自己的API服务。同时,FastAPI拥有丰富的文档和社区支持,开发者可以查阅官方文档或参与社区讨论以获取更多帮助。
pydantic-validation-decorator==0.1.2 数据验证库
功能介绍
Pydantic 是一个用于 Python 的数据验证库,它利用 Python 的类型注解系统,可以高效且准确地验证和清理传入应用程序的数据。Pydantic 提供了强类型模式验证,能够确保数据结构一致性和安全性。不过,需要注意的是,“pydantic-validation-decorator”并非一个官方或广泛认知的库名,可能是对 Pydantic 库中验证装饰器(validator decorator)功能的特指或误解。在 Pydantic 中,验证装饰器(@validator)是一个核心功能,允许开发者在数据模型上定义自定义的验证逻辑。
Pydantic 的主要功能包括:
- 数据模型定义:使用类型注解定义数据模型的结构和类型。
- 数据验证:在创建模型实例时自动验证数据类型和约束条件,如长度限制、正则匹配等。
- 数据解析:将输入数据(如 JSON、字典)解析成模型实例,并保留类型安全性和验证规则。
- 模型嵌套:支持定义嵌套的数据模型。
- 自定义验证函数:使用 @validator 装饰器定义自定义的验证逻辑。
- 自动生成文档:从模型生成 JSON 架构,提供了自动生成文档等功能。
- 高效性:Pydantic 的核心验证逻辑是用 Rust 编写的,使其成为 Python 中最快的数据验证库之一。
用法示例
以下是一个使用 Pydantic 和其验证装饰器的示例:
from pydantic import BaseModel, validator, ValidationError, Field
from typing import List, Optional # 定义一个简单的用户模型
class User(BaseModel): id: int name: str = Field(..., min_length=4, max_length=20, title="用户名") email: str = Field(..., regex=r'^[\w.-]+@[\w-]+\.\w{2,}$', title="邮箱地址") age: int = Field(gt=0, lt=150, description="年龄(0-150岁)") is_active: bool = Field(default=True, title="是否活跃") # 自定义验证函数,验证名字是否唯一(这里仅为示例,实际中需要查询数据库等) @validator('name') def check_name_uniqueness(cls, v, values, **kwargs): # 假设已有一个用户列表,用于检查名字是否唯一 existing_names = ['alice', 'bob'] # 实际中应替换为数据库查询等逻辑 if v in existing_names: raise ValueError('用户名已存在') return v # 验证朋友列表中的每个元素是否为有效字符串 @validator('friends') def check_friends(cls, v, **kwargs): if not all(isinstance(friend, str) for friend in v): raise ValueError('朋友列表中的每个元素都必须是字符串') return v # 示例用法
try: # 尝试创建一个不符合规则的用户实例(名字太短) user1 = User(id=1, name='abc', email='abc@example.com', age=30, is_active=True)
except ValidationError as e: print(e.json()) # 输出验证错误信息 try: # 尝试创建一个不符合规则的用户实例(朋友列表中包含非字符串元素) user2 = User(id=2, name='validuser', email='validuser@example.com', age=25, is_active=True, friends=[123, 'friend2'])
except ValidationError as e: print(e.json()) # 输出验证错误信息 try: # 尝试创建一个符合规则的用户实例 user3 = User(id=3, name='validuser3', email='validuser3@example.com', age=20, is_active=True, friends=['friend1', 'friend2']) print(user3.json()) # 输出用户实例的 JSON 表示
except ValidationError as e: print(e.json()) # 正常情况下不会执行到这里
在上面的示例中,我们定义了一个 User
模型,并使用 Pydantic 的验证装饰器来添加自定义的验证逻辑。check_name_uniqueness
方法用于检查用户名是否唯一(这里仅为示例逻辑,实际中需要查询数据库等),check_friends
方法用于验证朋友列表中的每个元素是否为有效字符串。然后,我们尝试创建几个用户实例,并捕获和处理验证错误。
需要注意的是,Pydantic 的验证逻辑是在模型实例创建时自动执行的,如果数据不符合模型的定义,则会抛出 ValidationError
异常。此外,Pydantic 还提供了丰富的错误信息和文档生成功能,方便开发者进行调试和集成。
SQLAlchemy[asyncio]==2.0.31 SQL 工具包和ORM库
SQLAlchemy 库的功能介绍
SQLAlchemy 是一个流行的 Python SQL 工具包和对象关系映射(ORM)库。它提供了一个高级抽象层,用于在 Python 应用程序中处理数据库操作。SQLAlchemy 的主要功能包括:
- ORM(对象关系映射):允许你以面向对象的方式操作数据库,而不需要直接编写 SQL 语句。
- SQL 表达式语言:提供了一个 SQL 表达式构造器,用于构建 SQL 语句,同时保持与 Python 的集成。
- 连接池:管理数据库连接,以提高性能和可靠性。
- 方言支持:支持多种数据库后端,包括 PostgreSQL、MySQL、SQLite、Oracle 等。
- 事务管理:提供对数据库事务的支持,允许你以 ACID(原子性、一致性、隔离性、持久性)原则管理数据。
- 自动迁移:虽然 SQLAlchemy 本身不提供数据库迁移工具,但它与 Alembic 等迁移工具集成得很好,允许你管理数据库模式的演变。
- 关系映射:支持复杂的关系映射,如一对一、一对多、多对多等。
- 查询语言:提供了一个查询 API,允许你以 Pythonic 的方式构建和执行数据库查询。
连接 PostgreSQL 和 MySQL 数据库的用法示例
1. 连接 PostgreSQL 数据库
首先,你需要安装 SQLAlchemy 和 psycopg2(PostgreSQL 的 Python 驱动程序):
pip install sqlalchemy psycopg2-binary
然后,你可以使用以下代码连接到 PostgreSQL 数据库:
from sqlalchemy import create_engine # 替换为你的数据库连接信息
DATABASE_URL = "postgresql+psycopg2://username:password@localhost/dbname" # 创建引擎
engine = create_engine(DATABASE_URL) # 连接到数据库(可选,通常用于测试连接)
with engine.connect() as connection: # 执行一些数据库操作,比如查询 result = connection.execute("SELECT version();") print(result.fetchone())
2. 连接 MySQL 数据库
首先,你需要安装 SQLAlchemy 和 pymysql(MySQL 的 Python 驱动程序):
pip install sqlalchemy pymysql
然后,你可以使用以下代码连接到 MySQL 数据库:
from sqlalchemy import create_engine # 替换为你的数据库连接信息
DATABASE_URL = "mysql+pymysql://username:password@localhost/dbname" # 创建引擎
engine = create_engine(DATABASE_URL) # 连接到数据库(可选,通常用于测试连接)
with engine.connect() as connection: # 执行一些数据库操作,比如查询 result = connection.execute("SELECT VERSION();") print(result.fetchone())
在上面的示例中,DATABASE_URL
是一个包含数据库连接信息的字符串。你需要将其替换为你的实际数据库用户名、密码、主机名和数据库名。
使用 ORM 进行数据库操作
以下是一个使用 SQLAlchemy ORM 进行数据库操作的简单示例:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker # 创建基础类
Base = declarative_base() # 定义模型
class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True, index=True) name = Column(String, index=True) email = Column(String, unique=True, index=True) # 创建引擎(以 PostgreSQL 为例)
engine = create_engine("postgresql+psycopg2://username:password@localhost/dbname") # 创建所有表
Base.metadata.create_all(bind=engine) # 创建会话
Session = sessionmaker(bind=engine)
session = Session() # 创建新用户
new_user = User(name="John Doe", email="john.doe@example.com")
session.add(new_user)
session.commit() # 查询用户
users = session.query(User).all()
for user in users: print(user.name, user.email)
在这个示例中,我们首先定义了一个 User
模型,它对应于数据库中的一个表。然后,我们创建了一个 SQLAlchemy 引擎,并使用它创建了所有必要的数据库表。接着,我们创建了一个会话,并使用它来添加新用户到数据库中,并查询所有用户。
请注意,在实际应用中,你应该处理数据库连接错误、事务回滚以及会话管理等事务。此外,对于生产环境,你应该考虑使用数据库连接池和其他性能优化技术。
psycopg2==2.9.10 访问PostgreSQL数据库系统
功能介绍
psycopg2是Python的一个第三方库,它提供了访问PostgreSQL数据库系统的功能。以下是对psycopg2库的主要功能介绍:
- 高性能:psycopg2基于C语言实现,因此能够提供高效的数据库操作,适合处理大规模数据集和高并发请求。
- 完全兼容:psycopg2与PostgreSQL数据库完全兼容,并支持大多数PostgreSQL特性,包括事务管理、游标操作、数据类型转换等。
- 简单易用:psycopg2提供了简单的API,易于学习和使用,使开发人员能够快速上手并进行数据库操作。
- 安全性:psycopg2具有内置的防止SQL注入攻击的功能,通过参数化查询等机制来保证数据安全。
- 功能丰富:除了基本的数据库操作(如查询、插入、更新、删除)外,psycopg2还支持COPY TO/COPY FROM语句等高级功能。
用法示例
以下是一个使用psycopg2库连接PostgreSQL数据库、执行查询并处理结果的示例:
import psycopg2
from psycopg2 import sql # 数据库连接参数
DB_NAME = "your_database_name"
DB_USER = "your_database_user"
DB_PASSWORD = "your_database_password"
DB_HOST = "your_database_host"
DB_PORT = "your_database_port" # 通常是5432 # 连接到数据库
try: connection = psycopg2.connect( dbname=DB_NAME, user=DB_USER, password=DB_PASSWORD, host=DB_HOST, port=DB_PORT ) print("连接成功") # 创建一个游标对象 cursor = connection.cursor() # 执行SQL查询 query = sql.SQL("SELECT id, name FROM your_table") cursor.execute(query) # 获取所有查询结果 results = cursor.fetchall() # 处理结果 for row in results: print(f"ID: {row[0]}, Name: {row[1]}") except Exception as error: print(f"Error: {error}") finally: # 关闭游标和连接 if cursor: cursor.close() if connection: connection.close() print("数据库连接已关闭")
在上述示例中,我们首先导入了psycopg2库和sql子模块。然后,我们定义了数据库连接参数,并使用这些参数连接到PostgreSQL数据库。接下来,我们创建了一个游标对象,并使用它执行了一个SQL查询。查询结果通过fetchall()方法获取,并遍历打印出来。最后,我们关闭了游标和数据库连接。
需要注意的是,在实际应用中,应该确保数据库凭据的安全存储和访问,避免将敏感信息硬编码在代码中。此外,还可以使用参数化查询来防止SQL注入攻击,提高数据安全性。
其他功能示例
除了基本的数据库操作外,psycopg2还支持许多其他功能。以下是一些示例:
- 使用with语句管理资源:
with psycopg2.connect(dbname=DB_NAME, user=DB_USER, password=DB_PASSWORD, host=DB_HOST, port=DB_PORT) as connection: with connection.cursor() as cursor: query = sql.SQL("SELECT id, name FROM your_table") cursor.execute(query) results = cursor.fetchall() for row in results: print(f"ID: {row[0]}, Name: {row[1]}")
使用with语句可以自动管理资源(如游标和连接)的生命周期,无需手动关闭它们。
- 执行INSERT、UPDATE、DELETE操作并提交事务:
with psycopg2.connect(dbname=DB_NAME, user=DB_USER, password=DB_PASSWORD, host=DB_HOST, port=DB_PORT) as connection: with connection.cursor() as cursor: # 插入数据 insert_query = sql.SQL("INSERT INTO your_table (id, name) VALUES (%s, %s)") cursor.execute(insert_query, (1, 'Alice')) # 更新数据 update_query = sql.SQL("UPDATE your_table SET name = %s WHERE id = %s") cursor.execute(update_query, ('Bob', 1)) # 删除数据 delete_query = sql.SQL("DELETE FROM your_table WHERE id = %s") cursor.execute(delete_query, (1,)) # 提交事务 connection.commit()
在执行INSERT、UPDATE、DELETE等修改数据的操作时,需要调用connection.commit()方法来提交事务,以确保更改被保存到数据库中。
- 使用COPY TO/COPY FROM语句:
with psycopg2.connect(dbname=DB_NAME, user=DB_USER, password=DB_PASSWORD, host=DB_HOST, port=DB_PORT) as connection: with connection.cursor() as cursor: # 将数据从表中复制到CSV文件中 copy_to_query = sql.SQL("COPY your_table TO STDOUT WITH CSV HEADER") with open('output.csv', 'w', newline='') as f: cursor.copy_expert(copy_to_query, f) # 从CSV文件中复制数据到表中 copy_from_query = sql.SQL("COPY your_table FROM STDIN WITH CSV HEADER") with open('input.csv', 'r') as f: cursor.copy_from(f, your_table, sep=',')
COPY TO/COPY FROM语句是PostgreSQL中的高级功能,可以快速地将数据从表中导出到外部文件或从外部文件导入到表中。在psycopg2中,可以使用cursor.copy_expert()和cursor.copy_from()方法来实现这些操作。
通过以上示例和介绍,您可以更好地了解psycopg2库的功能和用法,并在实际应用中灵活运用它来访问和操作PostgreSQL数据库。
asyncpg==0.30.0 PostgreSQL数据库客户端库
功能介绍
asyncpg 是一个专为 Python/asyncio 设计的高效、干净的 PostgreSQL 服务器二进制协议实现。它提供了一种与 PostgreSQL 进行交互的新方式,特别适用于异步编程环境。以下是 asyncpg 的主要功能:
- 高性能
- asyncpg 直接实现了 PostgreSQL 服务器的二进制协议,避免了传统数据库接口库(如 DB-API)的通用性带来的性能损失。
- 在测试中,asyncpg 的性能平均比 psycopg3 快 5 倍,特别适合高并发和高吞吐量的应用场景。
- 异步操作
- 基于 Python 的 asyncio 框架,asyncpg 能够高效处理数据库操作,特别适合高并发场景。
- 提供了异步的数据库连接、查询、插入、更新和删除等操作。
- 丰富的功能支持
- 支持预处理语句,提高查询效率并减少 SQL 注入风险。
- 支持可滚动游标,方便分页和部分迭代查询结果。
- 自动编码和解码复合类型、数组以及它们的组合,简化了复杂数据类型的处理。
- 易用性
- 提供了简单直观的接口,便于进行连接管理、查询执行和数据操作。
- 详尽的项目文档可以帮助开发者迅速理解和使用 asyncpg。
- 无依赖性
- asyncpg 可通过 PyPI 直接安装,无需额外的依赖包。
用法示例
以下是一个使用 asyncpg 进行异步数据库操作的示例:
-
安装 asyncpg
首先,你需要通过 pip 安装 asyncpg 库:
pip install asyncpg
-
连接数据库并执行查询
接下来,你可以使用 asyncpg 连接到 PostgreSQL 数据库并执行查询。以下是一个简单的示例:
import asyncio import asyncpg async def run(): # 连接到数据库 conn = await asyncpg.connect( user='your_username', password='your_password', database='your_database', host='127.0.0.1' ) try: # 执行查询 values = await conn.fetch( 'SELECT * FROM your_table WHERE id = $1', 1 ) print(values) finally: # 关闭连接 await conn.close() # 运行异步任务 loop = asyncio.get_event_loop() loop.run_until_complete(run())
在这个示例中,我们创建了一个异步函数
run
,它首先连接到 PostgreSQL 数据库,然后执行一个查询操作,并打印查询结果。最后,我们关闭数据库连接。为了运行这个异步任务,我们使用asyncio.get_event_loop()
获取事件循环,并调用run_until_complete
方法来运行run
函数。 -
使用连接池
在高并发场景下,使用连接池可以更有效地管理数据库连接。以下是一个使用连接池的示例:
import asyncio import asyncpg async def init_pool(): return await asyncpg.create_pool( user='your_username', password='your_password', database='your_database', host='127.0.0.1', min_size=5, max_size=10 ) async def run(pool): async with pool.acquire() as conn: values = await conn.fetch( 'SELECT * FROM your_table WHERE id = $1', 1 ) print(values) async def main(): pool = await init_pool() try: await run(pool) finally: await pool.close() # 运行异步任务 loop = asyncio.get_event_loop() loop.run_until_complete(main())
在这个示例中,我们首先创建了一个连接池,并在
run
函数中使用pool.acquire()
方法获取一个连接。然后,我们执行查询操作并打印查询结果。最后,我们关闭连接池。为了运行这个异步任务,我们创建了一个main
函数来初始化连接池,并在finally
块中关闭连接池。然后,我们使用事件循环来运行main
函数。
通过以上介绍和示例代码,你可以了解到 asyncpg 库的基本功能和用法。无论是在简单的数据库操作还是复杂的异步编程场景中,asyncpg 都能为你提供高效且可靠的支持。
redis==5.0.7 与 Redis 数据库进行交互
功能介绍
Python Redis 库(通常指 redis-py
)是一个用于与 Redis 数据库进行交互的 Python 客户端。Redis 是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。redis-py
库提供了丰富的功能,使得 Python 程序能够方便地访问 Redis 提供的各种数据结构(如字符串、哈希、列表、集合、有序集合等)和高级功能(如发布/订阅、事务、脚本执行等)。
以下是 redis-py
库的一些主要功能:
- 连接管理:支持多种连接模式,包括单连接、连接池和发布/订阅连接。
- 数据结构操作:提供了对 Redis 数据结构的操作方法,如
set
、get
、hset
、hget
、lpush
、rpop
、sadd
、smembers
、zadd
、zrange
等。 - 事务处理:支持 Redis 事务,可以通过
multi
、exec
、discard
和watch
命令来实现。 - 发布/订阅:提供了发布/订阅功能,允许客户端订阅一个或多个频道,并从这些频道接收消息。
- 管道:通过管道可以将多个命令打包在一起,然后一次性发送给 Redis 服务器执行,从而减少了网络往返次数,提高了执行效率。
- 脚本执行:支持使用 Lua 脚本在 Redis 服务器上执行复杂的操作。
- 连接安全性:支持 SSL/TLS 加密连接,确保数据传输的安全性。
用法示例
以下是一个使用 redis-py
库连接 Redis 数据库、执行基本操作并处理结果的示例:
import redis # 连接到 Redis 服务器
r = redis.Redis(host='localhost', port=6379, db=0) # 设置一个键值对
r.set('foo', 'bar') # 获取键的值
value = r.get('foo')
print(value.decode('utf-8')) # 输出: bar # 使用哈希数据结构
r.hset('myhash', 'field1', 'value1')
r.hset('myhash', 'field2', 'value2') # 获取哈希字段的值
field1_value = r.hget('myhash', 'field1')
print(field1_value.decode('utf-8')) # 输出: value1 # 获取哈希的所有字段和值
myhash_values = r.hgetall('myhash')
for field, value in myhash_values.items(): print(f"{field.decode('utf-8')}: {value.decode('utf-8')}") # 使用列表数据结构
r.lpush('mylist', 'element1')
r.lpush('mylist', 'element2') # 获取列表的元素
mylist_elements = r.lrange('mylist', 0, -1)
for element in mylist_elements: print(element.decode('utf-8')) # 事务处理示例
try: pipe = r.pipeline() pipe.multi() pipe.set('key1', 'value1') pipe.set('key2', 'value2') pipe.execute()
except redis.exceptions.WatchError: print("Transaction failed due to concurrent modification.") # 发布/订阅示例(需要在另一个客户端中订阅频道以查看消息)
# pub = redis.Redis(host='localhost', port=6379, db=0)
# pub.publish('mychannel', 'Hello, World!') # 使用管道
pipe = r.pipeline()
pipe.set('key3', 'value3')
pipe.get('key3')
results, _ = pipe.execute()
print(results[1].decode('utf-8')) # 输出: value3
注意:
- 在连接 Redis 服务器时,您需要提供 Redis 服务器的主机名(
host
)、端口号(port
)和数据库索引(db
)。默认情况下,Redis 服务器运行在本地主机的 6379 端口上,数据库索引为 0。 - 由于 Redis 存储的值是二进制安全的,因此
get
、hget
等命令返回的值是字节串(bytes
)。如果您希望将其转换为字符串,请使用.decode('utf-8')
方法进行解码。 - 在事务处理示例中,我们使用了
pipeline
和multi
命令来创建一个事务。如果事务在执行过程中被其他客户端修改(例如,通过watch
命令监视的键被修改),则会引发WatchError
异常。 - 发布/订阅功能需要在另一个客户端中订阅相应的频道才能看到发布的消息。在上面的示例中,我们注释掉了发布消息的代码,您可以在另一个 Python 脚本或 Redis 客户端中订阅
mychannel
频道来接收消息。
通过以上示例和介绍,您可以更好地了解 redis-py
库的功能和用法,并在实际应用中灵活运用它来与 Redis 数据库进行交互。
requests==2.32.3 HTTP 客户端库
功能介绍
Requests 是一个简单且优雅的 Python HTTP 客户端库,专门用于发送 HTTP 请求。相比于 Python 标准库中的 urllib,Requests 更加简洁易用,且功能强大。Requests 库提供了丰富的功能,包括:
- Keep-Alive & 连接池:支持 HTTP 持久连接和连接池,提高了网络请求的效率。
- 国际化域名和 URL:支持国际化域名和 URL,方便处理不同语言的网站。
- 带持久 Cookie 的会话:支持会话对象,可以跨请求保持 Cookie。
- 浏览器式的 SSL 认证:提供浏览器式的 SSL 证书验证,确保数据传输的安全性。
- 自动内容解码:自动解码响应内容,支持 gzip、deflate 等压缩格式。
- 基本/摘要式的身份认证:支持 HTTP 基本认证和摘要认证。
- 优雅的 key/value Cookie:以字典形式管理 Cookie,方便操作。
- 自动解压:自动解压响应内容,如 gzip、deflate 等。
- Unicode 响应体:响应体以 Unicode 形式返回,方便处理文本数据。
- HTTP(S) 代理支持:支持通过 HTTP 或 HTTPS 代理发送请求。
- 文件分块上传:支持将大文件分块上传,提高上传效率。
- 流下载:支持以流的方式下载文件,适用于大文件下载。
- 连接超时:可以设置请求的超时时间,防止请求长时间无响应。
- 分块请求:支持将请求体分块发送,适用于发送大数据量。
用法示例
以下是一些使用 Requests 库发送 HTTP 请求的示例:
- 发送 GET 请求
import requests # 发送 GET 请求
response = requests.get('https://httpbin.org/get') # 打印响应状态码
print(response.status_code) # 打印响应内容
print(response.text)
- 发送带参数的 GET 请求
import requests # 发送带参数的 GET 请求
params = {'name': 'gemey', 'age': 22}
response = requests.get('https://httpbin.org/get', params=params) # 打印响应内容
print(response.text)
- 发送 POST 请求
import requests # 发送 POST 请求
data = {'key': 'value'}
response = requests.post('https://httpbin.org/post', data=data) # 打印响应内容
print(response.text)
- 处理 JSON 数据
import requests # 发送 GET 请求并解析 JSON 数据
response = requests.get('https://httpbin.org/get')
json_data = response.json() # 打印 JSON 数据
print(json_data)
- 设置自定义 Header
import requests # 设置自定义 Header
headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get('https://www.baidu.com', headers=headers) # 打印响应状态码
print(response.status_code)
- 使用代理
import requests # 设置代理
proxies = { 'http': 'http://127.0.0.1:8080', 'https': 'http://127.0.0.1:8080',
}
response = requests.get('https://httpbin.org/get', proxies=proxies) # 打印响应内容
print(response.text)
- 处理重定向和超时
import requests try: # 发送 GET 请求,设置超时时间为 5 秒 response = requests.get('https://httpbin.org/delay/5', timeout=5) print(response.text)
except requests.exceptions.Timeout: # 捕获超时异常 print('Request timed out')
- 使用 Session 对象
import requests # 创建 Session 对象
session = requests.Session() # 发送 GET 请求
response = session.get('https://httpbin.org/get')
print(response.text) # 发送 POST 请求
data = {'key': 'value'}
response = session.post('https://httpbin.org/post', data=data)
print(response.text)
通过以上示例,您可以了解 Requests 库的基本用法和功能。Requests 库提供了简洁易用的 API,使得发送 HTTP 请求和处理响应变得非常简单。无论是发送 GET 请求、POST 请求,还是处理 JSON 数据、设置自定义 Header、使用代理等,Requests 库都能轻松应对。
APScheduler==3.10.4 定时任务调度库
功能介绍
APScheduler(Advanced Python Scheduler)是一个轻量级的 Python 定时任务调度框架,它提供了灵活且强大的任务调度功能。以下是 APScheduler 的主要功能:
- 多种调度方式
- 支持间隔调度(interval):按照固定的时间间隔执行任务。
- 支持定时调度(date):在指定的时间点执行任务。
- 支持CRON表达式调度(cron):按照CRON表达式的规则周期性执行任务。
- 多种触发器
- 提供了简单的时间触发器、日期触发器、CRON触发器等多种触发器类型,满足不同场景下的任务调度需求。
- 可扩展的作业存储
- 支持内存、数据库等多种作业存储方式,方便管理和持久化存储作业信息。
- 包含调度逻辑
- 每一个作业有它自己的触发器,用于决定接下来哪一个作业会运行。
- 事件监听
- 用户可以自定义一些函数来监听APScheduler在进行某些操作时触发的事件,如任务执行异常事件、任务错过执行时间事件等。
- 多种执行器
- 支持ThreadPoolExecutor、ProcessPoolExecutor等多种执行器,可以根据实际需求选择合适的执行器来执行任务。
用法示例
以下是一个使用 APScheduler 创建定时任务的示例:
-
安装 APScheduler
首先,你需要通过 pip 安装 APScheduler 库:
pip install apscheduler
-
创建并启动调度器
接下来,你可以创建一个调度器并添加任务。以下是一个使用 BlockingScheduler 创建每隔5秒执行一次任务的示例:
from apscheduler.schedulers.blocking import BlockingScheduler from datetime import datetime def job(): print(datetime.now().strftime("%Y-%m-%d %H:%M:%S")) scheduler = BlockingScheduler() scheduler.add_job(job, 'interval', seconds=5) scheduler.start()
在这个示例中,我们创建了一个 BlockingScheduler 实例,并使用
add_job
方法添加了一个任务。这个任务会每隔5秒执行一次,并打印当前的时间。 -
使用 BackgroundScheduler 在后台执行任务
如果你希望调度器在后台执行,可以使用 BackgroundScheduler。以下是一个示例:
from apscheduler.schedulers.background import BackgroundScheduler import time def job(): print("Executing job...") scheduler = BackgroundScheduler() scheduler.add_job(job, 'interval', seconds=10) scheduler.start() try: # 主线程继续执行其他任务 while True: print("Main thread is running...") time.sleep(2) except (KeyboardInterrupt, SystemExit): # 当主线程退出时,关闭调度器 scheduler.shutdown()
在这个示例中,我们创建了一个 BackgroundScheduler 实例,并添加了一个每隔10秒执行一次的任务。然后,主线程继续执行其他任务,而调度器在后台运行并执行任务。
-
配置作业存储和执行器
APScheduler 支持多种作业存储和执行器。以下是一个使用 MongoDB 存储作业和 ThreadPoolExecutor 执行任务的示例:
from apscheduler.schedulers.blocking import BlockingScheduler from apscheduler.jobstores.mongodb import MongoDBJobStore from apscheduler.executors.pool import ThreadPoolExecutor from pymongo import MongoClient from datetime import datetime # MongoDB 参数 client = MongoClient('127.0.0.1', 27017) def job(): print(datetime.now().strftime("%Y-%m-%d %H:%M:%S")) # 存储方式 jobstores = { 'mongo': MongoDBJobStore(collection='job', database='test', client=client), 'default': 'memory' # 默认使用内存存储,这里为了示例同时配置了 mongo 和 memory } executors = { 'default': ThreadPoolExecutor(10) # 使用线程池执行器,最大线程数为10 } job_defaults = { 'coalesce': False, # 默认情况下关闭新的作业合并 'max_instances': 10 # 设置调度程序将同时运行的特定作业的最大实例数 } scheduler = BlockingScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults) scheduler.add_job(job, 'interval', seconds=5, jobstore='mongo') # 将作业添加到 mongo 存储中 scheduler.start()
在这个示例中,我们配置了 MongoDB 作为作业存储,并使用了 ThreadPoolExecutor 作为执行器。然后,我们创建了一个调度器,并将一个任务添加到 MongoDB 存储中。
通过以上介绍和示例代码,你可以了解到 APScheduler 库的基本功能和用法。无论是在简单的定时任务调度还是复杂的作业管理场景中,APScheduler 都能为你提供灵活且强大的支持。
cachebox==4.1.2 缓存库
功能介绍
cachebox 是一个用 Rust 编写的 Python 缓存库,它提供了高性能的缓存功能。cachebox 利用了 Rust 语言的高效性以及 Google 的高性能 SwissTable 散列表来实现其卓越的性能。以下是 cachebox 的主要功能:
- 高性能
- cachebox 宣称自己是最快的 Python 缓存库之一,通过高效的 Rust 实现和优化的数据结构,显著提高了缓存操作的性能。
- 适用于各种需要高性能缓存的应用场景,如实时交易系统、大数据处理平台等。
- 线程安全
- cachebox 通过采用读写锁(RwLock),确保在多线程环境下的稳定性和可靠性。
- 适用于高并发环境,避免数据竞争和线程安全问题。
- 丰富的缓存算法
- cachebox 提供了超过七种不同的缓存策略,如 LRU(最近最少使用)、LFU(最不经常使用)和 FIFO(先进先出)等。
- 开发者可以根据具体需求灵活选择合适的缓存策略,以满足不同的缓存需求。
- 易用性
- cachebox 的设计直观明了,只需简单导入即可享受增强版字典般的便捷体验。
- 提供了丰富的 API 接口,方便开发者进行缓存操作,如设置、获取、删除和清除缓存等。
- 广泛的兼容性
- cachebox 支持 Python 3.8 及以上版本,包括 PyPy 和 CPython 两种解释器环境。
- 适用于各种 Python 项目和框架,方便集成和使用。
用法示例
以下是一个使用 cachebox 进行缓存操作的示例:
-
安装 cachebox
首先,你需要通过 pip 安装 cachebox 库:
pip install cachebox
-
导入 cachebox 并创建缓存对象
接下来,你可以导入 cachebox 并创建一个缓存对象。例如,你可以使用 LRU 缓存策略:
from cachebox import Cache, LRUCache # 创建一个 LRU 缓存对象,指定最大容量 cache = LRUCache(max_size=100)
-
设置和获取缓存
然后,你可以使用缓存对象来设置和获取缓存值。例如:
# 设置缓存值 cache.set('key1', 'value1') # 获取缓存值 value = cache.get('key1') print(value) # 输出: value1
-
删除和清除缓存
你还可以删除特定的缓存值或清除整个缓存。例如:
# 删除特定的缓存值 cache.delete('key1') # 清除整个缓存 cache.clear()
-
高级用法
cachebox 还提供了许多高级用法,如设置缓存过期时间、使用自定义的缓存策略等。你可以参考 cachebox 的官方文档来获取更多信息和示例。
通过以上介绍和示例代码,你可以了解到 cachebox 库的基本功能和用法。cachebox 以其高性能、线程安全性和丰富的缓存算法等优点,适用于各种需要高性能缓存的应用场景。无论是在日常开发还是高负载系统中,cachebox 都能为你提供显著的帮助。
DateTime==5.5 日期时间库
Python datetime
库的功能介绍和用法示例
功能介绍
Python 的 datetime
模块提供了一系列类,用于处理日期和时间。这些类包括 date
、time
、datetime
、timedelta
以及 tzinfo
(用于处理时区信息,但通常不直接使用其基类,而是使用它的子类,如 pytz
库提供的时区信息)。以下是 datetime
模块的一些主要功能和类:
- 日期和时间表示
date
类:表示日期(年、月、日)。time
类:表示时间(时、分、秒、微秒)。datetime
类:结合了date
和time
,表示具体的日期和时间。
- 时间差计算
timedelta
类:表示两个日期或时间之间的差异,支持天、秒、微秒等单位的加减运算。
-
时区支持
(通过
tzinfo
基类和第三方库如
pytz
)
- 虽然
datetime
模块本身提供的tzinfo
是一个抽象基类,但你可以使用像pytz
这样的库来获取具体的时区信息。
- 日期和时间的格式化与解析
strftime
方法:将日期或时间对象格式化为字符串。strptime
方法(在datetime
模块中未直接提供,但可以通过datetime.datetime.strptime
访问):将字符串解析为日期或时间对象。
- 日期和时间的替换与修改
- 可以通过替换或修改日期或时间对象的某些部分来创建新的对象,而不改变原始对象。
用法示例
以下是一些使用 datetime
模块的示例代码:
import datetime # 获取当前日期和时间
now = datetime.datetime.now()
print("当前日期和时间:", now) # 创建特定的日期和时间对象
specific_date = datetime.datetime(2023, 10, 5, 14, 30, 0)
print("特定日期和时间:", specific_date) # 日期和时间运算
delta = datetime.timedelta(days=10, hours=3, minutes=30)
future_date = now + delta
print("未来日期和时间:", future_date) # 格式化日期和时间
formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
print("格式化后的日期和时间:", formatted_date) # 解析字符串为日期和时间对象
parsed_date = datetime.datetime.strptime("2023-10-05 14:30:00", "%Y-%m-%d %H:%M:%S")
print("解析后的日期和时间:", parsed_date) # 替换日期和时间对象的某些部分
replaced_date = now.replace(year=2024)
print("替换年份后的日期和时间:", replaced_date) # 提取日期和时间的各个部分
year, month, day = now.year, now.month, now.day
hour, minute, second = now.hour, now.minute, now.second
print("年:", year, "月:", month, "日:", day, "时:", hour, "分:", minute, "秒:", second)
注意事项
- 在处理时区时,建议使用
pytz
库来获取和处理时区信息,因为datetime.tzinfo
是一个抽象基类,直接使用它可能会比较复杂。 datetime
对象是不可变的,这意味着你不能直接修改它们的值。当你对datetime
对象进行运算或替换某些部分时,会返回一个新的datetime
对象。- 在格式化日期和时间时,
strftime
方法的格式字符串遵循特定的规则,你可以参考 Python 的官方文档来获取更多信息。
jsonpath-ng==1.5.3 解析和操作JSON数据
jsonpath-ng
是一个Python库,它提供了使用JSONPath语法来解析和操作JSON数据的功能。JSONPath是一种用于在JSON数据中定位和提取特定元素的查询语言,类似于XPath对XML的作用。以下是jsonpath-ng
库的功能介绍和用法示例:
功能介绍
- 数据提取
jsonpath-ng
允许用户通过JSONPath表达式从JSON数据中提取特定的元素。这可以简化数据提取的过程,特别是在处理复杂的JSON结构时。
- 数据过滤
- JSONPath表达式支持过滤器,可以根据条件筛选出满足要求的数据。这使得数据过滤更加灵活和高效。
- 数据修改
- 除了提取数据外,
jsonpath-ng
还支持通过update()
方法修改JSON数据中的特定元素。
- 错误处理
- 在实际应用中,可能会遇到路径表达式错误或JSON数据结构变化等异常情况。
jsonpath-ng
允许用户添加适当的错误处理逻辑,以增强程序的稳定性和可靠性。
- 与其他库的集成
jsonpath-ng
可以与其他Python库(如Pandas、Flask、Django等)结合使用,以增强JSON数据处理能力。
用法示例
以下是一个简单的示例,展示了如何使用jsonpath-ng
从JSON数据中提取信息:
from jsonpath_ng import parse # 示例JSON数据
data = { "store": { "book": [ { "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95 }, { "category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99 } ], "bicycle": { "color": "red", "price": 19.95 } }
} # 解析JSONPath表达式并提取所有书籍的作者
authors_path = parse("$.store.book[*].author")
authors = [match.value for match in authors_path.find(data)]
print(authors) # 输出: ['Nigel Rees', 'Evelyn Waugh']
在这个示例中,我们首先导入了jsonpath_ng
库中的parse
函数。然后,我们定义了一个包含书籍和自行车信息的JSON数据。接下来,我们使用JSONPath表达式$.store.book[*].author
来提取所有书籍的作者,并通过find()
方法找到匹配的数据。最后,我们使用列表推导式将匹配到的作者名存储在一个列表中,并打印出来。
另外,jsonpath-ng
还支持修改JSON数据中的特定元素。以下是一个示例,展示了如何使用update()
方法修改数据:
from jsonpath_ng import parse # 示例JSON数据
data = { "person": { "name": "Alice", "age": 30, "address": { "city": "New York", "country": "USA" } }
} # 解析JSONPath表达式并更新特定键的值
expression = parse("$.person.name")
match = expression.find(data)
if match: match[0].update("Bob")
print(data) # 输出: {'person': {'name': 'Bob', 'age': 30, 'address': {'city': 'New York', 'country': 'USA'}}}
在这个示例中,我们使用JSONPath表达式$.person.name
来找到需要修改的键,并使用update()
方法将其值更新为"Bob"。然后,我们打印出修改后的JSON数据。
综上所述,jsonpath-ng
是一个功能强大的Python库,它允许用户通过JSONPath表达式轻松地解析和操作JSON数据。
loguru==0.7.2 日志库
Loguru是一个用于Python的日志库,以其简单易用、功能强大而著称。以下是对Loguru库的功能介绍和用法示例:
功能介绍
- 简单易用
- Loguru的API设计简洁直观,易于上手和使用。
- 无需复杂的配置,开箱即用。
- 丰富的功能
- 支持异步日志记录,适合异步应用程序。
- 支持日志文件轮转,可以根据文件大小或时间自动轮换日志文件。
- 支持日志格式化,可以自定义日志的输出格式。
- 提供日志过滤器功能,可以根据日志级别或其他条件过滤日志输出。
- 自动处理日志格式、文件管理和异常捕获等。
- 多线程安全
- 支持多线程和异步应用程序的日志记录,确保日志记录的线程安全性。
- 强大的日志级别控制
- Loguru提供了多个日志级别,如TRACE、DEBUG、INFO、SUCCESS、WARNING、ERROR和CRITICAL,允许用户根据需要输出不同级别的日志。
- 异常追踪
- Loguru可以自动捕获和记录异常信息,并将其与日志消息一起输出,使得调试和排查问题更加方便。
- 彩色输出支持
- 在控制台输出日志时,Loguru支持彩色输出,使日志更易于阅读和区分。
- 上下文管理
- Loguru提供了上下文管理功能,可以轻松地添加自定义上下文信息到日志消息中,以便更好地理解和分析日志。
用法示例
以下是一些常见的Loguru用法示例:
- 基本使用:
from loguru import logger # 记录不同级别的日志
logger.debug("这是一个调试消息")
logger.info("这是一个信息消息")
logger.success("这是一个成功消息")
logger.warning("这是一个警告消息")
logger.error("这是一个错误消息")
logger.critical("这是一个关键错误消息")
- 日志输出到文件:
from loguru import logger # 添加一个日志文件输出,并设置轮转(文件大小达到500MB时轮转)
logger.add("file.log", rotation="500 MB")
logger.info("这条消息将会记录到文件中")
- 日志格式化:
from loguru import logger # 设置日志格式
logger.add("file.log", format="{time} {level} {message}", rotation="500 MB")
logger.info("这是一条格式化的日志消息")
- 日志过滤:
from loguru import logger # 过滤某个级别的日志
logger.add("file.log", filter=lambda record: record["level"].name == "INFO")
logger.debug("这条消息不会被记录")
logger.info("这条消息会被记录")
logger.warning("这条消息也不会被记录")
- 异步日志:
from loguru import logger
import asyncio # 添加异步日志处理
logger.add("async_file.log", enqueue=True) async def main(): logger.info("这是一个异步日志消息") await asyncio.sleep(1) asyncio.run(main())
- 日志异常处理:
from loguru import logger def error_function(): x = 1 / 0 # 捕获并记录异常 try: error_function()
except ZeroDivisionError: logger.exception("捕获到一个除零错误")
- 添加上下文信息:
from loguru import logger # 使用logger.contextualize()添加上下文信息
with logger.contextualize(user="user1"): logger.info("用户user1的日志消息")
- 日志文件轮转与压缩:
from loguru import logger # 每天创建一个新日志文件,保留7天,并将旧日志文件压缩为ZIP格式
logger.add("file_{time}.log", rotation="1 day", retention="7 days", compression="zip")
通过以上示例,可以看出Loguru提供了丰富且易于使用的日志记录功能,适合各种规模的项目。无论是简单的脚本还是复杂的应用程序,Loguru都能提供方便的日志记录功能,帮助开发者更好地管理和分析日志信息。
openpyxl==3.1.5 读写Excel
openpyxl是一个流行的Python库,用于读写Excel 2007及更新版本的.xlsx
文件。它能够处理Excel文件的创建、修改、读取等操作,并且支持Excel的许多高级功能,如公式、图表、条件格式、筛选等。以下是openpyxl库的功能介绍和用法示例:
功能介绍
- 读取和写入Excel文件:
- 可以读取已存在的Excel文件。
- 可以创建新的Excel文件。
- 支持对单元格、行、列进行读写操作。
- 操作工作表:
- 可以添加、删除、获取工作表。
- 可以对工作表进行重命名。
- 公式与表达式:
- 支持在单元格中使用公式。
- 注意,openpyxl不会自动计算公式的结果,只会保存公式。要查看公式的计算结果,通常需要打开Excel或使用支持计算公式的库。
- 样式和格式化:
- 可以对单元格进行样式设置,包括字体、颜色、边框、对齐等。
- 支持设置列宽、行高。
- 图表与图像:
- 支持创建和插入图表,如柱状图、折线图等。
- 可以在工作表中添加图像。
- 数据验证:
- 可以为单元格设置数据验证,以确保用户输入的数据满足特定的条件。
- 其他功能:
- 支持合并和取消合并单元格。
- 支持保护和解保护工作表。
- 可以处理日期和时间格式。
- 支持设置打印选项,如页边距、页眉和页脚、纸张大小和方向等。
- 支持冻结窗格,这样在滚动工作表时,某些行或列可以保持不动。
用法示例
- 安装openpyxl:
使用pip进行安装:
pip install openpyxl
- 创建和保存Excel文件:
from openpyxl import Workbook # 创建一个新的工作簿
workbook = Workbook()
# 获取默认的工作表
sheet = workbook.active
# 给工作表命名
sheet.title = "MySheet"
# 写入数据到单元格
sheet['A1'] = "Hello"
sheet['B1'] = "World"
# 保存工作簿
workbook.save("example.xlsx")
- 打开和读取Excel文件:
from openpyxl import load_workbook # 加载已有的工作簿
workbook = load_workbook("example.xlsx")
# 获取活动的工作表
sheet = workbook.active
# 读取单元格的数据
a1_value = sheet['A1'].value
b1_value = sheet['B1'].value
print(f"A1: {a1_value}, B1: {b1_value}")
- 操作工作表:
# 创建一个新的工作表
new_sheet = workbook.create_sheet(title="NewSheet")
# 删除一个工作表
workbook.remove(new_sheet)
# 获取所有工作表的名称
sheetnames = workbook.sheetnames
print(sheetnames)
- 设置单元格样式:
from openpyxl.styles import Font, Color, Alignment, PatternFill, Border, Side # 设置字体样式
font = Font(name='Arial', size=14, bold=True, color='FF0000')
sheet['A1'].font = font
# 设置单元格对齐
sheet['A1'].alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
# 设置单元格颜色
fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")
sheet['B2'].fill = fill
# 设置边框样式
border = Border(left=Side(style='thin'), right=Side(style='thin'), top=Side(style='thin'), bottom=Side(style='thin'))
sheet['C3'].border = border
- 插入图表:
from openpyxl.chart import BarChart, Reference # 创建一个柱状图
chart = BarChart()
data = Reference(sheet, min_col=1, min_row=1, max_col=2, max_row=2)
chart.add_data(data, titles_from_data=True)
# 插入图表到工作表
sheet.add_chart(chart, "E5")
- 添加图像:
from openpyxl.drawing.image import Image img = Image('image_file.png')
sheet.add_image(img, 'A1') # 在A1单元格位置添加图像
- 数据验证:
from openpyxl.worksheet.datavalidation import DataValidation dv = DataValidation(type="whole", operator="between", formula1=1, formula2=100)
sheet.add_data_validation(dv) # 添加数据验证
这些示例展示了openpyxl库的一些基本功能。实际上,openpyxl还提供了许多其他的功能,如排序和过滤数据、设置条件格式等,可以根据需要进行学习和使用。
pandas==2.2.2 数据分析工具
Pandas是一个强大的Python数据分析工具,用于处理和分析结构化数据。它提供了高性能、易于使用的数据结构和数据分析工具,使数据清洗、数据转换、数据分析和数据可视化变得更加简单。以下是对Pandas库的功能介绍和用法示例:
Pandas库的功能介绍
- 数据结构
- Pandas提供了两种主要的数据结构:Series和DataFrame。Series是一维标记数组,类似于带有标签的数组;而DataFrame是二维标记数据结构,类似于表格,可以容纳多个Series。
- 数据读写
- Pandas可以读取和写入多种数据格式,如CSV、Excel、SQL数据库、JSON、HDF5等,方便用户进行数据导入和导出操作。
- 数据清洗和转换
- Pandas提供了丰富的数据清洗和转换功能,包括数据过滤、排序、删除重复值、填充缺失值、数据合并和重塑等操作。
- 数据分析
- Pandas提供了各种统计、聚合和分组操作,可以帮助用户快速进行数据分析和汇总。
- 数据可视化
- Pandas可以与其他数据可视化库(如Matplotlib和Seaborn)结合使用,方便用户进行数据可视化分析,生成各种图表和图形。
Pandas库的用法示例
- 数据导入
import pandas as pd # 从CSV文件导入数据
df_csv = pd.read_csv('data.csv') # 从Excel文件导入数据
df_excel = pd.read_excel('data.xlsx') # 从数据库导入数据
import sqlite3
conn = sqlite3.connect('database.db')
query = 'SELECT * FROM table_name'
df_db = pd.read_sql(query, conn)
- 数据导出
# 将数据保存为CSV文件
df.to_csv('output.csv', index=False) # 将数据保存为Excel文件
df.to_excel('output.xlsx', index=False) # 将数据保存到数据库
df.to_sql('table_name', conn, if_exists='replace', index=False)
- 数据查看
# 查看数据头部
print(df.head()) # 查看数据尾部
print(df.tail()) # 查看数据摘要统计信息
print(df.describe())
- 数据筛选
# 根据条件筛选数据
filtered_df = df[df['column_name'] > 10] # 根据索引筛选数据
selected_df = df.loc[1:5] # 根据列名筛选数据
selected_columns_df = df[['column1', 'column2']]
- 数据处理
# 数据清洗(去除空白字符)
df['column_name'] = df['column_name'].str.strip() # 缺失值处理(删除包含缺失值的行)
df.dropna(inplace=True) # 重复值处理(删除重复行)
df.drop_duplicates(inplace=True)
- 数据分组与聚合
# 按列进行分组并计算平均值
grouped_df = df.groupby('column_name').mean() # 多列分组并计算总和
grouped_df = df.groupby(['column1', 'column2']).sum()
- 数据可视化(结合Matplotlib库)
import matplotlib.pyplot as plt # 绘制折线图
df['column_name'].plot(kind='line')
plt.xlabel('X轴标签')
plt.ylabel('Y轴标签')
plt.title('折线图示例')
plt.show()
(注意:在使用上述代码时,请确保已经安装了pandas和matplotlib库,并且数据源文件或数据库连接信息是正确的。)
综上所述,Pandas库提供了丰富的数据处理和分析功能,能够帮助用户高效地处理和分析数据。通过掌握Pandas库的基本用法和高级功能,用户可以更好地利用Python进行数据分析和可视化工作。
passlib[bcrypt]==1.7.4 密码的安全存储和验证
Passlib是一个强大的Python库,专门用于密码的安全存储和验证。它提供了多种密码哈希算法和安全存储方法的实现,旨在提供简单易用的API,同时保证密码的安全性,抵御常见的密码攻击如彩虹表攻击、暴力破解等。以下是对Passlib库的功能介绍和用法示例:
Passlib库的功能介绍
- 密码哈希
- Passlib支持多种哈希算法,包括但不限于SHA-256、SHA-512、bcrypt、PBKDF2等。这些算法都是经过广泛认可和安全验证的,能够有效保护密码的安全性。
- 密码验证
- Passlib提供了验证哈希密码的功能,允许用户将输入的明文密码与存储的哈希密码进行比较,以验证密码的正确性。
- 密码强度评估
- Passlib还能够评估密码的强度,帮助用户判断密码是否符合安全要求。
- 密码策略管理
- Passlib允许用户定义密码策略,以确保密码的复杂性和安全性。用户可以设置密码的最小长度、最大长度、允许的字符集等策略要求。
- 常量时间比较
- Passlib提供了常量时间比较功能,这有助于防止时序攻击。在比较两个字符串时,即使其中一个字符串是密码,也能够确保比较操作的时间复杂度是恒定的,从而避免泄露密码信息。
Passlib库的用法示例
-
安装Passlib
要使用Passlib库,首先需要安装它。可以使用pip命令进行安装:
pip install passlib
-
生成和验证密码哈希
以下是一个使用bcrypt算法生成和验证密码哈希的示例:
from passlib.hash import bcrypt # 生成一个安全的密码哈希 password = 'my_password' hash_object = bcrypt.hash(password, bcrypt.gensalt()) hashed_password = hash_object # bcrypt.hash()返回的是一个包含哈希值和盐值的对象,可以直接存储 # 验证密码 input_password = 'my_password' if bcrypt.verify(input_password, hashed_password): print('Password is valid!') else: print('Password is not valid!')
注意:在上面的代码中,
bcrypt.hash()
函数返回的是一个包含哈希值和盐值的对象,通常可以直接存储为字符串形式。在验证密码时,使用bcrypt.verify()
函数将输入的明文密码与存储的哈希密码进行比较。 -
评估密码强度
以下是一个评估密码强度的示例(注意:Passlib本身不直接提供通用的密码强度评估函数,但可以通过其他方式实现或结合其他库进行评估):
# 假设这里有一个简单的密码强度评估函数(非Passlib提供) def calculate_strength(password): # 这是一个简单的示例函数,仅用于演示 length = len(password) has_digit = any(char.isdigit() for char in password) has_upper = any(char.isupper() for char in password) has_lower = any(char.islower() for char in password) strength = length + (has_digit * 1) + (has_upper * 1) + (has_lower * 1) return strength input_password = 'my_password' strength = calculate_strength(input_password) print(f'Password strength: {strength}')
(注意:上面的
calculate_strength
函数是一个简单的示例,用于演示如何评估密码强度。在实际应用中,可能需要使用更复杂的算法和规则来评估密码强度。) -
定义密码策略
以下是一个使用CryptContext对象定义密码策略并生成哈希的示例:
from passlib.context import CryptContext # 创建一个密码策略上下文 pwd_context = CryptContext( schemes=['bcrypt'], # 指定使用的哈希算法 default='bcrypt', # 设置默认哈希算法 bcrypt__default_rounds=12 # 设置bcrypt算法的默认加密轮数 ) # 生成一个符合策略要求的密码哈希 password = 'my_secret_password' hashed_password = pwd_context.hash(password) print(f'Hashed password: {hashed_password}') # 验证密码是否符合策略要求 input_password = 'my_secret_password' if pwd_context.verify(input_password, hashed_password): print('Password is correct!') else: print('Password is incorrect!')
通过上述示例,您可以了解到如何在Python应用中使用Passlib库来安全地处理密码。Passlib库提供了多种哈希算法、密码验证、密码强度评估(需要额外实现或结合其他库)和密码策略管理等高级特性,是处理用户密码的理想选择。
Pillow==10.4.0 图像处理库
Pillow是Python中一个非常流行的图像处理库,它提供了丰富的功能,使得开发者能够方便地对图像进行各种操作。以下是Pillow库的功能介绍和用法示例:
Pillow库的功能介绍
- 图像打开和保存
- Pillow库可以打开和保存多种格式的图像文件,包括常见的JPEG、PNG、BMP、GIF等格式。
- 图像缩放和裁剪
- 提供了方便的图像缩放和裁剪功能,允许用户根据指定的尺寸或区域对图像进行调整。
- 图像旋转和翻转
- 支持图像的旋转和翻转操作,可以指定旋转角度和翻转方式。
- 图像格式转换
- 可以将图像转换为不同的格式,并保存为新的文件。
- 图像滤镜和特效
- 提供了多种图像滤镜和特效功能,如模糊、锐化、噪声、渐变等,以增强图像效果。
- 图像分析
- 可以用于图像分析,例如获取图像的直方图,以便分析图像的色彩分布。
- 图像合成
- 支持将多张图像合成为一张,例如通过透明度混合、叠加等方式。
- 图像绘制
- 提供了在图像上绘制文本、形状等功能,允许用户在图像上进行自定义的标注和编辑。
- 图像像素访问和修改
- 允许用户访问和修改图像的像素数据,以实现更精细的图像处理操作。
Pillow库的用法示例
-
安装Pillow库
要使用Pillow库,首先需要安装它。可以使用pip命令进行安装:
pip install pillow
-
加载和显示图像
from PIL import Image # 加载图像 image = Image.open('path_to_your_image.jpg') # 显示图像 image.show()
-
转换图像模式
将图像从RGB模式转换为灰度模式:
from PIL import Image # 加载图像 image = Image.open('path_to_your_image.jpg') # 转换为灰度图像 gray_image = image.convert('L') # 显示灰度图像 gray_image.show()
-
调整图像大小
from PIL import Image # 加载图像 image = Image.open('path_to_your_image.jpg') # 调整大小 resized_image = image.resize((800, 600)) # 显示调整大小后的图像 resized_image.show()
-
旋转图像
from PIL import Image # 加载图像 image = Image.open('path_to_your_image.jpg') # 旋转图像(45度) rotated_image = image.rotate(45) # 显示旋转后的图像 rotated_image.show()
-
裁剪图像
from PIL import Image # 加载图像 image = Image.open('path_to_your_image.jpg') # 裁剪图像(左上角坐标和右下角坐标) cropped_image = image.crop((100, 100, 400, 400)) # 显示裁剪后的图像 cropped_image.show()
-
保存图像
将处理后的图像保存到文件:
from PIL import Image # 加载图像 image = Image.open('path_to_your_image.jpg') # 转换为灰度图像 gray_image = image.convert('L') # 保存灰度图像 gray_image.save('gray_image.jpg')
-
绘制图像
在图像上绘制文本或形状:
from PIL import Image, ImageDraw, ImageFont # 创建一个新的白色图像 image = Image.new('RGB', (200, 100), color=(255, 255, 255)) # 获取绘图对象 draw = ImageDraw.Draw(image) # 定义字体(确保路径正确) font = ImageFont.truetype("arial.ttf", 36) # 绘制黑色文本 draw.text((10, 10), "Hello", fill=(0, 0, 0), font=font) # 绘制一个红色矩形 draw.rectangle([(50, 10), (150, 90)], outline=(255, 0, 0)) # 显示图像(注意:这里没有直接显示的方法,需要保存到文件或使用其他方式显示) image.save('drawn_image.png') # 或者使用 image.show() 方法(如果环境支持)
-
处理图像像素
访问和修改图像的像素:
from PIL import Image # 加载图像 image = Image.open('path_to_your_image.jpg') # 转换为RGB模式(如果不是的话) image = image.convert('RGB') # 获取图像的像素数据 pixels = image.load() # 修改像素(例如,将图像的中心像素设置为红色) width, height = image.size pixels[width // 2, height // 2] = (255, 0, 0) # 显示修改后的图像 image.show()
通过上述示例,您可以了解到如何在Python应用中使用Pillow库来进行图像处理。Pillow库提供了丰富的功能,使得开发者能够方便地进行图像的打开、保存、缩放、裁剪、旋转、格式转换、滤镜应用、分析、合成和绘制等操作。无论是简单的图像处理任务还是复杂的图像编辑需求,Pillow库都能够提供有效的支持。
psutil==6.0.0 获取系统进程和系统资源的利用率
psutil是一个跨平台的Python库,它提供了方便的方式来获取系统运行的进程和系统资源(包括CPU、内存、磁盘、网络等)的利用率信息。以下是对psutil库的功能介绍和用法示例:
功能介绍
- 获取CPU信息
- 可以获取CPU的逻辑核心数、使用率等信息。
- 支持获取每个逻辑核心的单独使用率,以及整体的平均使用率。
- 获取内存信息
- 可以获取系统的总内存、已用内存、空闲内存等信息。
- 支持获取内存的使用率、buffer和cache等详细信息。
- 获取磁盘信息
- 可以获取指定路径的磁盘使用情况,包括总空间、已用空间和可用空间等。
- 支持获取磁盘的I/O统计信息,如读写速度、读写次数等。
- 获取网络信息
- 可以获取网络接口的统计信息,包括发送和接收的数据量、错误数等。
- 支持获取网络连接的信息,如连接状态、远程地址和端口等。
- 获取进程信息
- 可以获取系统中运行的所有进程的信息,包括进程名、PID、父进程PID、启动时间等。
- 支持获取指定进程的详细信息,如CPU使用率、内存使用率、线程数等。
- 可以对进程进行监控和管理,如获取进程的打开文件、网络连接等信息。
用法示例
-
安装psutil库
要使用psutil库,首先需要安装它。可以使用pip命令进行安装:
pip install psutil
-
获取CPU信息
import psutil # 获取CPU逻辑核心数 cpu_count = psutil.cpu_count() print(f'CPU逻辑核心数: {cpu_count}') # 获取CPU使用率(整体平均使用率) cpu_percent = psutil.cpu_percent(interval=1) print(f'CPU使用率: {cpu_percent}%') # 获取每个逻辑核心的单独使用率 per_cpu_percent = psutil.cpu_percent(interval=1, percpu=True) print(f'每个逻辑核心的CPU使用率: {per_cpu_percent}')
-
获取内存信息
import psutil # 获取内存信息 mem_info = psutil.virtual_memory() print(f'总内存: {mem_info.total / (1024**3):.2f} GB') print(f'已用内存: {mem_info.used / (1024**3):.2f} GB') print(f'空闲内存: {mem_info.available / (1024**3):.2f} GB') print(f'内存使用率: {mem_info.percent}%')
-
获取磁盘信息
import psutil # 获取根目录的磁盘使用情况 disk_usage = psutil.disk_usage('/') print(f'总磁盘空间: {disk_usage.total / (1024**3):.2f} GB') print(f'已用磁盘空间: {disk_usage.used / (1024**3):.2f} GB') print(f'可用磁盘空间: {disk_usage.free / (1024**3):.2f} GB') print(f'磁盘使用率: {disk_usage.percent}%')
-
获取网络信息
import psutil # 获取网络接口的统计信息 net_io = psutil.net_io_counters() print(f'发送数据量: {net_io.bytes_sent / (1024**2):.2f} MB') print(f'接收数据量: {net_io.bytes_recv / (1024**2):.2f} MB') # 获取网络连接的信息(示例:获取所有TCP连接) tcp_connections = psutil.net_connections(kind='tcp') for conn in tcp_connections: print(f'连接状态: {conn.status}, 远程地址: {conn.laddr.ip}:{conn.laddr.port} -> {conn.raddr.ip}:{conn.raddr.port}')
-
获取进程信息
import psutil # 获取所有进程信息 for proc in psutil.process_iter(): try: # 获取进程名称和PID name = proc.name() pid = proc.pid() print(f'名称: {name}, PID: {pid}') # 获取进程的详细信息(示例:CPU和内存使用率) cpu_percent = proc.cpu_percent(interval=1) memory_info = proc.memory_info() print(f' CPU使用率: {cpu_percent}%') print(f' 内存使用量: {memory_info.rss / (1024**2):.2f} MB') except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): pass
通过上述示例,您可以了解到如何在Python应用中使用psutil库来获取系统资源的使用情况和进程信息。psutil库提供了丰富的功能,使得开发者能够方便地进行系统监控、性能分析和进程管理。无论是简单的系统信息查询还是复杂的性能监控需求,psutil库都能够提供有效的支持。
PyJWT[crypto]==2.8.0 处理JSON Web Tokens(JWT)
PyJWT是一个用于处理JSON Web Tokens(JWT)的Python库,它提供了丰富的功能和灵活性,能够轻松地在Python应用程序中实现JWT的创建、解析和验证。以下是对PyJWT库的功能介绍和用法示例:
功能介绍
- 创建JWT:PyJWT允许用户定义载荷(Payload),并选择算法(Algorithm)来生成JWT。载荷通常包含用户ID、权限等声明信息,而算法则用于生成和验证签名的安全性。
- 解析JWT:PyJWT可以解析JWT字符串,提取其中的载荷信息。这通常用于验证JWT的有效性,并获取其中的用户信息。
- 验证JWT:除了解析JWT外,PyJWT还可以验证JWT的签名和完整性,以确保JWT在传输过程中没有被篡改。
- 自定义过期时间:PyJWT允许用户自定义JWT的过期时间,以满足特定的需求。在解析JWT时,可以检查其过期时间,并根据情况进行处理。
- 支持多种加密算法:PyJWT支持多种加密算法,如HS256、RS256等。用户可以根据需求和安全性要求选择不同的加密算法。
- 刷新令牌:当JWT过期但用户仍在操作时,可以使用刷新令牌的方法来延长JWT的有效期。
用法示例
1. 安装PyJWT
要使用PyJWT,首先需要安装它。可以使用pip来安装:
pip install PyJWT
2. 创建JWT
下面是一个创建JWT的示例:
import jwt
import datetime
from datetime import timedelta # 定义载荷(Payload)
payload = { 'user_id': 123, 'exp': datetime.utcnow() + timedelta(minutes=30) # 设置过期时间
} # 生成JWT
token = jwt.encode(payload, 'secret', algorithm='HS256')
print(token)
3. 解析JWT
下面是一个解析JWT的示例:
import jwt # 要解析的JWT
token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...(此处为示例,实际应为生成的token字符串)' # 解析JWT
payload = jwt.decode(token, 'secret', algorithms=['HS256'])
print(payload['user_id'])
4. 验证JWT
下面是一个验证JWT的示例:
import jwt # 要验证的JWT
token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...(此处为示例,实际应为生成的token字符串)' try: # 验证JWT payload = jwt.decode(token, 'secret', algorithms=['HS256']) print("JWT验证成功!")
except jwt.InvalidTokenError: print("JWT验证失败!")
5. 自定义过期时间处理逻辑
下面是一个自定义过期时间处理逻辑的示例:
import jwt
import datetime
from datetime import timedelta def custom_expired_handler(token): # 解析JWT,不验证过期时间 payload = jwt.decode(token, 'secret', algorithms=['HS256'], options={'verify_exp': False}) # 获取过期时间 exp_time = datetime.utcfromtimestamp(payload['exp']) # 检查过期时间 if exp_time < datetime.utcnow(): print("Token 已过期") else: print("Token 未过期") # 要解析的JWT
token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...(此处为示例,实际应为生成的token字符串)'
custom_expired_handler(token)
6. 选择加密算法
下面是一个选择不同加密算法生成JWT的示例:
import jwt # 定义载荷(Payload)
payload = {'user_id': 123} # 选择RS256加密算法
token_rs256 = jwt.encode(payload, 'secret', algorithm='RS256')
print("RS256 Token:", token_rs256) # 选择HS256加密算法
token_hs256 = jwt.encode(payload, 'secret', algorithm='HS256')
print("HS256 Token:", token_hs256)
7. 刷新令牌
下面是一个刷新令牌的示例:
import jwt
import datetime
from datetime import timedelta # 定义载荷(Payload)并生成初始令牌
payload = {'user_id': 123, 'exp': datetime.utcnow() + timedelta(minutes=30)}
token = jwt.encode(payload, 'secret', algorithm='HS256')
print("初始令牌:", token) # 刷新令牌
new_payload = jwt.decode(token, 'secret', algorithms=['HS256'])
new_payload['exp'] = datetime.utcnow() + timedelta(hours=1)
new_token = jwt.encode(new_payload, 'secret', algorithm='HS256')
print("刷新后的令牌:", new_token)
通过以上示例,您可以了解PyJWT库的基本功能和用法。在实际应用中,您可以根据具体需求灵活使用PyJWT来创建、解析和验证JWT,以实现安全的身份验证和信息传输。
user-agents==2.2.0 解析user agent字符串
功能介绍
Python user-agents库是一个专为解析user agent字符串而设计的工具。它能够轻松识别访问设备的类型(如移动设备、桌面设备或平板),并获取设备、浏览器、操作系统等详细信息。借助它,开发者可以更好地了解访问用户的设备属性,为不同设备提供定制化体验。该库具有以下主要特点:
- 设备识别:能够识别并分类设备类型,如手机、平板、PC等。
- 浏览器和操作系统信息提取:可以提取出用户代理字符串中的浏览器类型和版本、操作系统类型和版本等信息。
- 高级属性判断:提供了一些高级属性判断,如是否为触摸屏设备、是否为移动设备、是否为爬虫等。
- 批量解析:支持批量解析多个user agent字符串,提高解析效率。
- 易用性和准确性:直观的API设计让开发者快速上手,同时依托强大的ua-parser解析引擎,实现高效精准的设备识别。
用法示例
以下是一些使用Python user-agents库的示例代码:
-
安装库
首先,你需要通过pip安装Python user-agents库:
pip install pyyaml ua-parser user-agents
-
简单解析示例
from user_agents import parse ua_string = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15' user_agent = parse(ua_string) # 输出设备信息 print(f"设备类型: {user_agent.device.family}, 品牌: {user_agent.device.brand}, 型号: {user_agent.device.model}") # 输出操作系统信息 print(f"操作系统: {user_agent.os.family} {user_agent.os.version_string}") # 输出浏览器信息 print(f"浏览器: {user_agent.browser.family} {user_agent.browser.version_string}")
输出结果:
设备类型: iphone, 品牌: apple, 型号: None 操作系统: ios 13.5 浏览器: mobile safari 13.1
-
判断设备类型
from user_agents import parse ua_string = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15' user_agent = parse(ua_string) # 判断设备类型 print(f"是否为移动设备: {user_agent.is_mobile}") print(f"是否为平板: {user_agent.is_tablet}") print(f"是否为PC端: {user_agent.is_pc}") print(f"是否为爬虫机器人: {user_agent.is_bot}")
输出结果:
是否为移动设备: True 是否为平板: False 是否为PC端: False 是否为爬虫机器人: False
-
批量解析示例
from user_agents import parse user_agents = [ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', 'Mozilla/5.0 (iPad; CPU OS 14_0 like Mac OS X)', 'Mozilla/5.0 (Linux; Android 10; SM-G973F)', 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)' ] for ua_string in user_agents: user_agent = parse(ua_string) print(f"User-Agent: {ua_string}") print(f"设备类型: {user_agent.device.family}") print(f"操作系统: {user_agent.os.family} {user_agent.os.version_string}") print(f"是否为移动设备: {user_agent.is_mobile}") print(f"是否为爬虫: {user_agent.is_bot}") print()
该代码将批量解析每个user agent字符串,并输出每个设备的详细信息。
通过以上示例,你可以看到Python user-agents库在解析user agent字符串、提取设备信息、判断设备类型等方面的强大功能。它能够帮助开发者更好地了解访问用户的设备属性,从而提供更加定制化的服务和体验。
waitress==3.0.0 高性能 WSGI服务器
功能介绍
Waitress 是一个用于 Python Web 开发的高性能 WSGI(WebServerGateway Interface)服务器,由 Zope Corporation 开发并维护。它专注于提供可靠的、高性能的 Web 服务,并以其简单、易用、可靠的设计理念而受到广泛赞誉。Waitress 的核心亮点包括:
- 高性能:Waitress 支持多线程处理请求,能够高效地处理高并发请求,确保 Web 应用程序的稳定性和性能。
- 兼容性:Waitress 完全符合 WSGI 规范,能够与大多数 Python Web 框架(如 Flask、Django、Pyramid 等)兼容,为用户提供灵活的部署选项。
- 安全性:Waitress 支持 HTTPS,并提供了一些安全选项,如 SSL 证书和加密算法的配置,确保数据传输的安全性。
- 日志记录:Waitress 支持记录请求日志,方便用户了解请求的处理情况和性能表现,有助于问题排查和性能优化。
- 异常处理:Waitress 允许用户自定义异常处理程序,以便捕获和处理请求处理过程中的异常,提高应用程序的健壮性。
- 插件系统:Waitress 可以通过插件扩展其功能,例如添加身份验证或负载均衡支持,满足用户多样化的需求。
用法示例
以下是一个使用 Waitress 来运行 Python Web 应用程序的示例:
-
安装 Waitress
首先,你需要通过 pip 安装 Waitress 库:
pip install waitress
-
创建 Web 应用程序
接下来,你需要创建一个符合 WSGI 规范的 Python Web 应用程序。以下是一个简单的 Flask 应用程序示例:
# app.py from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!'
-
运行 Waitress 服务器
最后,你可以使用 Waitress 来运行你的 Web 应用程序:
# run.py from waitress import serve from app import app if __name__ == '__main__': serve(app, host='0.0.0.0', port=8080, threads=4)
在上面的代码中,我们导入了 Waitress 的
serve
函数,并将我们的 Flask 应用程序app
作为参数传递给它。同时,我们指定了服务器的主机地址(host='0.0.0.0'
表示监听所有可用的网络接口)和端口号(port=8080
),以及要使用的线程数(threads=4
)。 -
启动服务器
运行
run.py
文件,Waitress 服务器将启动并监听指定的端口。现在,你可以通过浏览器访问http://localhost:8080/
来查看你的 Web 应用程序。
高级用法
除了基本功能之外,Waitress 还提供了一些高级功能,使得用户能够更灵活地定制服务器行为:
- 自定义中间件:Waitress 支持自定义中间件,使用户能够在请求处理过程中添加额外的逻辑。
- 自定义异常处理程序:用户可以自定义异常处理程序来捕获和处理请求处理过程中的异常。
- 配置安全选项:Waitress 支持 HTTPS,并提供了一些安全选项来配置 SSL 证书和加密算法。
以下是一个使用自定义中间件和异常处理程序的示例:
# custom_middleware.py
from waitress import WSGIRequestHandler class CustomMiddleware(WSGIRequestHandler): def __call__(self, environ, start_response): # 在这里添加自定义逻辑 print("Request received!") # 调用原始的处理程序 return super().__call__(environ, start_response) # custom_exception_handler.py
def custom_exception_handler(environ, start_response): # 在这里处理异常 start_response('500 Internal Server Error', [('Content-Type', 'text/plain')]) return [b'An error occurred.'] # run_advanced.py
from waitress import serve
from app import app
from custom_middleware import CustomMiddleware
from custom_exception_handler import custom_exception_handler if __name__ == '__main__': serve(app, host='0.0.0.0', port=8080, threads=4, middleware=[CustomMiddleware], exc_handler=custom_exception_handler)
在上面的代码中,我们定义了一个自定义中间件 CustomMiddleware
,它将在请求处理过程中添加额外的逻辑(例如打印请求接收的消息)。同时,我们还定义了一个自定义异常处理程序 custom_exception_handler
,用于捕获和处理请求处理过程中的异常。在启动 Waitress 服务器时,我们将这些自定义组件作为参数传递给它。
通过以上介绍和示例代码,你可以了解到 Waitress 库的基本功能和高级用法。无论是在小型 Web 应用程序还是生产环境中的大型应用程序中,Waitress 都能为你提供可靠、高性能的 Web 服务支持。