Почему я получаю сообщение об ошибке запроса на эту страницу фляги? - PullRequest
0 голосов
/ 18 мая 2018

У меня две фляги на одной странице.Одна форма видна в начале, и пользователь должен выбрать опцию и на основании этого генерируется вторая форма.Второй из содержит dropdown, который отправит форму на событие onchange.Когда происходит это представление, я получаю сообщение об ошибке запроса.Моя HTML-форма:

 <form action="/ip" method="POST" name="btn" value="project">
   <label>Select Project : </label>
   <select class="form-control" style="width: 50%;display:inline-block" name="project_name">
      <option></option>
      <option value="k">Ki</option>
      <option value="s">S</option>
      <option value="l">L</option>
   </select>
   <button type="submit"  class="btn btn-primary m-b-10 m-l-5" style="display:inline-block" ">Fetch Details</button>
</form>
<form method="POST" action="/ip" name="btn" value="dlvr">
   <select id="subsystem_value" onchange="this.form.submit()">
      {% for i in data %}
      {% for k in i %}
      <option value={{ k }}>{{ k }}</option>
      {% endfor %}
      {% endfor %}
   </select>
</form>

и мой вид колбы:

@auth.route('/ip',methods = ['POST', 'GET']) 
def ip():
    if request.method == 'POST':
        if request.form['btn'] == "project":
            project = request.form['project_name']
            c, conn = connection()
            subsystem = "SELECT distinct sub from ip where project='{}'".format(project)
            query = "SELECT distinct del from ip where project='{}'".format(project)
            c.execute(query)
            data = c.fetchall()
            c.execute(subsystem)
            subsystem = c.fetchall()
            sub = []
            for row in subsystem:
                for id in row:
                    sub.append(id)
            conn.close() 
            return render_template('ip.html', data=data,sub=sub)
        else:
          subsystem = request.form['subsystem_value']  
          return render_template('ip.html')     
    else:
        return render_template('ip.html')  

Я пытался создать одно и то же имя для форм и также дал отдельные значения.Но я все еще получаю ошибку запроса.

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

У меня есть две области, в которых ваша ошибка исходит от

1) Имя формы устарело с HTML 4 и больше не отправляется, поэтому

if request.form['btn'] == "project":

не будет восприниматься как фляга

Способ обойти это, дать вашей кнопке отправки имя, подобное этому

<button type="submit" name="project" class="btn btn-primary m-b-10 m-l-5" style="display:inline-block" ">Fetch Details</button>

, и в вашем фляге проверьте форму, подобную этой

if 'project' in request.form:

2) Вторая ошибка в этой строке

<form method="POST" action="/ip" name="btn" value="dlvr">
   <select id="subsystem_value" onchange="this.form.submit()">

вторая строка здесь должна быть name= "subsystem_value", а не id="subsystem_value", иначе эта строка в колбе не будет понята

subsystem = request.form['subsystem_value'] 

Итак, у меня есть этот упрощенный код, который больше не выдает ошибку и возвращает значения так, как я думаю, вы хотите их

в колбе

@app.route('/ip',methods = ['POST', 'GET']) #Used @pp.route to match my testing app
def ip():
    if request.method == 'POST':
        if 'project' in request.form:
            project = request.form['project_name']

            return str(project)
        else:
          subsystem = request.form['subsystem_value']  
          return str(subsystem)     
    else:
        return render_template('test.html')  

в шаблоне

<form action="/ip" method="POST"  >
   <label>Select Project : </label>
   <select class="form-control" style="width: 50%;display:inline-block" name="project_name">
      <option></option>
      <option value="k">Ki</option>
      <option value="s">S</option>
      <option value="l">L</option>
   </select>
   <button type="submit" name="project" class="btn btn-primary m-b-10 m-l-5" style="display:inline-block" ">Fetch Details</button>
</form>
<form name method="POST" action="/ip" >
   <select name="subsystem_value" onchange="this.form.submit();">
      <option value="test1">t1</option>
      <option value="test2">t2</option>
      <option value="test3">t3</option>

   </select>
</form>

Надеюсь, это поможет вам

0 голосов
/ 18 мая 2018

Вы находитесь в идеальном положении, чтобы воспользоваться средствами отладки Flasks, которые можно активировать, установив переменную окружения FLASK_DEBUG=1 или передав debug=True в app.run().

См. http://flask.pocoo.org/docs/1.0/api/#flask.Flask.debug

Кроме того, если есть вероятность того, что этот код столкнется с враждебными пользователями, используйте переменные связывания SQL вместо создания запроса из ненадежного ввода.Атака SQL-инъекций может испортить ваш день.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...