Python 使用冷冻烧瓶进行POST请求

Python 使用冷冻烧瓶进行POST请求,python,rest,http,flask,web-applications,Python,Rest,Http,Flask,Web Applications,通过查看web上的示例,似乎可以在使用普通HTML/CSS/JS构建的静态网站中使用带有POST请求的表单。但我不能用烧瓶做这个。我在用电话 我的主server.py脚本如下(model和encoder在文件顶部正确加载) 以及我的freeze.py脚本: from flask_frozen import Freezer from server import app freezer = Freezer(app) if __name__ == '__main__': freezer.f

通过查看web上的示例,似乎可以在使用普通HTML/CSS/JS构建的静态网站中使用带有POST请求的表单。但我不能用烧瓶做这个。我在用电话

我的主
server.py
脚本如下(
model
encoder
在文件顶部正确加载)

以及我的
freeze.py
脚本:

from flask_frozen import Freezer
from server import app

freezer = Freezer(app)

if __name__ == '__main__':
    freezer.freeze()
最后,我的
index.html
的相关部分:

<form class="form-group" action="{{ url_for('predict') }}" method="POST">
    <textarea class="form-control" name="submission" id="submission" rows="10"></textarea> 
    <button type="submit" class="btn btn-primary">Classify</button>
</form>
我为调查/尝试解决此问题所做的工作: 405错误表示在predict上调用了POST以外的HTTP请求。因此,出于测试目的,我
将方法=[“POST”]
更改为
方法=[“GET”]
。然后我让我的预测页面只呈现普通的主页

@app.route('/predict/', methods=["GET"])
def predict():
    return render_template("index.html")
运行冻结脚本不再抛出错误。该网站位于
../build/index.html
,单击分类按钮可进入
../build/predict/index.html
。但是predict页面没有用处,因为它与主页相同

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

我猜FrientedFlask需要访问页面才能构建静态版本的页面,但我不应该也能够使用POST提供的信息更新这些页面吗?或者无法完成“静态”定义的这一部分,从代码中可以看出,冰冻烧瓶使用test_客户端的GET方法来获取要生成的每个页面的内容。所以如果不破解冷冻瓶,你就无法使用POST

另一方面,GET请求可以包括URL参数:

/predict?message=123456
因此,您可以获得如下参数:

request.args.get('message', '')
    @app.route('/predict', methods=["GET"])
    def predict():
        message = "some message" # hardcode a value
        prediction = model.predict([message]) # feeds to model
        classification = encoder.inverse_transform(prediction) # decodes prediction

        return render_template('index.html', message=message, classification=classification)
现在,请记住,Forozen Flask不知道发送什么作为参数。 所以我会这样做:

request.args.get('message', '')
    @app.route('/predict', methods=["GET"])
    def predict():
        message = "some message" # hardcode a value
        prediction = model.predict([message]) # feeds to model
        classification = encoder.inverse_transform(prediction) # decodes prediction

        return render_template('index.html', message=message, classification=classification)

要明确的是,我意识到静态意味着网站后面没有运行Flask后端。但是,如果可以在普通HTML/JS网站上发布(+DOM操作以呈现输出),那么是否应该有一些方法来使用Flask Freeze来实现这一点?很有趣,谢谢!这就是我一直在寻找的解决办法