Flask开发问题:无法将用户选择的选项保存至TXT文件
问题解决与代码修正
首先排查核心问题并给出针对性修改:
1. 前端必填配置
你的HTML中的select标签必须添加multiple属性,否则无法支持多选,后端getlist也无法获取到多个选项值。示例前端代码:
<form action="/submit" method="POST"> <select name="disease" multiple size="5"> <!-- 41个选项示例 --> <option value="Fungal infection">Fungal infection</option> <option value="Hepatitis C">Hepatitis C</option> <option value="Hepatitis E">Hepatitis E</option> <option value="Alcoholic hepatitis">Alcoholic hepatitis</option> <!-- 其余选项 --> </select> <button type="submit">提交选择</button> </form>
2. 后端代码修正
原代码存在两个核心问题:一是用w模式覆盖文件而非追加;二是未将单次提交的多选结果格式化为你需要的列表行。修正后的代码如下:
from flask import Flask, render_template, request, session app = Flask(__name__) app.secret_key = "your_random_secret_key_here" # 用于安全存储session数据 @app.route('/') def index(): return render_template('index.html') @app.route('/submit', methods=['POST']) def submit(): selected_diseases = request.form.getlist('disease') if selected_diseases: # 格式化为你需要的[选项1, 选项2]格式 formatted_record = f"[{', '.join(selected_diseases)}]\n" # 用追加模式(a)写入文件,避免覆盖已有记录 try: with open('selected_diseases.txt', 'a', encoding='utf-8') as file: file.write(formatted_record) session['last_selected'] = selected_diseases # 存储最近一次选择到session return f"Saved! [symptoms: {selected_diseases}]" except Exception as e: return f"保存失败:{str(e)}" return "请至少选择一个选项" @app.route('/show_selected') def show_selected(): # 从session获取最近一次选择,替代不安全的全局变量 return f"最近选择的症状:{session.get('last_selected', [])}" if __name__ == '__main__': app.run(debug=False)
关键修改说明
- 文件写入模式:将
w改为a,实现每次提交的追加写入,而非覆盖原有内容。 - 格式处理:用
', '.join(selected_diseases)将多选列表转为逗号分隔字符串,再包裹方括号,符合你需要的每行一个列表的格式。 - 移除全局变量:改用
session存储最近一次选择,避免Flask多线程环境下的全局变量冲突问题。 - 编码与异常处理:指定
encoding='utf-8'防止乱码,添加try-except捕获文件写入异常。
内容的提问来源于stack exchange,提问作者With Me
相关产品推荐
相关产品推荐

