在Flask应用中添加第二个文本区域

0 投票
1 回答
579 浏览
提问于 2025-04-20 09:07

我有一个简单的Flask应用程序。我尝试在这个应用中添加第二个文本框,以便增加一个新功能。我把第一个文本框完全复制了一遍,但当我在下方的框里点击提交时,收到了以下信息:

错误请求 浏览器(或代理)发送了一个服务器无法理解的请求。

这是我修改后的代码,唯一的变化就是添加了一个和第一个完全一样的第二个文本框。看起来没问题,但当我点击提交时就出错了,即使我改变了文本框的名称。我不明白服务器是怎么区分这两个文本框的。这里是正在修改的应用。考虑到这个问题,它的复杂程度也就那样。谢谢!

<!DOCTYPE html>
<html>
<head>
    <title>Ven Diagram</title>
<style type=”text/css”>
#pagearea {
width: 100%;
margin: 0 auto;
}
textarea {
width: 48%;
padding: 0 0 0 0;
margin: 0 0 0 0;
}
input {
width: 80px;
height: 40px;
}
 </style>
</head>
<body>
    <div id="pagearea">
    <h1>
    This program allows you to match text. The text must be unicode.
    Enter two text blocks to compare:
    </h1>
    <form action="/" method="post">
      <textarea name="A" cols="100" rows="20"></textarea>
      <textarea name="B" cols="100" rows="20"></textarea>
      <br />
      <input type="submit" value="Execute" />
    </form>
    </div>

 <div id="pagearea">
    <h1>
    This will give add and subtract permutations for numbers. 
    </h1>
    <form action="/" method="post">
      <textarea name="A" cols="100" rows="20"></textarea>
      <br />
      <input type="submit" value="Execute" />
    </form>
    </div>

    {% with messages = get_flashed_messages() %}
        {% if messages %}
            Results:
            <pre>
                {% for message in messages %}
{{ message }}
                {% endfor %}
            </pre>
        {% endif %}
    {% endwith %}
</body>
</html>

这是Python代码:

#!flask/bin/python
import flask, flask.views
import os
import urllib

app = flask.Flask(__name__)
app.secret_key = "REDACTED"

class View(flask.views.MethodView):
    def get(self):
        return flask.render_template('index.html')

    def post(self):
        A = flask.request.form['A']
        B = flask.request.form['B']
        A = urllib.unquote(unicode(A))
        B = urllib.unquote(unicode(B))
        C = A.split()
        D = B.split()
        Both = []
        for x in C:
            if x in D:
                Both.append(x)
        for x in range(len(Both)):
            Both[x]=str(Both[x])
        Final = []
        for x in set(Both):
            Final.append(x)
        MissingA = []
        for x in C:
            if x not in Final and x not in MissingA:
                MissingA.append(x)
        for x in range(len(MissingA)):
            MissingA[x]=str(MissingA[x])
        MissingB = []
        for x in D:
            if x not in Final and x not in MissingB:
                MissingB.append(x)
        for x in range(len(MissingB)):
            MissingB[x]=str(MissingB[x])
        #flask.flash("A:")
        #flask.flash(A)
        #flask.flash("B:")
        #flask.flash(B)
        #flask.flash("C:")
        #flask.flash(C)
        #flask.flash("D:")
        #flask.flash(D)
        flask.flash("Words in Both:")
        flask.flash(Final)
        flask.flash("Words in First Box Only:")
        flask.flash(MissingA)
        flask.flash("Words in Second Box Only:")
        flask.flash(MissingB)
        return self.get()

app.add_url_rule('/', view_func=View.as_view('main'), methods=['GET', 'POST'])

app.debug = True
if __name__ == "__main__":
    # Bind to PORT if defined, otherwise default to 5000.
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)

1 个回答

1

即使你可能觉得这有点过头,我发现我想尽可能多地使用Flask的扩展功能。

在你的情况下,我建议使用wtforms配合flask-wtf,这样可以更好地处理各种表单。

撰写回答