Python 使用API将HTML表单数据转换为Flask脚本

Python 使用API将HTML表单数据转换为Flask脚本,python,api,flask,submit,forms,http-post,Python,Api,Flask,Submit,Forms,Http Post,我试图让我下面的python脚本作为一个动态web应用程序工作,它使用HTML表单让用户键入某个停车场编号,然后根据政府网站的API返回关于该停车场可用地块数量的信息 Python脚本: import requests import json # Do the HTTP get request response = requests.get("https://api.data.gov.sg/v1/transport/carpark-availability") jack = response

我试图让我下面的python脚本作为一个动态web应用程序工作,它使用HTML表单让用户键入某个停车场编号,然后根据政府网站的API返回关于该停车场可用地块数量的信息

Python脚本:

import requests
import json

# Do the HTTP get request
response = requests.get("https://api.data.gov.sg/v1/transport/carpark-availability")

jack = response.json()
daniel = jack['items'][0]["carpark_data"]

for d in daniel:
    if d["carpark_number"] == carpark_No:
        print("\nFor Carpark No. " + carpark_No + ":\n")
        print(d["carpark_info"])
我希望变量“carpark\u No”是HTML表单中用户输入的值

例如,如果我将“停车场编号”设置为“HG55”,则此脚本的输出将为:

For Carpark No. HG55:

[ { 'total_lots': '82' , 'lot_type': 'C', 'lots_available': '79'} ]
然而,正如您可能猜到的,这个python脚本完全是基于终端的。我希望这是一个动态的网络应用程序,允许用户从API返回停车场信息。我研究了Flask,并设法在localhost上实现了以下功能

主烧瓶应用程序:

from flask import Flask, render_template, request
app = Flask(__name__)


@app.route('/')
def student():
   return render_template('student.html')

@app.route('/result',methods = ['POST', 'GET'])
def result():
   if request.method == 'POST':
      result = request.form
      return render_template("result.html",result = result)

if __name__ == '__main__':
   app.run(debug = True)
Flask App1:#在启动上面的python脚本并在浏览器上打开localhost:5000之后。(student.html)


但是,我一点也不知道从哪里开始,有人能给我指出正确的方向吗?

你不需要两条路线,只需要一条,因为它有两种模式:

@app.route('/',methods = ['POST', 'GET'])
def main():
   if request.method == 'POST':
      result = request.form
      return render_template("result.html", result=result)
   else:
      return render_template("student.html")
然后你可以把表格寄回主路线

   <form action = "{{ url_for('main') }}" method="POST">
         <p>Carpark No: <input type = "text" name = "Carpark" /></p>
         <p><input type = "submit" value = "submit" /></p>
   </form>

我尝试了“data.Carpark.data”和“data.Carpark”以及“data.Carpark.value”,但它们都返回“ImmutableMultiDict对象没有属性‘Carpark’”;那么,我应该如何编辑代码以访问表单输入数据@攻击:只需使用数据['Carpark']即可。如果您学习调试python脚本,您可以暂停执行并分析“数据”对象,看看您应该做什么。如果失败,您还可以尝试使用print(data)函数读取其键/属性
For Carpark No. HG55: # should be dynamic data that can be changed from student.html or Flask App 1

[ { 'total_lots': '82' , 'lot_type': 'C', 'lots_available': '79'} ]
@app.route('/',methods = ['POST', 'GET'])
def main():
   if request.method == 'POST':
      result = request.form
      return render_template("result.html", result=result)
   else:
      return render_template("student.html")
   <form action = "{{ url_for('main') }}" method="POST">
         <p>Carpark No: <input type = "text" name = "Carpark" /></p>
         <p><input type = "submit" value = "submit" /></p>
   </form>
import requests
import json

@app.route('/',methods = ['POST', 'GET'])
        def main():
           if request.method == 'POST':
              data = request.form
              # do your original script
              response = requests.get("https://api.data.gov.sg/v1/transport/carpark-availability")
              jack = response.json()
              daniel = jack['items'][0]["carpark_data"]
              # cross reference against form input
              result = {'Carpark No.': data['Carpark']}
              for d in daniel:
                  if d["carpark_number"] == data['Carpark']:
                      result.update({'Carpark Info': d["carpark_info"]})
              return render_template("result.html", result=result)
           else:
              return render_template("student.html")