Flask/Grinberg/03 - Formuláře
Tato stránka je součástí projektu: | |
Příslušnost: všeobecná |
03 - Formuláře
[editovat]- https://github.com/miguelgrinberg/microblog/tree/v0.3
- https://github.com/miguelgrinberg/microblog/releases/tag/v0.3
- https://github.com/miguelgrinberg/microblog/compare/v0.2...v0.3
Introduction to Flask-WTF
[editovat]Configuration
[editovat]User Login Form
[editovat]Form Templates
[editovat]Naučíme se vyplňovat formuláře metodou POST v souboru login.html:
{% extends "base.html" %}
{% block content %}
<h1>Sign In</h1>
<form method="post" novalidate> <!-- validation will be done on the server side -->
{{ form.hidden_tag() }} <!-- protect the form against CSRF attacks, see SECRET_KEY -->
<p>
{{ form.username.label }}<br>
{{ form.username(size=32) }}
</p>
<p>
{{ form.password.label }}<br>
{{ form.password(size=32) }}
</p>
<p>{{ form.remember_me() }} {{ form.remember_me.label }}</p>
<p>{{ form.submit() }}</p>
</form>
{% endblock %}
Přitom dostávám chybu Method Not Allowed – The method is not allowed for the requested URL (chyba 405).
Co je to za chybu a jak jí čelit? Viz:
Rovněž dle w:Stavové kódy HTTP Pochopíme, že chyby se dělí m.j. na:
- 5xx – server error responses – například známá 500 Internal server error
- 4xx – client error responses – například 404 Page Not Found (je to chyba klienta, že chce něco, co není!)
O.K., dočetli jsme se, že odhalit chybu 405 je často dost obtížné – neodhalil jsem.
Někde na nějakém videu jsem si všiml, že v souboru routes.py při definici webové stránky, která používá jinou metodu, než POST, to musí být explicitně uvedeno. Tedy:
@app.route('/login', methods=['GET','POST'])
A vida! To je to, co nakonec pomohlo. Divím se, že Grinberg to tam neměl uvedeno. AHA! Má to tam uvedeno. Jenže kousek dále, než jsem dočetl. Dokonce i s tou chybou, která tak vznikne. Byl jsem zkrátka rychlejší...
Nicméně jsem přitom také odkoukal, že ten chlapík ten problém řeší v jakémsi prostředí:
- POSTMAN
- Postman Tutorial for Beginners with API Testing Example
- w:en: API testing
- Testing with Postman
- Test ONAP API with Postman
- ONAP
Zajímavé věci...
Form Views
[editovat]Receiving Form Data
[editovat]Vybrání dat z formuláře je jednoduché – vrací je metoda:
form.jméno_pole.data
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit(): # receives the form by POST
flash('Login requested for user {}, remember_me={}'.format(
form.username.data, form.remember_me.data))
return redirect('/index')
return render_template('login.html', title='Sign In', form=form) # sends the form to the client – GET
V tomto oddílu se také naučíme používat funkci flash
, která kumuluje různé hlášky do svého seznamu, ke kterému je pak možno přistoupit (a zároveň jej vyprázdnit) funkcí
get_flashed_messages()
Zprávy si pak můžeme zobrazit např. HTML kódem:
{% with messages = get_flashed_messages() %}
{% if messages %}
<hr>
<i>Hlášky:</i>
<ul>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
<hr>
{% endif %}
{% endwith %}