Я новичок в колбе. Я пытался применить post/redirect/get pattern для своей программы. Вот что я сделал.Как обнаружить ошибки в POST-запросе (колбу)?
В index.html
{% block page_content %}
<div class="container">
<div class="page-header">
<h1>Hello, {% if user %} {{ user }} {% else %} John Doe {% endif %}: {% if age %} {{ age }} {% else %} ?? {% endif %}</h1>
</div>
</div>
{% if form %}
{{wtf.quick_form(form)}}
{% endif %}
{% endblock %}
В views.py
class NameForm(Form):
age = DecimalField('What\'s your age?', validators=[Required()])
submit = SubmitField('Submit')
''''''
@app.route('/user/<user>', methods=['GET', 'POST'])
def react(user):
session['user'] = user
form = NameForm()
if form.validate_on_submit():
old_age = session.get('age')
if old_age != None and old_age != form.age.data:
flash('age changed')
session['age'] = form.age.data
return redirect(url_for('react', user = user))
return render_template('index.html', user = user, age = session.get('age'), form = form, current_time = datetime.utcnow())
запрос GET обрабатывается хорошо, когда я открыть xxxx:5000/user/abc
. Однако запрос POST не выполняется. Я получаю ошибку 404. Я думаю, что функция url_for
может дать неправильное значение redirect
. Как я могу проверить значение, возвращаемое url_for
?
У меня ошибка 405, когда я пытался использовать базу данных. На этот раз я понятия не имею.
@app.route('/search', methods=['GET', 'POST'])
def search():
form = SearchForm() # a StringField to get 'name' and SubmitField
if form.validate_on_submit():
person = Person.query.filter_by(name = form.name.data) # Person table has two attributes 'name' and 'age'
if person is None:
flash('name not found in database')
else:
session['age'] = person.age
return redirect(url_for('search'))
return render_template('search.html', form = form, age = session.get('age'), current_time = datetime.utcnow())
Есть ли удобный способ для отладки при сбое запроса POST?
Запустите приложение в [режиме отладки] (http://flask.pocoo.org/docs/0.10/quickstart/#debug-mode). – nathancahill
@nathancahill python run.py runningerver --host 0.0.0.0 --debug Это то, что я сделал. – LeonF