В рамките на модела или парадигмата на развитие, която предлага КолбаЕдин от най -важните моменти е управлението на изгледите, тъй като те ни позволяват да дефинираме начина, по който потребителят ще взаимодейства с нашата страница или приложение.
Най -простият начин за работа с изглед е чрез дефиниране на операцията директно в дефиницията на нейния път, но това не винаги е полезно или адекватно, особено ако изграждаме големи приложения.
ИзискванияНуждаем се от функционална инсталация на Колба и от съображения за съвместимост се нуждаем от по -висока версия от тази 0.7 тъй като един от компонентите, с които ще работим, не беше включен в рамката чак след посочената версия. Трябва също да стартираме приложение или да имаме някакво приложение Колба за да можем да включим примерите в раздела изгледи и по този начин да можем да ги изпълним чрез браузър.
Изгледи, базирани на роли
Това е един от най -простите начини за изграждане на взаимодействие с потребителя, трябва само да напишем функция и да я украсим с маршрута, което прави, когато рутерът Колба получава заявката, тя проверява дали има функция, чакаща за посочения маршрут, и след това, ако я получи, тя я изпълнява.
Обикновено този вид изгледи изисква поне метода ПОЛУЧАВАЙТЕ на HTTPВъпреки това, като добра практика и от съображения за сигурност, ако искаме да добавим стойности към нашата структура за устойчивост на данните, можем също да използваме метода POST.
Създаване на изглед с GET
Ще създадем изглед, използвайки метода ПОЛУЧАВАЙТЕЗа да направите това, просто трябва да определите името му във функция и да му присвоите маршрут, след което вътре във функцията ще поставим нашето съдържание, нека видим следния код, за да се илюстрираме.
@ app.route ('/ view-get') def view (): value = request.args.get ('content', 'sample') return 'Това е изглед, използващ GET и получава стойност:% s'% стойностСлед това в кода виждаме как използваме декоратор За да посочим кой маршрут чакаме, дефинираме съответната функция и в рамките на това се обаждаме с заявка на доводите, получени от ПОЛУЧАВАЙТЕ, в този случай търсим аргумент, наречен съдържание, и го присвояваме на променлива, наречена стойност, ако този аргумент не съществува, „извадка“ ще бъде поставена като стойност по подразбиране и накрая връщаме текст и предаваме съдържанието на стойност .
Ако изпълним нашия пример в браузъра, ще получим следното:
Създаване на изглед с POST
Какво се случва, ако това, което искаме, е да получим чувствителни данни и не искаме да ги предаваме чрез параметри в URL адреса, защото в тези случаи трябва да използваме метода POST, тъй като той изпраща данните, скрити от погледа на потребителя, разбира се там са други мерки за сигурност, които трябва да използваме, но в момента не се нуждаем от тях за този случай.
За да създадете изглед, който получава данни чрез POST, трябва само да посочите очаквания метод в декоратор който получава желания от нас маршрут, за това използваме допълнителния параметър методи.
Тогава в рамките на нашата функция можем да използваме заявка за да получим стойностите обаче, за разлика от предишния пример, вместо да изискваме аргументите, трябва да посочим, че получаваме стойностите от формуляр. Нека да разгледаме кода за това, което току -що обяснихме.
@ app.route ('/ post-view', methods = ['POST',]) def post_view (): value = request.form.get ('content', 'sample') return 'Това е изглед, използващ POST и получава стойност:% s '% стойностМожем да забележим, че това е почти същият код, както по -горе, с изключение на вече споменатите разлики, но нека видим какво ще се случи, ако стартираме нашия код директно в браузъра си:
Увеличете
Как само да посочим, че можем да получим метода POST, при достъп чрез ПОЛУЧАВАЙТЕ нашето приложение отхвърля записа и затова ни изпраща код 405 Методът не е разрешен, така че без стойности, идващи от POST заявка, този изглед няма да показва никаква информация.
Комбиниране на GET и POST в изгледа
Тъй като боравенето с различни изгледи за всеки метод не винаги е това, което искаме, можем да използваме и двата метода в един и същ изглед, това е много полезно, особено когато искаме да обработваме формуляри, например, с метода ПОЛУЧАВАЙТЕ показваме формата и с POST обработваме пратката на същата.
За да използваме този режим, трябва само да добавим ПОЛУЧАВАЙТЕ в списъка, към който преминахме методи при определяне на декоратор с пътя, нека видим кода по -долу:
@ app.route ('/ view', methods = ['GET', 'POST',]) def view (): if request.method == "GET": return '' 'Show Views' '' else: value = request.form.get ('content', 'sample') return 'Това е изглед, използващ GET и POST, който получава стойност:% s'% valueПри извикване на маршрута от браузъра с метод ПОЛУЧАВАЙТЕ получаваме следното:
След това, като напишете нещо в текстовото поле и натиснете Enter, изпращаме формуляра по същия път, но с метода POST, което ни дава резултат като следния:
Тук след това написахме истински функционален изглед, който ни позволява да използваме и да се възползваме от двата метода на HTTP да извършваме нашите операции.
Изгледи, базирани на класа
Тъй като създаването на функции, въпреки че служат на нашите цели, понякога е много тромаво и се поддава на повече код, отколкото е необходимо, Колба реализира обажданията изгледи, базирани на класа, концепция, от която е заимствал Джанго, и това ни позволява да напишем класове, с които ще генерираме изгледи, тези класове могат да бъдат общи, с които можем да наследяваме, ако желаем.
За да използваме този тип компоненти, първо трябва да импортираме от flask.views, където класа Изглед Това е общ клас, който ще ни позволи да добавим основните функционалности, за да можем да изпращаме маршрути и да дефинираме методи.
Създаване на изглед, базиран на класа
В този пример ще създадем същия изглед, който направихме в предишния пример, но от подход, базиран на класа, по този начин можем да установим разликите между двете форми, не забравяйте, че въпреки че не се появява в примерния код, ние сме направили внос от класа View.
Нека да разгледаме кода за нашия пример:
class 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 'Това е изглед, използващ GET и POST, който получава стойност:% s'% valorapp.add_url_rule ('/ view-class', view_func = VistaClase.as_view ('view-class'))Това е най -основната форма на този стил на възгледи, но виждаме, че вече не зависим от декоратор, това, което правим, е да наричаме метода dispatch_request и го подминахме себе си така че да получи същия обект с това можем да определим заявките, които получаваме, след това посочваме, че ще получим и двата метода и накрая дефинираме поведението си, резултатът за всеки браузър ще бъде същият като предишния, ще имаме поле и когато го изпратим, ще получим посочения отговор.
Но какво, ако искаме да напишем много по -чист код? За това можем да използваме класа MethodView на Колба което ни позволява да създаваме методи в рамките на класа, за да дефинираме методите HTTP по по -прост начин.
Нека да видим следния пример, където пренаписваме предишния код, за да използваме този режим:
class ViewClass (MethodView): def get (self): return '' '' Show Views '' 'def post (self): value = request.form.get (' content ',' sample ') return' Това е изглед, използващ GET и POST, който получава стойност:% s '% valorapp.add_url_rule ('/ view-class ', view_func = ViewClass.as_view (' view-class '))Както виждаме, ние се отказахме от дефиницията на методите, които ще получим, освен това вече не използваме метода изпращане, ние просто дефинираме какво ще правим в метода POST, и какво ще правим в GET, като по този начин ще дадем много повече очистване на зрението ни.
Все още има дебат, че ако е по -добре да възгледи, базирани на ролите вълни базирано на класа, но наистина няма един по -добър от другия, има просто два начина на работа, препоръката е, че ако изгледът е много прост, можем да го направим с функции и ако вече има по -пълна логика, го правим с класове .
С това завършихме този урок, в който изградихме важна база, знаейки как работят изгледите и как можем да работим с различните им методи HTTP, тъй като това е основата, която можем да използваме за създаване на по -напреднали приложения.