Flask基础和URL映射

news/2025/1/25 4:21:24/

目录

1. Flask介绍

2. Flask第一个应用程序

3. Flask运行方式

4. Flask中DEBUG模式

5. Flask环境参数的加载

6. Flask路径参数的使用

7. Flask路径参数类型

8. Flask路径参数类型转换底层

9. Flask自定义路由转换器

自定义步骤:

python%20%E5%87%BD%E6%95%B0-toc" name="tableOfContents" style="margin-left:80px">10. 自定义转换 to_python 函数

11. Postman的使用

功能:

使用示例:

12. 查询参数的使用

13. 请求体参数的使用

14. 上传文件的使用

15. request其它参数的使用

16. url_for函数的使用

17. 使用url_for的原因

18. 响应_重定向的使用

19. 响应_响应内容

20. 响应_自定义响应对象


1. Flask介绍

Flask -- 轻量级的 Python Web 框架

特点

  • 微框架:核心功能精简,开发者可根据需要扩展功能。
  • 高效开发:支持 SQLAlchemy ORM,大幅减少手写 SQL 的需求。
  • 自由选择:选择适合自己的数据库或工具,如 SQLAlchemy、MongoEngine。
  • 模块化扩展:通过扩展库实现功能,如 Flask-Mail、Flask-Login 等。

核心工具

  • WSGI 工具箱:Werkzeug(路由模块)
  • 模板引擎:Jinja2

2. Flask第一个应用程序

创建一个简单的 Flask 应用程序:

from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello_world():return 'Hello, Flask!'if __name__ == '__main__':
    app.run()

运行后访问 http://127.0.0.1:5000/ 将显示 "Hello, Flask!"。

3. Flask运行方式

  1. 直接运行文件: 使用python app.py 运行应用程序。
  2. 设置主机和端口

这里设置端口本地

app.run(host="0.0.0.0", port=8080)
  1. 通过命令行: 使用flask run 命令启动服务。
  2. 设置环境变量:
$ export FLASK_APP=app.py
$ flask run

4. Flask中DEBUG模式

作用

  • 提供详细的错误调试信息。
  • 实现代码修改后自动重启服务。

开启方式

  1. app.run方法中设置:
app.run(debug=True)

     2.修改配置参数:

app.config['DEBUG'] = True
app.run()

5. Flask环境参数的加载

加载方法

  1. 直接设置
app.config['DEBUG'] = True

      2.从文件加载

app.config.from_pyfile('config.py')

      3.使用对象配置

class Config:
    DEBUG = Trueapp.config.from_object(Config)

      4.从环境变量加载

app.config.from_envvar('APP_CONFIG_FILE')

6. Flask路径参数的使用

Flask 支持通过 URL 路径传递参数,例如:

@app.route('/user/<user_id>')
def get_user(user_id):return f'User ID: {user_id}'

访问 /user/123 时,user_id 的值为 123

7. Flask路径参数类型

可以为路径参数指定类型:

  • string(默认)
  • int:仅接受整数。
  • float:仅接受浮点数。
  • path:可包含斜杠的字符串。
  • uuid:符合 UUID 格式的字符串。

示例:

@app.route('/item/<int:item_id>')
def get_item(item_id):return f'Item ID: {item_id}'

8. Flask路径参数类型转换底层

路径参数类型由 Flask 的底层路由机制(Werkzeug)决定,具体通过以下类处理:

  • IntegerConverter:处理整数类型路径参数。
  • FloatConverter:处理浮点数类型路径参数。
  • StringConverter:处理字符串类型路径参数。

示例

@app.route('/product/<int:product_id>')
def get_product(product_id):return f'Product ID: {product_id}'

访问 /product/10 会解析 product_id 为整数类型,若类型不匹配将返回 404 错误。

9. Flask自定义路由转换器

当内置转换器不能满足需求时,可以自定义转换器。

自定义步骤:

  1. 创建转换器类:继承 werkzeug.routing.BaseConverter
  2. 定义 regex 属性以匹配正则表达式。
  3. 注册转换器: 使用app.url_map.converters 注册转换器。
  4. 在路由中使用。

示例

from werkzeug.routing import BaseConverterclass MobileConverter(BaseConverter):
    regex = r'1[3-9]\d{9}'  # 匹配手机号格式app.url_map.converters['mobile'] = MobileConverter@app.route('/sms/<mobile:phone_number>')
def send_sms(phone_number):return f'SMS sent to {phone_number}'

访问 /sms/13812345678 将匹配成功。

python%20%E5%87%BD%E6%95%B0" name="10.%20%E8%87%AA%E5%AE%9A%E4%B9%89%E8%BD%AC%E6%8D%A2%20to_python%20%E5%87%BD%E6%95%B0" style="margin-left:0pt; margin-right:0pt; text-align:justify">10. 自定义转换 to_python 函数

在转换器类中可以实现 to_python 方法,处理路径参数的值并返回处理后的结果。

示例

class ListConverter(BaseConverter):def to_python(self, value):return value.split('+')  # 将路径参数以 "+" 分隔成列表app.url_map.converters['list'] = ListConverter@app.route('/tags/<list:tag_list>')
def get_tags(tag_list):return f'Tags: {", ".join(tag_list)}'

访问 /tags/python+flask+web 时,tag_list 将是 ['python', 'flask', 'web']

11. Postman的使用

Postman 是一个流行的 API 调试工具,可用于测试接口。

功能:

  • 支持各种 HTTP 请求方法(GET、POST、PUT、DELETE 等)。
  • 设置请求头、查询参数和请求体。
  • 支持保存请求集合和生成文档。

使用示例:

  1. 创建 POST 请求,设置请求地址和参数。
  2. 使用 form-data上传文件:设置 Content-Typemultipart/form-data
  3. 在 Body 中添加文件字段。

12. 查询参数的使用

查询参数通常附加在 URL 的末尾,用于传递附加信息。

获取查询参数: 通过request.args 获取查询参数,返回一个 MultiDict 对象。

示例

from flask import request@app.route('/search')
def search():
    query = request.args.get('q')return f'Searching for: {query}'

访问 /search?q=flask 将返回 Searching for: flask

13. 请求体参数的使用

在 POST 请求中,数据通常通过请求体传递。

获取请求体参数

  • 使用 request.form 获取表单数据。
  • 使用 request.json 获取 JSON 数据。

示例

@app.route('/login', methods=['POST'])
def login():
    username = request.form.get('username')
    password = request.form.get('password')return f'Login with username: {username}, password: {password}'

14. 上传文件的使用

Flask 支持通过 request.files 获取上传的文件。

示例

@app.route('/upload', methods=['POST'])
def upload():file = request.files['file']file.save(f'./uploads/{file.filename}')return 'File uploaded successfully!'

注意:

  • 上传文件需要设置 Content-Typemultipart/form-data

15. request其它参数的使用

Flask 提供 request 对象来读取请求的不同部分。

属性

描述

类型

values

包含所有请求参数

MultiDict

form

包含表单数据

MultiDict

args

包含查询参数

MultiDict

cookies

包含请求中的 Cookie

字典

headers

包含请求的头部信息

EnvironHeaders

method

请求方法(GET/POST)

字符串

url

请求的完整 URL 地址

字符串

files

上传的文件

字典

16. url_for函数的使用

url_for 函数用于根据函数名生成对应的 URL。

示例

@app.route('/user/<int:user_id>')
def user_profile(user_id):return f'User ID: {user_id}'@app.route('/')
def index():return url_for('user_profile', user_id=42)

返回值为:/user/42

17. 使用url_for的原因

  1. 维护性:URL 变更时,只需修改函数对应的路由,调用处无需改动。
  2. 自动转义:避免手动处理特殊字符和编码问题。

提示: 定义 URL 时,最好以斜杠/ 结尾,避免搜索引擎将加斜杠和不加斜杠的视为不同 URL。

18. 响应_重定向的使用

使用 redirect 实现重定向:

from flask import redirect, url_for@app.route('/')
def index():return redirect(url_for('login'))@app.route('/login')
def login():return 'Login Page'

状态码

  • 301:永久重定向。
  • 302:临时重定向(默认)。

19. 响应_响应内容

Flask 支持多种响应类型:

  1. 返回字符串:
return "Hello, Flask!"

     2.返回 JSON:

from flask import jsonify
return jsonify({'message': 'Hello, Flask!'})

    3.返回元组:

return "Success", 200, {'Custom-Header': 'Value'}

20. 响应_自定义响应对象

可以通过 make_response 创建自定义响应:

from flask import make_response@app.route('/custom')
def custom_response():
    resp = make_response("Custom Response", 404)
    resp.headers['X-Custom-Header'] = 'CustomValue'return resp


http://www.ppmy.cn/news/1565949.html

相关文章

如何有效进行软件集成测试?常见的集成测试工具分享

在现代软件开发的过程中&#xff0c;集成测试是确保系统各部分有效协同工作的关键步骤。软件集成测试是指在软件开发过程中&#xff0c;将各个模块或组件组合在一起进行测试&#xff0c;以验证它们之间的交互是否符合设计要求和业务逻辑。集成测试的核心目标是发现不同模块互动…

服务器日志自动上传到阿里云OSS备份

背景 公司服务器磁盘空间有限&#xff0c;只能存近15天日志&#xff0c;但是有时需要查看几个月前的日志&#xff0c;需要将服务器日志定时备份到某个地方&#xff0c;需要查询的时候有地方可查。 针对这个问题&#xff0c;想到3个解决方法&#xff1a; 1、买一个配置比较低…

蒙操作系统(HarmonyOS)

鸿蒙操作系统&#xff08;HarmonyOS&#xff09;是由华为技术有限公司开发的面向未来、面向全场景的分布式操作系统。它旨在为各种不同类型的设备提供统一的操作系统和无缝的智能体验&#xff0c;从智能手机到可穿戴设备&#xff0c;再到智能家居产品等。在鸿蒙的应用生态中&am…

PL/SQL语言的图形用户界面

PL/SQL语言的图形用户界面 引言 随着信息技术的迅猛发展&#xff0c;数据库系统在现代应用程序中的重要性愈加凸显。PL/SQL&#xff08;Procedural Language/Structured Query Language&#xff09;作为Oracle数据库的一种程序设计语言&#xff0c;以其强大的数据处理能力和高…

一款自适应的 AI 集成开发环境 (IDE)—Trae

Trae 是一款自适应的 AI 集成开发环境 (IDE)&#xff0c;通过与您协作工作&#xff0c;帮助您更高效地运行并加速开发进程。 Builder模式 聊天式项目构建&#xff0c;让开发更快速 在构建者模式下&#xff0c;Trae 会自动分解并执行任务&#xff0c;优化每个步骤&#xff0c…

谷歌泰坦:Transformer之后的AI时代?

介绍 2017年&#xff0c;谷歌发布了一篇具有革命性意义的论文&#xff0c;题为《Attention is All You Need》&#xff08;注意力是你所需要的一切&#xff09;。这篇论文引发了我们今天所经历的AI革命&#xff0c;并引入了Transformer模型。Transformer已经成为如今几乎所有顶…

基于 STM32 的智能农业温室控制系统设计

1. 引言 随着农业现代化的发展&#xff0c;智能农业温室控制系统对于提高农作物产量和质量具有重要意义。该系统能够实时监测温室内的环境参数&#xff0c;如温度、湿度、光照强度和土壤湿度等&#xff0c;并根据这些参数自动调节温室设备&#xff0c;如通风扇、加热器、加湿器…

专业数据分析不止于Tableau,四款小众报表工具解析

在众多的报表工具中&#xff0c;市场上的常见报表工具如Tableau、Power BI等被广泛使用&#xff0c;但一些小众工具也提供了独特的功能和优势。以下是四款小众报表工具的介绍&#xff0c;它们各具特色&#xff0c;适合不同需求的用户&#xff0c;下面就为大家简单介绍一下。 1…