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

Flask 第六课 -- 路由

目录

一. 前言

二. 定义路由

三. 路由参数

四. 路由规则

五. 请求方法

六. 路由转换器

七. 路由函数返回

八. 静态文件和模板

九. 路由优先级


一. 前言

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

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

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

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

二. 定义路由

基本路由定义:

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 中的部分数据传递给视图函数。

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

四. 路由规则

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

类型规则:

  • 字符串(默认): 匹配任意字符串。
  • 整数(<int:name>): 匹配整数值。
  • 浮点数(<float:value>): 匹配浮点数值。
  • 路径(<path:name>): 匹配任意字符,包括斜杠 /
@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 参数指定允许的请求方法。

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

六. 路由转换器

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

常用转换器:

  • int 匹配整数。
  • float 匹配浮点数。
  • path 匹配任意路径,包括斜杠。
@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 对象:自定义响应。
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 页面。

静态文件访问:

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

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

模板文件渲染:

from flask import render_template

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

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

<!DOCTYPE html>
<html>
<head>
    <title>Hello</title>
</head>
<body>
    <h1>Hello, {{ name }}!</h1>
</body>
</html>

九. 路由优先级

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

@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

http://www.kler.cn/news/313793.html

相关文章:

  • 如何在Linux下升级R版本和RStudio
  • 2024华为杯研赛E题保姆级教程思路分析
  • Linux进阶命令-rsync
  • B-树底层原理
  • 英语六级-学习
  • uv-ui组件的使用——自定义输入框的样式
  • 【2020工业图像异常检测文献】SPADE
  • 数据中台系统产品原型RP原型Axure高保真交互原型 源文件分享
  • 08_React redux
  • AI大模型之旅--milvus向量库安装
  • 软件设计师——操作系统
  • API安全推荐厂商瑞数信息入选IDC《中国数据安全技术发展路线图》
  • 【C#】内存的使用和释放
  • SpringBoot 处理 @KafkaListener 消息
  • 专访阿里云:AI 时代服务器操作系统洗牌在即,生态合作重构未来
  • Java面试——集合篇
  • Canopen-pn有线通信标准在汽车制造中至关重要
  • MATLAB中的无线通信系统设计有哪些最佳实践
  • OpenHarmony(鸿蒙南向开发)——标准系统方案之瑞芯微RK3566移植案例(下)
  • C++11标准模板(STL)- 常用数学函数 - 计算e的给定幂 (ex)(std::exp, std::expf, std::expl)
  • C语言程序设计(进阶)
  • 渗透测试入门学习——php表单form与POST、GET请求练习
  • 3、等保1.0 与 2.0 的区别
  • 大健康裂变分销小程序开发
  • MATLAB系列05:自定义函数
  • Java 线程之间如何通信?
  • 代码随想录算法训练营第三八天| 279.完全平方数 139.单词拆分
  • Selenium如何通过js注入避免被检测
  • 数字IC设计\FPGA 职位经典笔试面试整理--基础篇1
  • C++之深拷贝和浅拷贝*