【问题标题】:How to write input from input box from a flask website into a csv or txt file如何将来自烧瓶网站的输入框的输入写入 csv 或 txt 文件
【发布时间】:2020-05-06 01:17:32
【问题描述】:

我有一个基本的烧瓶网站,我想知道如何将基本输入框中的输入写入 csv 或 txt 文件。我认为我的代码可以工作,但它所做的只是创建一个空白的 csv 文件。 我的代码:

from flask import Flask, request, render_template
import csv
import io


app = Flask(__name__)
f = open('test.csv')
outFile = open('containers.csv', 'w')

free = csv.reader(f)
outFile.write("number" + '\n')


@app.route('/')
def my_form():
    return render_template('form.html')

@app.route('/', methods=['POST'])
def my_form_post():
    text = request.form['u']
    marker = str(text)
    return "You inputed " + text
    for row in free
        outFile.write(marker + '\n')

    f.close()
    outFile.close()


if __name__ == "__main__":
    app.run()

我的html代码是:

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Input</title>
  </head>
  <body>
  <form method="POST">
    <p>Input</p><br>
    <input name='u'>
    <input type='submit'>
  </form>
 </body>
</html>

我很确定问题出在 python 部分,但我不知道出了什么问题

【问题讨论】:

    标签: python flask


    【解决方案1】:

    要写入文本文件,为什么不定义如下函数:

    def write_file(data):
        with open('containers.txt', 'a') as f:
            f.write(data + '\n')
    
    

    open 函数放在with 语句中,意味着f 对象在该块中可用。当块完成时,文件也会自动关闭。

    然后你可以有一个单一的视图函数来处理呈现表单和接受发布的结果:

    @app.route('/', methods = ['GET','POST'])
    def my_form():
        if request.method=='POST':
            text = request.form['u']
            write_file(text)
            return "You inputed " + text
        elif request.method=="GET":
            return render_template('form.html')
    

    您还应该将action 属性添加到form 开始标记:

    <form method='POST' action='{{ url_for("my_form") }}'>
    

    现在表单将提交到正确的端点,即使您更改分配给my_form 函数的端点。

    【讨论】:

    • 我有一个问题。我怎样才能让它保存txt文件?每次我运行程序时,txt 文件都会重新启动。
    • @mark 查看我对write_file 函数的更新。将'a' 作为第二个参数传递给open 会导致附加内容;还会在写入的字符串中添加一个换行符。
    • @mark 尽管请注意,如果同时有多个请求进入服务器,则此示例将失败(例如,在第一个请求执行时第二个请求命中并锁定了文件。在那如果第二个请求会引发异常,并且内容不会被写入)。缓解这种情况的方法是使用不同的存储后端(不是文件)。此外,许多现代托管平台都设计有非持久磁盘空间,因此使用不同的存储后端;这将取决于您的用例。
    猜你喜欢
    • 2020-09-16
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 2018-07-11
    相关资源
    最近更新 更多