对 Flask 的字符串 POST 请求

我正在尝试实现一个简单的仪表板Flask,它将:

  1. 接受用户文本输入,带有“提交”按钮。将此用户输入发布到烧瓶。

  2. Flask 接受这个输入,对它做一些事情,然后向另一个 API 发出 GET 请求。

  3. 这个 GET 请求返回数据并以某种方式显示(可能只是console.log现在)

例如,使用星球大战 API:

  1. 用户输入星球大战角色的名称(假设没有拼写错误)

  2. Flask 读取这个输入名称,并将其映射到一个 ID 号,因为Star Wars API接受 ID 号。向 Star Wars API 发送 GET 请求,以获取完整的角色信息。

  3. 现在,我们可以只输入console.log字符信息(例如“身高”、“质量”等)

我现在拥有的:

app.py

from flask import Flask, jsonify, request, render_template

import random

import json


app = 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 不允许此方法”。


我不确定我错过了什么;它可能只是没有正确连接在一起,但我不确定正确的语法是什么。


肥皂起泡泡
浏览 143回答 1
1回答

UYOU

可能表单正在发布到/端点,因为您没有声明表单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():&nbsp; &nbsp; if request.method == "POST":&nbsp; &nbsp; &nbsp; &nbsp; language = request.form("character_name")&nbsp; &nbsp; &nbsp; &nbsp; starwars_dictionary = {"Luke Skywalker":"1", "C-3PO":"2", "R2-D2": "3"}&nbsp; &nbsp; &nbsp; &nbsp; # Logic to query remote API ges here.&nbsp; &nbsp; else: # Assume method is GET&nbsp; &nbsp; &nbsp; &nbsp; return render_template("index.html")然后进行表单操作{{ url_for('index') }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python