RSS
菜单
全部文章快讯开发科技深度热点

Flask从零到精通|第2课:路由系统与URL动态传参

内容摘要

前置:已经完成第一课,成功跑通 Hello Flask 项目。本节课学习目标。掌握静态路由定义。学会 URL 动态传参(变量路由)。路由变量类型限制(int、string、path)。多路由绑定同一个视图函数。指定 HTTP 请求方法 GET / POST。url_for 反向构建URL。

前置:已经完成第一课,成功跑通 Hello Flask 项目

本节课学习目标

掌握静态路由定义

学会 URL 动态传参(变量路由)

路由变量类型限制(int、string、path)

多路由绑定同一个视图函数

指定 HTTP 请求方法 GET / POST

url_for 反向构建URL

继续沿用第一课的 app.py 文件,在原有代码上修改测试

2.1 静态路由回顾

from flask import Flask

app = Flask(__name__)

# 静态路由:固定地址 /
@app.route('/')
def index():
    return "首页"

# 静态路由:固定地址 /about
@app.route('/about')
def about():
    return "关于我们页面"

if __name__ == '__main__':
    app.run(debug=True)
访问:
[ → 首页
[ → 关于我们
静态路由:URL地址写死,不能变化。

2.2 动态路由(URL传参)⭐重点

语法:@app.route('/user/<变量名>') 尖括号 <> 用来捕获url里的参数,直接传给视图函数。

示例:

# 动态路由,name是捕获的参数

@app.route('/user/<name>')
def user(name):
    return f"你好,{name}"
浏览器访问: [ 页面输出:你好,zhangsan
路由变量类型转换器
<string:name>:字符串(默认,不包含 /)
<int:id>:只能是整数
<path:path>:字符串,可以包含 /
# 只接收整数类型id
@app.route('/article/<int:article_id>')
def article(article_id):
    return f"文章ID:{article_id}"

# path类型,可以识别带斜杠的路径
@app.route('/files/<path:file_path>')
def files(file_path):
    return f"文件路径:{file_path}"
测试: [ ✅ [ ❌ 找不到页面

2.3 一个视图函数绑定多个路由

@app.route('/')
@app.route('/home')
def home():
    return "首页页面"
访问 / 和 /home 都会执行 home 函数。

2.4 指定HTTP请求方法 GET / POST

@app.route 默认只允许 GET 请求。 通过 methods=["GET", "POST"] 开启多种请求方式。
@app.route('/login', methods=["GET", "POST"])
def login():
    return "登录页面,支持GET和POST请求"
GET:浏览器直接访问,获取数据 POST:表单提交、接口提交数据(后面表单章节重点使用)

2.5 url_for 反向解析URL(重点)

根据视图函数名生成url地址,不要硬写死URL,方便后期维护。 需要先导入:from flask import url_for
from flask import Flask, url_for

app = Flask(__name__)

@app.route('/user/<name>')
def user(name):
    return f"你好,{name}"

@app.route('/')
def index():
    # 第一个参数是视图函数名称,关键字参数填充路由变量
    url = url_for("user", name="lisi")
    return f"生成的url:{url}"

if __name__ == '__main__':
    app.run(debug=True)
访问首页,输出:生成的url:/user/lisi
优势:如果以后路由地址修改,不用全局替换所有写死的URL。
完整可运行代码汇总(app.py)
from flask import Flask, url_for

app = Flask(__name__)

# 静态路由

@app.route('/')
@app.route('/home')
def home():
    return "首页页面"

@app.route('/about')
def about():
    return "关于我们页面"

# 字符串动态路由

@app.route('/user/<name>')
def user(name):
    return f"你好,{name}"

# int整数路由

@app.route('/article/<int:article_id>')
def article(article_id):
    return f"文章ID:{article_id}"

# path路由

@app.route('/files/<path:file_path>')
def files(file_path):
    return f"文件路径:{file_path}"

# 指定请求方法

@app.route('/login', methods=["GET", "POST"])
def login():
    return "登录页面,支持GET和POST请求"

@app.route('/url-test')
def url_test():
    url = url_for("user", name="lisi")
    return f"反向生成url:{url}"

if __name__ == '__main__':
    app.run(debug=True)

本节课小结

静态路由:URL固定;动态路由 <变量> 捕获URL参数

转换器:int / string / path 限制参数类型

methods 设置接口支持的HTTP请求方法

url_for(视图函数名) 反向生成URL,解耦硬编码路径

练习任务

新增路由 /product/<int:pid>,返回 商品ID:xxx

使用 url_for 生成 product 的url,在页面打印出来

把代码跑起来,测试各个地址访问效果。 完成后回复 下一步,进入【Jinja2模板引擎与静态资源】。

— 全文完 —回到顶部 ↑
下载推广海报

文章推广海报

《Flask从零到精通|第2课:路由系统与URL动态传参》完整推广海报
DISCUSSION

文章回复

0 条公开回复
未登录回复需要审核后公开
还没有回复,欢迎参与讨论。