Flask 第六课 -- 路由

目录

[一. 前言](#一. 前言)

[二. 定义路由](#二. 定义路由)

[三. 路由参数](#三. 路由参数)

[四. 路由规则](#四. 路由规则)

[五. 请求方法](#五. 请求方法)

[六. 路由转换器](#六. 路由转换器)

[七. 路由函数返回](#七. 路由函数返回)

[八. 静态文件和模板](#八. 静态文件和模板)

[九. 路由优先级](#九. 路由优先级)


一. 前言

Flask 路由是 Web 应用程序中将 URL 映射到 Python 函数的机制。

Flask 路由是 Flask 应用的核心部分,用于处理不同 URL 的请求,并将请求的处理委托给相应的视图函数。

以下是关于 Flask 路由的详细说明,包括路由的定义、参数、方法和规则等。

  1. 定义路由 :使用 @app.route('/path') 装饰器定义 URL 和视图函数的映射。
  2. 路由参数:通过动态部分在 URL 中传递参数。
  3. 路由规则:使用类型转换器指定 URL 参数的类型。
  4. 请求方法:指定允许的 HTTP 请求方法。
  5. 路由函数返回:视图函数可以返回不同类型的响应。
  6. 静态文件和模板:管理静态文件和动态渲染 HTML 模板。
  7. 路由优先级:确保路由顺序正确,以避免意外的匹配结果。

二. 定义路由

基本路由定义:

python 复制代码
from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return 'Welcome to the Home Page!'
  • @app.route('/'):装饰器,用于定义路由。/ 表示根 URL。
  • def home():视图函数,当访问根 URL 时,返回 'Welcome to the Home Page!'。

三. 路由参数

路由可以包含动态部分,通过在路由中指定参数,可以将 URL 中的部分数据传递给视图函数。

python 复制代码
@app.route('/greet/<name>')
def greet(name):
    return f'Hello, {name}!'

四. 路由规则

路由规则支持不同类型的参数和匹配规则。

类型规则:

  • 字符串(默认): 匹配任意字符串。
  • 整数(<int:name>): 匹配整数值。
  • 浮点数(<float:value>): 匹配浮点数值。
  • 路径(<path:name>): 匹配任意字符,包括斜杠 /。
python 复制代码
@app.route('/user/<int:user_id>')
def user_profile(user_id):
    return f'User ID: {user_id}'

@app.route('/files/<path:filename>')
def serve_file(filename):
    return f'Serving file: {filename}'
  • @app.route('/user/<int:user_id>'):匹配整数类型的 user_id。
  • @app.route('/files/<path:filename>'):匹配包含斜杠的路径 filename。

五. 请求方法

Flask 路由支持不同的 HTTP 请求方法,如 GET、POST、PUT、DELETE 等。可以通过 methods 参数指定允许的请求方法。

python 复制代码
@app.route('/submit', methods=['POST'])
def submit():
    return 'Form submitted!'

六. 路由转换器

Flask 提供了一些内置的转换器,可以对 URL 中的参数进行特定类型的转换。

常用转换器:

  • int: 匹配整数。
  • float: 匹配浮点数。
  • path: 匹配任意路径,包括斜杠。
python 复制代码
@app.route('/items/<int:item_id>/details')
def item_details(item_id):
    return f'Item details for item ID: {item_id}'
  • <int:item_id>:将 URL 中的 item_id 转换为整数。

七. 路由函数返回

视图函数可以返回多种类型的响应:

  • 字符串:返回纯文本响应。
  • HTML:返回 HTML 页面。
  • JSON:返回 JSON 数据。
  • Response 对象:自定义响应。
python 复制代码
from flask import jsonify, Response

@app.route('/json')
def json_response():
    data = {'key': 'value'}
    return jsonify(data)

@app.route('/custom')
def custom_response():
    response = Response('Custom response with headers', status=200)
    response.headers['X-Custom-Header'] = 'Value'
    return response
  • jsonify(data):将字典转换为 JSON 响应。
  • Response('Custom response with headers', status=200):创建自定义响应对象。

八. 静态文件和模板

静态文件(如 CSS、JavaScript、图片)可以通过 static 路由访问。模板文件则通过 templates 文件夹组织,用于渲染 HTML 页面。

静态文件访问:

python 复制代码
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
python 复制代码
from flask import render_template

@app.route('/hello/<name>')
def hello(name):
    return render_template('hello.html', name=name)

模板文件渲染:

python 复制代码
from flask import render_template

@app.route('/hello/<name>')
def hello(name):
    return render_template('hello.html', name=name)

模板文件 (templates/hello.html):

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>Hello</title>
</head>
<body>
    <h1>Hello, {{ name }}!</h1>
</body>
</html>

九. 路由优先级

Flask 按照定义的顺序匹配路由,第一个匹配成功的路由将被处理。确保更具体的路由放在更一般的路由之前。

python 复制代码
@app.route('/user/<int:user_id>')
def user_profile(user_id):
    return f'User ID: {user_id}'

@app.route('/user')
def user_list():
    return 'User List'
  • /user/123 将匹配到 /user/<int:user_id>,而 /user 将匹配到 user_list。
相关推荐
benchmark_cc25 分钟前
Python 量化系统如何设计统一的数据访问接口:从策略解耦到数据层架构
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
const_qiu37 分钟前
第四章 00:开篇 —— 从「会聊天」到「记得住、会干活、能协作」
java·开发语言·人工智能·python
团子哒哒1 小时前
数组、切片和Map
后端
专注仿真1 小时前
ThinkPHP6 API接口开发实例:从零搭建RESTful风格接口
后端·php·restful
开心猴爷1 小时前
应对iOS审核4.3:可以使用 IpaGuard 来给属性名混淆的技术细节与平衡之道
后端·ios
1m555555551 小时前
RAG 工程实战(五):正确知识已经进入 Prompt,为什么大模型还是会答错?
后端·面试
易小尊1 小时前
我的模型在 65% 以上时准得可怕,在 50% 时像在掷硬币
后端
用户2788607285671 小时前
fallback 会盖掉平台提示词:system、空数组和 systemAppend 的差别
前端·后端
iOS开发上架哦1 小时前
iOS应用耗电测试:使用Energy Log、Keymob和Instruments进行性能监控与能源消耗分析
后端·ios
估值探索者1 小时前
【Python量化选股流水线 #04】选股器好不好用?「昨日候选→今日表现」回看验收
开发语言·python·股票数据·股票数据api接口