当前位置: 首页 > article >正文

Flask基础和URL映射

目录

1. Flask介绍

2. Flask第一个应用程序

3. Flask运行方式

4. Flask中DEBUG模式

5. Flask环境参数的加载

6. Flask路径参数的使用

7. Flask路径参数类型

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

9. Flask自定义路由转换器

自定义步骤:

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 Flask

app = 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 = True

app.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 BaseConverter

class 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 将匹配成功。

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.kler.cn/a/514629.html

相关文章:

  • C#中的语句
  • CSS中相对定位和绝对定位详解
  • 【经验分享】ARM Linux-RT内核实时系统性能评估工具
  • 华为EC6110T-海思Hi3798MV310_安卓9.0_通刷-强刷固件包
  • R语言的图形用户界面
  • Python 脚本-扫描当前目录和所有子目录并显示它们的大小。
  • 【spring专题】编译spring5.3源码
  • 如何给自己的域名配置免费的HTTPS How to configure free HTTPS for your domain name
  • ERP系统的财务会计基础知识:财务管理
  • Kmeans与KMedoids聚类对比以及python实现
  • C语言中危险函数
  • JMeter 测试Dubbo 接口
  • Win10系统部署RabbitMQ Server
  • linux系统安装vmware workstation
  • Laravel 请求接口 调用2次
  • TS报错解决:不能将类型“string | null”分配给类型“string | undefined”
  • 2025年最新电子制造行业CRM售后管理解决方案
  • SCSS概念及使用
  • 我的2024:创作历程与成长总结
  • 【0x05】HCI_Disconnection_Complete事件详解
  • GD32L233RB 驱动数码管
  • 从工厂到桌面:3D打印制造潮玩手办
  • [MySQL]MySQL数据库的介绍和库相关操作
  • SimpleFOC STM32教程09|基于STM32F103+CubeMX,ADC采样相电流
  • PAT (Basic Level) Practice 乙级1041-1045
  • 等变即插即用图像重建