使用 python 将 html 表单输入写入文本文件

Writing html form input to text file using python

我正在尝试使用此代码将数字从 html 表单打印到文本文档以进行存储,但它似乎不起作用

@app.route("/result",methods = ['POST', 'GET'])
def result():
    if request.method == 'POST':
        timer = request.form['timer_input']
        f = open("timer.txt", "w")
        f.write("Water every {} days".format(timer)
        templateData = template(text = "timer")
        return render_template('timer.html', **templateData)

<form>Set frequencys (e.g. 2 = every 2 days): <br>  
    <input type ="number" name="timer_input">
    <br> 
</form>

有谁知道为什么它不起作用?我已经在几个地方寻找替代方案,但他们都使用 cgi 或 php 而我对使用任何一个都不感兴趣

尽管您最初的问题看起来已经解决,但这里有一些建议:

  1. 比较典型的是一个地址(视图)显示一个表格,另一个 地址显示表单完成后的结果。

  2. 文件写入操作作为一个单独的函数看起来更安全。您需要关闭文件,或者更好地使用 with.

  3. 你在GET上什么都不做,所以功能可以简化

下面是考虑了这些想法的代码:

from flask import Flask, request, render_template
app = Flask(__name__)

@app.route('/')
def index():
    return render_template('timer.html')


@app.route("/result", methods= ['POST'])
def result():
   timer = request.form['timer_input']
   log_message = "Water every {} days".format(timer)
   screen_message = "Sure, will water every {} days!".format(timer)
   save(log_message)
   return screen_message 


def save(text, filepath='timer.txt'):
    with open("timer.txt", "w") as f:
        f.write(text)
app.run()  

templates/timer.html:

<html><body>

<form action = "result" method = "POST">
Set frequencies (e.g. 2 = every 2 days): 
<br>  
    <input type ="number" name="timer_input">
    <input type = "submit">
<br> 
</form>

</body></html>