Architektura stránky
Lekce 21
Vašim úkolem je vypracovat webovou stránku ala blog. Uživatelé budou moct na hlavní stránce vidět všechny dosud přidané články. Článek se bude dát rozkliknout a zobrazit jeho obsah na separátní stránce.
Pro administrátora (přihlašování zatím neřešíme) budou k dispozici základní CRUD (create, read, update, delete) operace. Stránky by mohly vypadařit nějak takto:
- GET /: seznam všech článků
- GET /articles/{id}: detail článku
- GET /articles/new: zobrazení formuláře pro vytvoření nového článku
- POST /articles: route, kam se odesílá formulář pro vytvoření nového článku
- GET /articles/{id}/edit: formulář pro úpravu článku
- PATCH /articles/{id}: route, kam se odesílá formulář pro úpravu článku
- GET /articles/{id}/delete: formulář pro smazání článku (potvrzení, že chceme článek opravdu smazat)
- DELETE /articles/{id}: route, kam se odesílá požadavek pro smazání článku
Přesměrování
Občas se bude hodit umět přesměrovat uživatele na jinou stránku po úspěšném
provedeném požadavku. Například po úspěšném vytvoření článku (vyplnění formuláře +
kliknutí na tlačítko "Uložit") se pošle požadavek POST /articles a po úspěšném
provedení se přesměruje na stránku s detailem nově vytvořeného článku.
To se ve frameworku Flask provede pomocí funkce redirect.
from flask import redirect
@app.route('/articles', methods=['POST'])
def create_article():
# tady se clanek ulozi do "databaze" (v nasem pripade jen slovnik)
# po úspěšném vytvoření článku přesměrujeme na detail stránku
return redirect(url_for('article_detail', id=article.id))
@app.route('/articles/<int:id>', methods=['GET'])
def article_detail(id):
article = ...
return render_template('article_detail.html', article=article)
Všimněte si na řádce 8, kde je použité redirect a url_for pro přesměrování
na detail stránku. redirect provede samotné přesměrování, url_for generuje
URL na základě názvu route (myšleno article_detail, všimněte si na řádku 11, že se tak funkce
skutečně jmenuje) -- to se hodí, protože můžeme libovolně změnit název
route (např. z /articles/<int:id> na /detail/<int:id>) a url_for se automaticky postará
o to, aby byl uživatel přesměrovaný na správné místo.