我正在尝试实现一个简单的仪表板Flask,它将:接受用户文本输入,带有“提交”按钮。将此用户输入发布到烧瓶。Flask 接受这个输入,对它做一些事情,然后向另一个 API 发出 GET 请求。这个 GET 请求返回数据并以某种方式显示(可能只是console.log现在)例如,使用星球大战 API:用户输入星球大战角色的名称(假设没有拼写错误)Flask 读取这个输入名称,并将其映射到一个 ID 号,因为Star Wars API接受 ID 号。向 Star Wars API 发送 GET 请求,以获取完整的角色信息。现在,我们可以只输入console.log字符信息(例如“身高”、“质量”等)我现在拥有的:app.pyfrom flask import Flask, jsonify, request, render_templateimport randomimport jsonapp = Flask(__name__)@app.route("/")def index(): return render_template('index.html')@app.route("/form_example", methods=["GET", "POST"])def form_example(): if request.method == "POST": language = request.form("character_name") starwars_dictionary = {"Luke Skywalker":"1", "C-3PO":"2", "R2-D2": "3"} # starwars_dictionary is a dictionary with character_name:character_number key-value pairs. # GET URL is of the form https://swapi.co/api/people/<character_number> return render_template("index.html")if __name__ == "__main__": app.run(debug=True)索引.html<!DOCTYPE html><html><head> <title>py-to-JS</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script></head><body> <h3>Sample Inputs</h3> <ul> <li>Luke Skywalker</li> <li>C-3PO</li> <li>R2-D2</li> </ul> <form method="POST"> Enter Name: <input type="text" name="character_name"><br> <input type="submit" value="Submit"><br> </form></body></html>在这种当前形式中,当我运行应用程序时,它返回“方法不允许;请求的 URL 不允许此方法”。我不确定我错过了什么;它可能只是没有正确连接在一起,但我不确定正确的语法是什么。
1 回答
UYOU
TA贡献1878条经验 获得超4个赞
可能表单正在发布到/端点,因为您没有声明表单action。
需要更像:
<form method="POST" action="/form_example">
或者,如果您想变得时髦并使用 Jinja 的url_for功能:
<form method="POST" action="{{ url_for('form_example') }}">
编辑:也就是说,你可以用一个路由函数来处理这个问题:
@app.route("/", methods=["GET", "POST"])
def index():
if request.method == "POST":
language = request.form("character_name")
starwars_dictionary = {"Luke Skywalker":"1", "C-3PO":"2", "R2-D2": "3"}
# Logic to query remote API ges here.
else: # Assume method is GET
return render_template("index.html")
然后进行表单操作{{ url_for('index') }}
添加回答
举报
0/150
提交
取消