如何向Python Flask Blueprint应用的GET请求传递路径参数
错误原因
你遇到的报错核心是两个问题:
- 路由参数名和视图函数形参不匹配:Flask 会把路由里
<xxx>占位符匹配到的路径内容,以xxx=匹配值的关键字参数形式传给视图函数。你路由里写的占位符是<name>,但视图函数get_user只定义了email形参,根本接不住name这个关键字参数,所以直接抛出TypeError。 - 你之前的代码能正常运行,是因为代码里完全没用到路径传入的参数,直接写死
Users.query.first()查询用户表第一条数据,不管你路径里填什么内容,返回的都是固定的第一条用户的邮箱,和你传的参数没有任何关系。
修复方法
只要保证路由占位符名称和视图函数形参名完全一致,再用接收到的参数做数据库过滤查询即可。另外邮箱包含@、.这类特殊字符,Flask 默认的string类型路径参数(匹配除斜杠外的所有字符)可以直接兼容,不需要额外转义。
修改后的完整代码如下:
from flask import Blueprint from ..extensions import db from ..models.users import Users api = Blueprint('api', __name__) # 占位符名改为email,和下方视图函数形参名保持一致 @api.route('/user/<email>') def get_user(email): # 用传入的email参数查询匹配的用户 user = Users.query.filter_by(email=email).first() # 增加不存在判断,避免查不到数据时触发500错误 if not user: return {"msg": "对应用户不存在"}, 404 return {"user_email": user.email}
修改完成后重启服务,请求GET http://127.0.0.1:5000/user/test@example.com就能正确拿到对应邮箱的用户数据。
补充说明:如果你想保留路由里的占位符名
<name>也可以,只需要把视图函数的形参改成def get_user(name):,函数内部用name变量作为邮箱值去查询即可,核心要求就是占位符名和形参名完全同名。
内容的提问来源于stack exchange,提问作者NextNightFlyer
相关产品推荐
相关产品推荐

