بيانات نموذج HTML في سكربت قارورة باستخدام واجهات برمجة التطبيقات

0

أحاول الحصول على نص بايثون الخاص بي أدناه يعمل كتطبيق ويب ديناميكي يستخدم نموذج HTML للمستخدمين لكتابة رقم معين لمواقف السيارات والذي سيعرض بعد ذلك المعلومات حول عدد القطع المتوفرة لذلك الموقف المحدد بناءً على حكومة -واجهة برمجة تطبيقات موقع الويب.

نص بايثون:

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_No" قيمة يتم إدخالها من قبل المستخدم من نموذج HTML.

على سبيل المثال ، إذا قمت بتعيين "carpark_No" على "HG55" ، فسيكون الإخراج من هذا البرنامج النصي هو:

For Carpark No. HG55:

[ { 'total_lots': '82' , 'lot_type': 'C', 'lots_available': '79'} ]

ومع ذلك ، فإن هذا النص البرمجي هو أساس نهائي تمامًا كما توقعت. أريد أن يعمل هذا كتطبيق ويب ديناميكي يسمح للمستخدمين بإعادة معلومات الكثير من مواقف السيارات من واجهة برمجة التطبيقات. لقد بحثت في Flask وتمكنت من الحصول على العمل التالي على المضيف المحلي.

تطبيق القارورة الرئيسي:

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)

قارورة App1: # بعد بدء سكريبت بايثون أعلاه وفتح المضيف المحلي: 5000 على المتصفح. (student.html)

<!doctype html>
<html>
   <body>

      <form action = "http://localhost:5000/result" method = "POST">
         <p>Carpark No: <input type = "text" name = "Carpark" /></p>
         <p><input type = "submit" value = "submit" /></p>
      </form>

   </body>
</html>

قارورة App2: (result.html)

<!doctype html>
<html>
   <body>

      <table border = 1>
         {% for key, value in result.items() %}

            <tr>
               <th> {{ key }} </th>
               <td> {{ value }} </td>
            </tr>

         {% endfor %}
      </table>

   </body>
</html>

المشكلة مع سكربتات القارورة أعلاه هي أنه يمكنني توصيل قيم "Carpark_No" كـ "HG55" ، وهي تعيد البيانات تمامًا في جدول ولكن هذا ليس ما أريده.

أود تغيير النص البرمجي الرئيسي لتطبيق Flask بطريقة تمكن الصفحة الأخيرة في "/ results" من أن تكون صفحة مقدمة من Python Script التي كنت أذهب إليها في البداية.

بمعنى آخر ، أود استخدام البيانات من إرسال النموذج الخاص بي في student.html وتوصيله بأول برنامج Python Script حتى أحصل على إخراج مثل هذا:

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'} ]

ومع ذلك ، ليس لدي أدنى فكرة عن مكان البدء ، هل يمكن لأحد أن يوجهني في الاتجاه الصحيح؟

1 إجابة

0

لا تحتاج حقًا إلى طريقين ، يمكنك فقط استخدام واحد لأنه يحتوي على وضعين:

@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>

مشكلتك ، على الرغم من ذلك ، أنك تقوم فقط بإعادة تدوير بيانات إدخال النموذج وتمريرها إلى result.html. بدلاً من ذلك ، تريد معالجة بيانات إدخال النموذج على غرار النص البرمجي ثم إعادة البيانات التي تمت معالجتها:

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")
:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام