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

时间:2018-05-30 04:52:53

标签: python html raspberry-pi3

我正在尝试使用此代码将数字从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 个答案:

答案 0 :(得分:0)

即使您的初始问题看起来已经解决,但以下是一些建议:

  1. 一个地址(视图)更典型的是显示表单和另一个表单 地址以显示表单完成时的结果。

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

  3. 您在GET上没有任何操作,因此可以简化此功能。

  4. 以下是考虑到这些想法的代码:

    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)
    

    <强>模板/ 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>