2016-11-05 3 views
1

действительно борется с этим плохим запросом из фляжки. Я знаю, что это нормально, потому что колба не обнаруживает [ключ] в форме. Тем не менее, я проверил мою форму и код на питоне 40 раз и не вижу никакой причины, которая была бы так. Я прокомментировал каждую строку код python, который ссылается на request.form. Я сделал это 1 к 1, и у меня все еще есть плохая просьба. Однако, когда я прокомментирую все строки, плохой запрос уходит. Любая мысль была бы замечательной.Плохой запрос с флягой

Python code;

if request.method == 'POST': 
    form = 'Add Package Form' 
    clientId = request.form['id'] 
    date = request.form['date2'] 
    strPrice = request.form['price'] 
    price = float(strPrice) 
    adultlessons = request.form['adult'] 
    juniorlessons = request.form['junior'] 
    shortlessons = request.form['short'] 
    playinglessons = request.form['playing'] 
    notes = request.form['notes'] 

форма ..

<form action="/addpackage" method="post" class="sky-form"> 
       <fieldset> 
       <section> 
        <label class="label">Select Package Date</label>  
        <label class="input"> 
         <i class="icon-append fa fa-calendar"></i> 
         <input type="text" name="date2" id="date"> 
        </label> 
       </section> 
       <div style="margin: -25px"></div> 
      <fieldset> 
       <section> 
        <label class="label">Price</label> 
        <label class="input"> 
         <input type="text" name="price"> 
        </label> 
       </section> 
       <section> 
        <label class="label">Adult Lessons</label> 
        <label class="input"> 
         <input type="text" name="adult"> 
        </label> 
       </section> 
       <section> 
        <label class="label">Junior Lessons</label> 
        <label class="input"> 
         <input type="text" name="junior"> 
        </label> 
       </section> 
       <section> 
        <label class="label">Short Game Lessons</label> 
        <label class="input"> 
         <input type="text" name="short"> 
        </label> 
       </section> 
       <section> 
        <label class="label">Playing Lessons</label> 
        <label class="input"> 
         <input type="text" name="playing"> 
        </label> 
       </section> 
       <section> 
        <label class="label">Notes</label> 
        <label class="textarea textarea-expandable"> 
         <textarea rows="3" name="notes"></textarea> 
        </label> 
        <div class="note"><strong>Note:</strong> expands on focus.</div> 
       </section> 
      </fieldset> 
       </fieldset> 
      <!-- hidden client id --> 
      <input type="hidden" name="id" value="{{ client.id }}"> 
      <!-- /hidden client id --> 
      <footer> 
       <button type="submit" name="addpackage" value="package" class="button">Add Package</button> 
      </footer> 
     </form> 

ответ

1

Это что-то пол-ответа, но это было слишком долго для комментария.

Если вы включили отладку в своем приложении Flask, вы должны получить подробную трассировку, указывающую, где именно возникает проблема (как в браузере, так и на консоли).

Если ваше приложение в настоящее время имеет что-то вроде:

app.run() 

Просто установите debug параметр true:

app.run(debug=True) 

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

Для чего это стоит, если я сбросить свою форму и свой код в простой Колба приложение, все это, кажется, работает просто отлично до тех пор, как я обеспечиваю числовое значение для price поля.

+1

Спасибо .. Я на самом деле есть .. creatapp() FUNC, а затем делать .. приложение = creatapp() У меня есть app.debug = True, в createapp(), но я не вижу подробная трассировка в консоли? В других новостях .. Это я удалил «textarea» и просто сделал это поле ввода, и теперь он работает. Не уверен, почему это изменит ситуацию? –

1

Обычно вы получаете 400 Bad Request в Flask при отправке формы при попытке доступа к ключу формы в объекте request, который не существует.

Это потому, что request.form объект наследует его метод __getitem__ в Multidict класс в werkzeug.datastructures модуль, который поднимает BadRequestKeyError when a key doesn't exist.

0

Вы должны дать данные формы значения по умолчанию, чтобы избежать HTTP 400 ошибки, например:

name = request.form["name"] or "" 

или:

default_value = True 
is_public = request.form.get('public', default_value) 

Однако, я рекомендую вам использовать Flask-WTF.
С Колба-ВТФ, ваш код может быть упростить следующим образом (пример):

import ... 
app = Flask(__name__) 

class EditProfileForm(Form): 
    name = StringField('name', validators=[Length(0, 64)]) 
    location = StringField('city', validators=[Length(0,64)]) 
    website = StringField('website', validators=[Length(0,64), render_kw={"placeholder": "http://..."}) 
    about_me = TextAreaField('Bio', validators=[Length(0,2000)], render_kw={"placeholder": "I'm......"}) 
    submit = SubmitField(u'submit') 

@app.route('/edit-profile', methods=['GET', 'POST']) 
def edit_profile(): 
    form = EditProfileForm() 
    if form.validate_on_submit(): 
     current_user.name = form.name.data 
     current_user.location = form.location.data 
     current_user.website = form.website.data 
     current_user.about_me = form.about_me.data 
     db.session.add(current_user) 
     flash('Update success!', 'success') 
     return redirect(url_for('.user', username=current_user.username)) 
    return render_template('edit_profile.html', form=form) 

В вашем HTML файле:

<form method="POST" action="/"> 
    {{ form.hidden_tag() }} 
    {{ form.name.label }} {{ form.name() }} 
    {{ form.location.label }} {{ form.location() }} 
    ... 
</form> 

Кстати, если вы используете Flask-Bootstrap, вы можете просто используйте одну строчку, чтобы отобразить форму:

{% import "bootstrap/wtf.html" as wtf %} 
{{ wtf.quick_form(form) }} 

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