无法通过HTML<a>标签将心情数据传递至Python Flask后端求助
问题:无法通过标签将心情数据传递到Flask后端
我正在开发一个根据用户所选心情生成歌曲播放列表的网站,目前遇到的问题是:无法将用户从列表中选择的心情数据通过HTML的标签传递到Python后端进行后续处理。附上相关代码及报错信息,寻求技术帮助。
Flask代码
from flask import Flask, render_template, request app = Flask(__name__) # 假设songListGenerator是已实现的列表生成类 class songListGenerator: def __init__(self, mood): self.mood = mood def generate_list(self): # 模拟生成对应心情的歌曲列表 return [f"{self.mood} Track 1", f"{self.mood} Track 2", f"{self.mood} Track 3"] @app.route("/") @app.route("/music/") def music_page(): return render_template("music_page_1.html") # 合并冲突路由,统一处理GET请求 @app.route("/music/generated_list/", methods=["GET"]) def music_page_2(): mood_selected = request.args.get("mood") if not mood_selected: # 未获取到心情时返回选择页面并提示 return render_template("music_page_1.html", error="请先选择心情") print(f"Selected Mood: {mood_selected}") listGenerator = songListGenerator(mood_selected) generated_list = listGenerator.generate_list() return render_template("music_page_2.html", generated_list=generated_list) @app.route("/music/generated_list/connect_spotify/", methods=["GET"]) def music_page_3(): username = request.args.get("user") return render_template("music_page_3.html")
HTML代码(修正后)
<body> <header> <div class="heading"> <ul> <li id="devo"> <a href="/music/generated_list/?mood=Devotional">Devotional</a> </li> </ul> <ul> <li id="hap"> <a href="/music/generated_list/?mood=Happy">Happy</a> </li> </ul> <ul> <li id="sad"> <a href="/music/generated_list/?mood=Sad">Sad</a> </li> </ul> <ul> <li id="rel"> <a href="/music/generated_list/?mood=Relaxing">Relaxing</a> </li> </ul> <ul id="rom2"> <li id="rom"> <a href="/music/generated_list/?mood=Romantic">Romantic</a> </li> </ul> <ul id="nos2"> <li id="nos"> <a href="/music/generated_list/?mood=Nostalgic">Nostalgic</a> </li> </ul> </div> </header> <footer> <div class="foot"> <ul id="cel2"> <li id="cel"> <a href="/music/generated_list/?mood=Celebration">Celebration</a> </li> </ul> <ul id="ene2"> <li id="ene"> <a href="/music/generated_list/?mood=Energetic">Energetic</a> </li> </ul> </div> </footer> <div id="main"> <h2>WHAT IS YOUR MOOD LIKE?</h2> <h4>DRAG THE PLAY BUTTON TO SET THE MOOD</h4> </div> </body>
报错信息
内部服务器错误
服务器遇到内部错误,无法完成您的请求。可能是服务器过载,或者应用程序存在错误。

问题原因及修正说明
- 路由冲突:原代码中
/music/generated_list/绑定了两个视图函数,Flask无法识别有效处理逻辑,直接引发服务器错误。合并为单个路由即可解决。 - GET参数获取错误:原代码用
request.form.get()获取GET请求参数,这是错误用法——request.form仅适用于POST表单数据,GET参数需用request.args.get()。 - 全局变量风险:原代码使用全局变量存储用户选择的心情和生成的列表,多用户访问时会导致数据混乱,直接在路由内处理参数和生成列表更安全。
- 表单与标签逻辑冲突:原HTML中未定义
submitForm函数,且<a>标签的href跳转会绕过表单提交。直接在<a>的href中拼接?mood=心情值,后端通过request.args读取参数,是更简单可靠的实现方式。
内容的提问来源于stack exchange,提问作者dev
相关产品推荐
相关产品推荐

