前置:已经完成第一课,成功跑通 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模板引擎与静态资源】。
文章回复
0 条公开回复