博客
关于我
Flask:基本结构
阅读量:411 次
发布时间:2019-03-06

本文共 2201 字,大约阅读时间需要 7 分钟。

Flask框架详解

1. 概念概述

Flask 是一个高效的 Python 微框架,虽然功能简洁,但其扩展性和灵活性使其在 Web 开发领域备受青睐。Flask 的核心设计理念强调可扩展性,它通过模块化的设计提供了一个强大的开发框架,适合从小型项目到大型应用的多样化需求。

2. 最小程序示例

最小的 Flask 应用通常只需要少量代码即可完成基本功能。以下是一个简单的 Hello World 应用示例:

from flask import Flaskapp = Flask(__name__)@app.route('/')def index():    return '

Hello World!

'

将上述代码保存为 hello.py 文件后,可以通过以下命令运行应用:

flask run

3. 动态路由

Flask 的路由系统支持动态参数,灵活性极高。动态参数的默认类型为字符串,但可以根据需求指定其他类型(如整数、浮点数或路径参数)。

@app.route('/user/
')def user(name): return f'

Hello, {name}!

'

如需自定义参数类型,可以使用 @app.route 装饰器中的 type 参数:

@app.route('/user/
')def get_user(id): return f'type(id):{type(id)}'

4. 内建服务器

Flask 内置了一个高效的服务器,开发和调试时可以直接使用。以下是常用命令示例:

(venv) $ flask run(venv) $ flask run --host 0.0.0.0(venv) $ flask run --help(venv) $ flask shell

5. 请求处理

5.1 应用上下文与请求上下文

在处理请求时,Flask 会自动管理应用和请求上下文,确保不同请求之间不会互相干扰。以下是常用上下文变量:

变量名 类型 说明
current_app 应用实例 当前应用的实例
g 请求临时存储 用于临时存储请求相关数据
request 请求对象 包含 HTTP 请求信息的对象
session 会话对象 用于存储用户会话数据

5.2 请求分派

Flask 会根据 URL 映射表将请求路由至相应的视图函数。app.url_map 提供了详细的 URL 映射信息。

5.3 请求钩子

Flask 提供了多种请求钩子,如 before_requestafter_requestteardown_request,用于在请求处理前后执行自定义逻辑。

钩子名称 说明
before_request 在每次请求之前执行
after_request 在每次请求之后执行
teardown_request 即使有异常,也在每次请求之后执行

5.4 请求方法

Flask 支持多种 HTTP 方法,默认为 GET。可通过 methods 参数指定多个方法:

@app.route('/login', methods=['GET', 'POST'])def login():    if request.method == 'POST':        return do_the_login()    else:        return show_the_login_form()

Flask 会自动支持 HEAD 和 OPTIONS 方法。

6. 响应处理

返回值可为多种形式:

return 'Hello'  # 返回文本return 'Hello', 200  # 返回响应元组return redirect('http://www.example.com')  # 返回重定向

如需自定义响应,可以使用 make_response 函数:

resp = make_response(render_template('error.html'), 404)resp.headers['X-Something'] = 'A value'return resp

如需返回 404 错误,可以直接调用 abort 函数:

if not user:    abort(404)

7. URL 构建

Flask 提供了 url_for 函数来生成应用内部 URL:

函数示例 生成的 URL
url_for('index') /
url_for('index', _external=True) http://localhost:5000/
url_for('user', name='john', _external=True) http://localhost:5000/user/john
url_for('user', name='john', page=2, version=1) /user/john?page=2&version=1

8. 静态文件管理

Flask默认将静态文件存储在 app/static 目录中,生成 URL 可通过 url_for('static', filename='css/styles.css')

通过以上内容,可以快速掌握 Flask 框架的核心功能及其使用方法。

转载地址:http://vwxkz.baihongyu.com/

你可能感兴趣的文章
OpenCV与AI深度学习 | 实战 | 基于YOLOv9+SAM实现动态目标检测和分割(步骤 + 代码)
查看>>
OpenCV与AI深度学习 | 实战 | 基于YOLOv9和OpenCV实现车辆跟踪计数(步骤 + 源码)
查看>>
OpenCV与AI深度学习 | 实战 | 文本图片去水印--同时保持文本原始色彩(附源码)
查看>>
OpenCV与AI深度学习 | 实战 | 通过微调SegFormer改进车道检测效果(数据集 + 源码)
查看>>
OpenCV与AI深度学习 | 实战—使用YOLOv8图像分割实现路面坑洞检测(步骤 + 代码)
查看>>
OpenCV与AI深度学习 | 实战篇——基于YOLOv8和OpenCV实现车速检测(详细步骤 + 代码)
查看>>
OpenCV与AI深度学习 | 实战|OpenCV实时弯道检测(详细步骤+源码)
查看>>
OpenCV与AI深度学习 | 实用技巧 | 使用OpenCV进行模糊检测
查看>>
OpenCV与AI深度学习 | 实践教程|旋转目标检测模型-TensorRT 部署(C++)
查看>>
OpenCV与AI深度学习 | 工业缺陷检测中数据标注需要注意的几个事项
查看>>
OpenCV与AI深度学习 | 干货 | 深度学习模型训练和部署的基本步骤
查看>>
OpenCV与AI深度学习 | 手把手教你用Python和OpenCV搭建一个半自动标注工具(详细步骤 + 源码)
查看>>
OpenCV与AI深度学习 | 水下检测+扩散模型:或成明年CVPR最大惊喜!
查看>>
OpenCV与AI深度学习 | 深入浅出了解OCR识别票据原理
查看>>
OpenCV与AI深度学习 | 深度学习检测小目标常用方法
查看>>
OpenCV与AI深度学习 | 超越YOLOv10/11、RT-DETRv2/3!中科大D-FINE重新定义边界框回归任务
查看>>
OpenCV与AI深度学习 | 高效开源的OCR工具:Surya-OCR介绍与使用
查看>>
OpenCV与AI深度学习|16个含源码和数据集的计算机视觉实战项目(建议收藏!)
查看>>
Opencv中KNN背景分割器
查看>>
OpenCV中基于已知相机方向的透视变形
查看>>