Cześć Jestem nowy w Python Flask, mam to, co wydaje się prostym wydaniem 400 złego błędu żądania, który powinien być spowodowany błędnie wymienionym zmiennymi w formie podczas próby przekazania ich do funkcji w kolbie Python. Zrobiłem kilka badań, ale nadal nie mogę wymyślić, gdzie idę nie tak z tym kodem, jakaś pomoc byłaby naprawdę doceniana. Oto kod formy HTML

<html>
<body>

  <h1>Add a Munroe to your list</h1>
    <form action = "{{ url_for('addmunro') }}" method="POST"
      enctype = "multipart/form-data">

      Name<br>
      <input type="text" name="mnName"/><br>
      Description<br>
      <input type="text" name="mnDesc"/><br>
      Region<br>
      <input type="text" name="mnRegion"/><br>
      Height<br>
      <input type="text" name="mnHeight"/><br>
      Walk date<br>
      <input type="text" name="mnDate"/><br>
      Walk image<br>
      <input type="text" name="mnImage"/><br>

      <br>
      <br>
      <input type="submit" name="add-munro.html" value = "ADD MUNRO"/>

    </form>
</body>
</html>

A oto kod aplikacji Python Flask

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

@app.route('/add-munro.html', methods=['GET'])
def addmunro():


    #Create an empty list
    mnList={}

    #Create a munro dictionary
    munro = {'name':request.form['mnName'],
             'desc':request.form['mnDesc'],
             'region':request.form['mnRegion'],
             'height':request.form['mnHeight'],
             'date':request.form['mnDate'],
             'image':request.form['mnImage']}

    #the munro dictionary is added to mnList
    #mnList.append(munro)

    return render_template('add-munro.html')


if __name__ == "__main__":
  app.run(host = '0.0.0.0', debug = True)
-2
costep 16 październik 2017, 11:09

2 odpowiedzi

Najlepsza odpowiedź

Jest kilka błędów:

  1. Robisz prośbę pocztową, ale obsługa tylko zażąda
  2. .html nie jest potrzebny w routingu
  3. Obiekt Munro nie jest przekazywany do szablonu

Zaktualizowałem je, a teraz dobrze jest iść:

application.py

from flask import Flask, render_template, request, url_for

app = Flask(__name__)    

@app.route('/add-munro', methods=['GET','POST'])
def addmunro():
    if request.method == "POST":
        #Create an empty list
        mnList={}
        #Create a munro dictionary
        munro = {'name':request.form['mnName'],
                 'desc':request.form['mnDesc'],
                 'region':request.form['mnRegion'],
                 'height':request.form['mnHeight'],
                 'date':request.form['mnDate'],
                 'image':request.form['mnImage']}
        return render_template('add-munro.html', munro=munro)
    else:
        return render_template('add-munro.html')

if __name__ == '__main__':
    app.run(debug=True)

add-munro.html

<html>
<body>
    {% if munro is defined -%}
    <h3>
        Name: {{ munro.name }}
    </h3>
    <h3>
        Description: {{ munro.desc }}
    </h3>
    <h3>
        Region: {{ munro.region }}
    </h3>
    <h3>
        Height: {{ munro.height }}
    </h3>
    {%- endif %}
    <h1>Add a Munroe to your list</h1>
    <form action = "{{ url_for('addmunro') }}" method="POST"
    enctype = "multipart/form-data">

    Name<br>
    <input type="text" name="mnName"/><br>
    Description<br>
    <input type="text" name="mnDesc"/><br>
    Region<br>
    <input type="text" name="mnRegion"/><br>
    Height<br>
    <input type="text" name="mnHeight"/><br>
    Walk date<br>
    <input type="text" name="mnDate"/><br>
    Walk image<br>
    <input type="text" name="mnImage"/><br>

    <br>
    <br>
    <input type="submit" value = "ADD MUNRO"/>
</form>
</body>
</html>

Wynik:

enter image description here

0
arsho 16 październik 2017, 08:34

Tworzysz żądanie POST w formularzu, ale zezwalaj tylko metodą GET w trasie aplikacji. Zmień @app.route('/add-munro.html', methods=['GET']) do @app.route('/add-munro.html', methods=['POST']).

1
Rishabh Srivastava 16 październik 2017, 08:24