
本文针对 Flask Blueprint 中使用 POST 请求传递 URL ID 时遇到的 404 错误,提供了一种解决方案。通过分析问题原因,阐述了在 JavaScript 中构建请求 URL 的正确方法,避免了 Blueprint 路由匹配失败的问题,确保请求能够正确地路由到 Blueprint 中的端点。
在使用 Flask Blueprint 构建 Web 应用时,经常需要在 URL 中传递 ID 作为参数。如果在前端使用 JavaScript 发起 POST 请求时,URL 构建不正确,可能会导致 404 错误。下面将详细介绍这个问题的原因以及解决方案。
问题分析
当我们在页面 localhost/2/updatestrat 上,尝试通过 JavaScript 发起 POST 请求到 /add_indicator 时,期望 Flask Blueprint 能够正确地将 URL 中的 ID (例如:2) 传递到 add_indicator 函数。然而,如果直接使用 /add_indicator 作为 endpoint,请求实际上会发送到 http://127.0.0.1:5000/add_indicator,而不是 http://127.0.0.1:5000/2/add_indicator。这导致 Flask 无法找到匹配的路由,从而返回 404 错误。
getJson 函数之所以能够正常工作,是因为它在没有明确指定根路径的情况下,浏览器会自动将当前页面的路径作为基础路径,从而正确地发送到 /2/load_conditions。
解决方案
解决方案在于,在 JavaScript 中构建请求 URL 时,要确保 URL 与 Blueprint 中定义的路由相匹配。
错误示例:
let indi_data = await postJsonGetData(data, "/add_indicator"); // 错误:缺少 ID
正确示例:
let indi_data = await postJsonGetData(data, "add_indicator"); // 正确:相对路径,自动包含 ID
或者,更明确的方式:
let strategyId = 2; // 或者从页面元素中获取let indi_data = await postJsonGetData(data, `${strategyId}/add_indicator`); // 明确构建 URL
在 Flask Blueprint 中,路由定义如下:
from flask import Blueprint, request, jsonifyfrom flask_login import login_requiredbp = Blueprint('my_blueprint', __name__)@bp.route('//add_indicator', methods=['POST'])@login_requireddef add_indicator(strategy_id): if request.method == 'POST': data = request.get_json() # 获取 POST 请求中的 JSON 数据 print(f"Strategy ID: {strategy_id}") print(f"Received data: {data}") return jsonify({"message": "Indicator added successfully"}) # 返回 JSON 响应
代码解释
Blueprint 定义: 使用 Blueprint 类创建一个 Blueprint 实例,命名为 my_blueprint。路由定义: @bp.route(‘//add_indicator’, methods=[‘POST’]) 定义了一个路由,该路由接受一个整数类型的 strategy_id 作为 URL 参数,并且只响应 POST 请求。add_indicator 函数: 这个函数处理 POST 请求。它接收 strategy_id 作为参数,并从 request 对象中获取 JSON 数据。 request.get_json() 用于解析请求体中的 JSON 数据。JSON 响应: jsonify({“message”: “Indicator added successfully”}) 创建一个 JSON 响应,包含一个 message 键,值为 “Indicator added successfully”。
注意事项
确保 Blueprint 已经正确注册到 Flask 应用中。在 JavaScript 中,如果使用绝对路径 /add_indicator,则 Flask 会认为该路由在根目录下,而不是在 Blueprint 中。在 Flask 中,使用 request.get_json() 可以方便地获取 POST 请求中的 JSON 数据。
总结
在使用 Flask Blueprint 时,正确构建 URL 至关重要。通过使用相对路径或者明确地构建包含 ID 的 URL,可以避免 404 错误,确保 POST 请求能够正确地路由到 Blueprint 中的端点。同时,合理使用 Flask 提供的工具函数,如 request.get_json() 和 jsonify(),可以简化请求处理和响应构建。
以上就是Flask Blueprint:URL ID 传递问题及解决方案的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1380396.html
微信扫一扫
支付宝扫一扫