我正在使用flask来部署我的深度学习模型。
但是当我运行模型时,出现以下错误。
不允许使用方法所请求的URL不允许使用方法
当我激活调试模式时,我得到了
flask.cli.NoAppException flask.cli.NoAppException:导入时 “应用”,引发了ImportError:
回溯(最近通话最近):文件 “ c:\ users \ tab \ anaconda3 \ lib \ site-packages \ flask \ cli.py”,第235行,在 locate_app 导入(模块名称)文件“ C:\ Chatbot-Flask-Server-master \ Chatbot-Flask-Server-master \ app.py”, 第3行,在 将tensorflow导入为tf ModuleNotFoundError:没有名为'tensorflow'的模块
我已经安装了我的tensorflow,该模型可以在没有烧瓶的情况下正常运行,激活虚拟环境时仍然会出现错误。
这是我的代码:
## webapp
app = Flask(__name__, template_folder='./')
@app.route('/prediction', methods=['POST', 'GET'])
def prediction():
response = pred(str(request.json['message']))
return jsonify(response)
@app.route('/')
def main():
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True)
和索引
<form action="http://127.0.0.1:5000/" method='POST' , 'GET'>
<p>Text <input type="text" name="message" style="height:200px" /></p>
<p><input type="submit" value="submit" /></p>
</form>
答案 0 :(得分:0)
您在帖子中提到您已经安装了Tensorflow,并且在没有虚拟环境的情况下也可以运行,因此错误可能是由于您尚未在 Virtual Environment 本身中安装Tensorflow而引起的。这是因为,当您使用Python创建虚拟环境时,例如:
python -m venv venv
在虚拟环境中,只有最新的Python可用,而在虚拟环境之外没有其他软件包。
解决方案:激活虚拟环境,然后安装虚拟环境的Tensorflow INSIDE。
很明显,当您提交表单时,它是一个POST
请求,但是在您的index
视图中,您只能处理GET
请求。如果您不知道POST
和GET
提出了什么要求,基本上:
POST
用于将数据发送到服务器。GET
用于从服务器请求数据。在您的情况下,您希望将表单数据发送到服务器,因此这是一个POST
请求。您所需要做的就是修改视图函数,使其也可以处理POST
。
from flask import request
@app.route("/", methods=["POST", "GET"])
def main():
// when the request is post request
if request.method == "POST":
// get data from the form
data = request.form["message"]
// do something here
return render_template('index.html')
<form action="http://127.0.0.1:5000/" method='POST'>
<p>Text <input type="text" name="message" style="height:200px" /></p>
<p><input type="submit" value="submit" /></p>
</form>
Jinja是Python的模板引擎。基本上,在Jinja的帮助下,您可以将变量从服务器端传递到客户端,并在客户端执行所有逻辑。对于您的情况,您想要将从前端获得的数据传递回前端,可以执行以下操作:
from flask import request
@app.route("/", methods=["POST", "GET"])
def main():
// when the request is post request
if request.method == "POST":
// get data from the form
data = request.form["message"]
// pass the data back to the front end
return render_template("index.html", message=data)
// message is none here because this is a get request
return render_template('index.html', message=None)
和您的index.html
:
<form action="http://127.0.0.1:5000/" method='POST' , 'GET'>
<p>Text <input type="text" name="message" style="height:200px" /></p>
<p><input type="submit" value="submit" /></p>
</form>
{% if message %}
<h1>{{ message }}</h1>
{% endif %}
前端发生了什么?好吧,它检查服务器上的message
变量是否为None
。如果不是None
,则渲染message
变量,否则,什么也不做。
您可以了解有关Jinja here的更多信息:)