Python Flask:单击按钮不会执行任何操作

时间:2018-07-23 14:23:06

标签: python flask

我是Flask的新手,我正在尝试构建一个简单的Web应用程序。基本上,我在主页上有一个文本输入框和一个提交按钮。

单击“提交”后,它会根据输入的文本显示一些结果(目前已在下面的代码中进行了硬编码),还有2个按钮(正/负)将输入的文本添加到特定文件中(或者带有“正”或“负”标签)。

但是,我面临的问题是这两个按钮:它们在单击时没有任何作用。

这是我现在拥有的:

Python Flask应用程序

app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
    return render_template('index.html')

@app.route('/process-data', methods=['GET', 'POST'])
def process_data():
    if request.method == 'GET':
        return render_template('index.html')

    if request.method == 'POST':
        # get the text from the form that was filled in
        input_text = request.form['text']

        # if submit button is clicked
        if request.form['submit'] == 'Submit':
            final_result = 'stackoverflow is the best'

        if request.form['submit'] == 'Positive':
            f = open('dataset/dataset.tsv', 'a')
            f.write(input_text + '\t' + 'positive')

        # if negative button is clicked  
        if request.form['submit'] == 'Negative':
            f = open('dataset/dataset.tsv', 'a')
            f.write(input_text + '\t' + 'negative')

        # show the result on the page   
        return render_template('index.html', result=final_result, text=input_text)

index.html文件

<!doctype html>
<form action="/process-data" method="post" role="form">
    <label for="text">Text:</label>
    <input type="text" name="text" placeholder="Input sentence here">
    <input type="submit" name="submit" value="Submit">
</form>

{% if result is not none %}
    {{ result }}
    <h2>Add to dataset</h2>
    <form action="/process-data" method="post" role="form">
        <label for="add-dataset">This sentence was:</label>
        <input type="submit" name="submit" value="Positive">
        <input type="submit" name="submit" value="Negative">
    </form>
{% endif %} 
</html>

2 个答案:

答案 0 :(得分:0)

创建您的/路由,让它简单地返回索引模板,而不像这样:

@app.route('/', methods=['GET', 'POST'])
def index():
    return render_template('index.html')

然后将另一个路由分配给另一个将执行处理的功能。我不会称它为索引,也许是像过程数据这样的东西:

@app.route('/process-data', methods=['GET', 'POST'])
def process_data():
    # put the body of your function here
    # ...
    # ...
    # ...
    return render_template('index.html', result=final_result, text=input_text)

最后,您只需要相应地更新表单操作即可:

<form action="/process-data" method="post" role="form">

答案 1 :(得分:0)

检查是否已设置配置设置SESSION_COOKIE_SECURE。如果您在localhost或通过不安全的线路工作,并且已设置SESSION_COOKIE_SECURE=True,则不会发送任何会话cookie,因此,任何形式,csrf保护和其他各种操作都不会起作用。在这种情况下,请改用SESSION_COOKIE_SECURE=False