Pohledy na budovy ve baňce

V rámci modelu nebo paradigmatu vývoje, který navrhuje BaňkaJedním z nejdůležitějších bodů je správa zobrazení, protože nám umožňují definovat způsob, jakým bude uživatel interagovat s naší stránkou nebo aplikací.

Nejjednodušší způsob, jak pracovat s pohledem, je definovat operaci přímo v definici její cesty, což však není vždy užitečné ani adekvátní, zvláště pokud vytváříme velké aplikace.

PožadavkyPotřebujeme funkční instalaci Baňka az důvodů kompatibility potřebujeme vyšší verzi 0.7 protože jedna z komponent, se kterými budeme pracovat, nebyla zahrnuta v rámci až po uvedenou verzi. Musíme také spustit aplikaci nebo mít nějakou aplikaci Baňka abychom mohli zahrnout příklady do sekce zobrazení a tak je mohli spustit pomocí prohlížeče.

Pohledy na základě rolí


Je to jeden z nejjednodušších způsobů, jak vytvořit interakci s uživatelem, musíme pouze napsat funkci a vyzdobit ji trasou, což znamená, že když router Baňka přijme požadavek, zkontroluje, zda na uvedenou trasu čeká nějaká funkce, a pokud ji dostane, provede ji.

Obecně tento typ zobrazení vyžaduje alespoň metodu DOSTAT z HTTPJako osvědčený postup az bezpečnostních důvodů však, pokud chceme přidat hodnoty do naší struktury perzistence dat, můžeme také použít metodu POŠTA.

Vytvoření pohledu pomocí GET


Pomocí této metody vytvoříme pohled DOSTATChcete -li to provést, stačí definovat jeho název ve funkci a přiřadit k ní trasu, pak uvnitř funkce umístíme náš obsah, podívejme se na následující kód, který se ilustruje.
 @ app.route ('/ view-get') def view (): value = request.args.get ('content', 'sample') return 'Toto je zobrazení pomocí GET a obdrží hodnotu:% s'% hodnota
V kódu pak vidíme, jak používáme dekoratér Abychom určili, na kterou trasu čekáme, definujeme odpovídající funkci a v rámci ní voláme pomocí žádost na argumenty, které obdržel DOSTAT, v tomto případě hledáme argument nazvaný obsah a přiřadíme jej proměnné s názvem hodnota, pokud tento argument neexistuje, bude jako výchozí hodnota umístěna „ukázka“ a nakonec vrátíme text a předáme obsah hodnoty .

Pokud spustíme náš příklad v prohlížeči, dostaneme následující:

Vytvoření pohledu pomocí POST


Co se stane, když chceme přijímat citlivá data a nechceme je předávat pomocí parametrů v URL, protože v těchto případech musíme použít metodu POST, protože odesílá data skrytá z pohledu uživatele, samozřejmě tam jsou další bezpečnostní opatření, která bychom měli použít, ale v tuto chvíli je pro tento případ nepotřebujeme.

Chcete -li vytvořit zobrazení, které přijímá data pomocí POST, musíte pouze označit očekávanou metodu v souboru dekoratér který přijímá požadovanou trasu, k tomu použijeme doplňkový parametr metody.

Pak v rámci naší funkce můžeme použít žádost k získání hodnot však musíme na rozdíl od předchozího příkladu namísto vyžadování argumentů uvést, že hodnoty přijímáme z formuláře. Podívejme se na kód, co jsme právě vysvětlili.

 @ app.route ('/ post-view', methods = ['POST',]) def post_view (): value = request.form.get ('content', 'sample') return 'Toto je pohled pomocí POST a obdrží hodnotu:% s '%
Můžeme si všimnout, že se jedná o téměř stejný kód jako výše, kromě již zmíněných rozdílů, ale podívejme se, co se stane, když spustíme kód přímo v prohlížeči:

ZVĚTŠIT

Jak pouze určíme, že můžeme metodu obdržet POŠTA, při přístupu přes DOSTAT naše aplikace záznam zamítne, a proto nám pošle kód 405 Metoda není povolena, takže bez hodnot pocházejících z požadavku POST toto zobrazení nezobrazí žádné informace.

Kombinace GET a POST v zobrazení


Jelikož zpracování různých pohledů pro každou metodu není vždy to, co chceme, můžeme použít obě metody ve stejném pohledu, což je velmi užitečné zejména tehdy, když chceme pomocí metody zpracovávat formuláře, například DOSTAT ukazujeme formu a pomocí POŠTA zpracováváme zásilku téhož.

K použití tohoto režimu musíme pouze přidat DOSTAT v seznamu, do kterého jsme přešli metody při definování dekoratér s cestou se podívejme na níže uvedený kód:

 @ app.route ('/ view', methods = ['GET', 'POST',]) def view (): if request.method == "GET": return '' 'Show Views' '' else: value = request.form.get ('content', 'sample') return 'Toto je zobrazení pomocí GET a POST, které obdrží hodnotu:% s'% hodnota
Při volání trasy z prohlížeče metodou DOSTAT získáme následující:

Poté napsáním něčeho do textového pole a stisknutím klávesy Enter odešleme formulář na stejnou cestu, ale s metodou POŠTA, což nám dává výsledek jako následující:

Zde jsme pak napsali pravdivé zobrazení založené na funkcích, které nám umožňuje používat a využívat obě metody HTTP dělat naše operace.

Zobrazení podle tříd


Jelikož vytváření funkcí, přestože slouží našim účelům, je někdy velmi těžkopádné a umožňuje více kódu, než je nutné, Baňka realizoval hovory třídní pohledy, koncept, ze kterého si vypůjčil Django, a to nám umožňuje psát třídy, pomocí kterých budeme generovat pohledy, tyto třídy mohou být obecné, pomocí kterých můžeme dělat dědičnost, pokud si přejeme.

Abychom mohli použít tento typ komponenty, musíme nejprve importovat z baňky. pohledy, kde třída Pohled Je to obecná třída, která nám umožní přidat základní funkce, abychom mohli odesílat trasy a definovat metody.

Vytváření našeho třídního pohledu


V tomto příkladu vytvoříme stejný pohled, jaký jsme udělali v předchozím příkladu, ale z přístupu založeného na třídách, tímto způsobem můžeme zjistit rozdíly mezi oběma formami, pamatujte na to, že ačkoli se v ukázkovém kódu neobjevuje, vyrobili jsme import třídy View.

Podívejme se na kód pro náš příklad:

 třída ViewClass (View): methods = ['GET', 'POST',] def dispatch_request (self): if request.method == "GET": return '' 'Show Views' '' if request.method == " POST ": value = request.form.get ('content', 'sample') return 'Toto je zobrazení pomocí GET a POST, které obdrží hodnotu:% s'% valorapp.add_url_rule ('/ view-class', view_func = VistaClase.as_view ('třída zobrazení'))
Toto je nejzákladnější forma tohoto stylu zobrazení, ale vidíme, že už na tom nejsme závislí dekoratér, to, co děláme, je volání metody dispatch_request a minuli jsme ho tak, aby přijímal stejný objekt s tímto, můžeme určit požadavky, které dostáváme, pak naznačíme, že obdržíme obě metody a nakonec definujeme naše chování, výsledek na prohlížeč bude stejný jako předchozí, budeme mít pole a když jej odešleme, obdržíme uvedenou odpověď.

Ale co když chceme napsat mnohem čistší kód? K tomu můžeme použít třídu MethodView z Baňka což nám umožňuje vytvářet metody ve třídě pro definování metod HTTP jednodušším způsobem.

Podívejme se na následující příklad, kde přepíšeme předchozí kód pro použití tohoto režimu:

 třída ViewClass (MethodView): def get (self): return '' 'Show Views' '' def post (self): value = request.form.get ('content', 'sample') return 'This is a view using ZÍSKEJTE a POST, který obdrží hodnotu:% s '% valorapp.add_url_rule ('/ view-class ', view_func = ViewClass.as_view (' view-class '))
Jak vidíme, upustili jsme od definice metod, které obdržíme, navíc již tuto metodu nepoužíváme odeslání, jednoduše definujeme, co budeme v metodě dělat POŠTA, a co budeme dělat v GET, čímž poskytneme mnohem více čištění našemu zraku.

Stále existuje diskuse, že pokud je to lepší pohledy založené na rolích vlny třídní, ale ve skutečnosti neexistuje jeden lepší než druhý, existují prostě dva způsoby práce, doporučení je, že pokud je pohled velmi jednoduchý, můžeme to udělat pomocí funkcí, a pokud již má úplnější logiku, děláme to pomocí tříd .

Tímto jsme dokončili tento tutoriál, ve kterém jsme vybudovali důležitou základnu tím, že víme, jak fungují pohledy a jak můžeme pracovat s jejich různými metodami HTTP, protože toto je základ, který můžeme použít k vytváření pokročilejších aplikací.

Vám pomůže rozvoji místa, sdílet stránku s přáteli

wave wave wave wave wave