flask template form
Овај водич објашњава шта су предложак тиквице, образац, поглед, одговор и преусмеравање са практичним примерима:
Генерално, Темплатинг се користи у програмирању за поновну употребу дела текста са различитим подацима. Што се тиче веб развоја, дизајнери користе предлошке за приказ података у облику који је читљив и привлачан за читаоце.
Дизајн предлошка углавном укључује употребу језика због сложености изазване људском интеракцијом.
=> Овде погледајте водич за почетнике у тиквицама
Шта ћете научити:
Увод
Фласк користи механизам за шаблонирање под називом Јиња2, који приказује понашање апликације на основу корисничког нивоа интеракције. Јиња шаблон користи променљиве, изразе и ознаке.
Променљиве и изрази се замењују вредностима током извршавања пре приказивања странице у прегледачу. Јиња ознаке помажу у писању логике и контролишу изјаве у предлошку Фласк.
Фласк Виев
Појам Фласк виев изведен је из распрострањеног узорка дизајна веб апликација названог Модел-Виев-Цонтроллер. Поглед је један од три међусобно повезана елемента у овој парадигми, где се бави апликативном логиком. Поглед брине о презентацији информација Кориснику.
У нашем претходном упутству дизајнирали смо Виев подкласирањем класе БасеВиев Фласк-Аппбуилдер-а. У следећем делу овог водича проширићемо наш последњи пример и представити начине на које се Прикази могу прилагодити.
Предложак боце
Почнимо и напишите свој први образац. Креирајте датотеку под називом хелло.хтмл у директоријуму шаблона.
У ту датотеку напишите следећи код и сачувајте га.
Hello World!, from Software Testing Help.
{% for item in greetings %} {% if 'Morning' in item %} {{item}}
{% else %} {{item}}
{% endif %} {% endfor %}
Предложак за петљу
У горњем шаблону Фласк користили смо петљу фор за итерацију по ставкама на листи. У нашем контролеру или обрађивачу предложак смо проследили листу са вредностима поздрава. Унутар шаблона приступамо свакој ставци користећи синтаксу {{итем}}.
Предложак ако је блок
Поред тога, забележите употребу изјаве иф. Овде тестирамо ставку за Јутро и стављамо је подебљано и у курзиву.
Кренимо сада да бисмо сазнали више о концептима обрасца за бочице.
Обрасци боца
Један од најважнијих аспеката предложака је узимање података од корисника и писање позадинске логике на основу тог уноса. Створимо образац.
За приказ нашег обрасца користимо Фласк-Аппбуилдер СимплеФормВиев. Међутим, хајде да прво направимо образац. Поред креирања обрасца, треба да користимо команду фаб цреате-админ наредбу за стварање администратора.
Због тога користите наредбу пре покретања развојног сервера како би накнадно створени погледи и обрасци могли бити потврђени пријављеним корисником. Пријављујемо се са корисником администратора и стално потврђујемо да су створени погледи видљиви у менију као што је приказано на сликама екрана.
Направи администратора
Користите наредбу испод да бисте креирали администратора.
фласк фаб цреате-админ
Пријавите се са администраторским подацима
- Кликните на Логин након што одете на хттп: // лоцалхост: 8080.

- Пријавите се помоћу администраторских акредитива креираних у претходном одељку.

- Кликните на категорију Моји обрасци да бисте приступили својим приказима.

Белешка: Последњи корак моћи ћете да извршите тек након додавања приказа у подразумевани мени приказан на траци за навигацију.
Кренимо и створимо неке погледе засноване на форми.
Креирајте датотеку која се зове формс.пи у директоријуму апликације и у њу напишите следећи код.
from wtforms import Form, StringField from wtforms.validators import DataRequired from flask_appbuilder.fieldwidgets import BS3TextFieldWidget from flask_appbuilder.forms import DynamicForm class GreetingsForm(DynamicForm): greeting1 = StringField(('Morning'), description = ('Your morning Greeting'), validators = (DataRequired()), widget = BS3TextFieldWidget()) greeting2 = StringField(('Afternoon'), description = ('Your Afternoon Greeting'), validators = (DataRequired()), widget = BS3TextFieldWidget()) greeting3 = StringField(('Evening'), description = ('Your Evening Greeting'), widget = BS3TextFieldWidget()) greeting4 = StringField(('Night'), description = ('Your Night Greeting'), widget = BS3TextFieldWidget())
Направили смо образац заснован на ДинамицФорм-у компаније Фласк-Аппбуилдер. Постоје четири текстуална поља. Шаљемо пример поздрава. Од четири поља, два су обавезна, а два необавезна, јер смо за прва два поздрава споменули вредности за валидаторе.
Хајде сада да направимо приказ за овај образац. Напишите следеће редове кода у датотеку виевс.пи.
from flask import render_template, flash from flask_appbuilder import SimpleFormView from app.forms import GreetingsForm class GreetingsView(SimpleFormView): form = GreetingsForm form_title = 'This is a Greetings form' message = 'Your Greetings are submitted' def form_get(self, form): form.greeting1.data = 'Your Morning Greeting' form.greeting2.data = 'Your Afternoon Greeting' form.greeting3.data = 'Your Evening Greeting' form.greeting4.data = 'Your Night Greeting' def form_post(self, form): flash(self.message, 'info') greetings = ( form.greeting1.data, form.greeting2.data, form.greeting3.data, form.greeting4.data, ) session('greetings')=greetings return redirect(url_for('HelloWorld.hello_greetings2'))
У нашем горенаведеном погледу, имамо две методе под називом форм_гет и форм_пост за попуњавање подразумеваних вредности у пољима образаца и читање унетих вредности након што образац буде послат из прегледача.
ГреетингсВиев приказује образац, као што је приказано на доњој слици.
Такође користимо објекат сесије Фласк за чување вредности поља у форм_пост тако да можемо да им приступимо у одговарајућем новом приказу који ћемо написати.
Изменимо класу ХеллоВорлд и додајте још један метод за приказ поздрава. Назваћемо га хелло_греетингс2.
class HelloWorld(BaseView): ## other methods @expose('/greetings2') def hello_greetings2(self): greetings = session('greetings') return render_template('hello.html', greetings=greetings)
У овом приказу читамо вредности из објекта сесије и помоћу шаблона за приказивање Фласк приказујемо те вредности у корисничком ХТМЛ-у. Приметите да је хелло_греетингс2 алтернативни начин постизања исте функционалности сличне хелло_греетингс.
Једина разлика је у томе што помоћу хелло_греетингс2 приказујемо вредности које је унео корисник, а у хелло_греетингс нисмо узимали никакве уносе од корисника и чврсто их кодирали током писања приказа мапираног на одговарајућу руту.
Одговор чутуре
Ретко је да ћете у коду наћи експлицитну употребу одговора Фласк. Класа одговора у тиквици само је подкласа класе одговора из Веркзуегове класе одговора, која заузврат поткласира своју класу РеспонсеБасе.
Објекат Фласк Респонсе интерно формира Фласк кад год позовемо наредбу ретурн или методу као што је рендер_темплате.
Даље, можемо прилагодити код одговора и врсту садржаја ако је то потребно као део изјаве за повратак у нашим погледима, као што је приказано у измењеном приказу ХеллоВорлд испод.
class HelloWorld(BaseView): ## other methods @expose('/greetings2') def hello_greetings2(self): greetings = session('greetings') return render_template('hello.json', greetings=greetings), 201, {'Content-Type' : 'application/json'
Директна употреба класе Фласк’с Респонсе може бити покривена у случају употребе када стримујемо садржај уместо да вратимо цео садржај одједном због ограничења величине датотеке и пропусног опсега мреже.
Испод смо приказали један пример стримовања садржаја из великог ЦСВ-а.
from flask import Response @app.route('https://cdn.softwaretestinghelp.com/largefile.csv') def send_large_csv(): '''A controller to stream the content of a large csv file''' def gen(): for row in iter_all_rows(): yield ','.join(row) + '
' return Response(gen(), mimetype='text/csv')
Преусмеравање боце
Није увек могуће да апликација унапред дефинише одговор на основу различитих захтева клијента.
Преусмеравање Фласк користимо у сценаријима где је могуће послужити садржај који могу испунити други прикази или локације као одговор на захтев. Користимо Фласк Редирецт заједно са прекидом са стандардним ХТТП повратним кодовима.
На пример, у доњем коду користили смо Преусмеравање са ХТТП кодом 301 и прекидали са 401.
from flask import Flask, redirect, url_for, request, abort app = Flask(__name__) @app.route('/') def index(): return render_template('log_in.html') # Log In template @app.route('/login',methods = ('POST', 'GET')) def login(): if request.method == 'POST': if request.form('username') == 'admin' : # if user is admin return redirect(url_for('success')), 301 else: abort(401) # stop processing else: return redirect(url_for('index')) # redirect to another view
Даље, проверите у ГреетингсВиев где смо користили Фласк редирецт и урл_фор за интерно преусмеравање захтева у други приказ чувањем вредности поздрава у објекту сесије. Преусмеравање тиквице увек враћа објект одговора, са подразумеваним или датим статусним кодом на друго место у апликацији.
Дебугтоолбар боце
Фласков интерактивни програм за отклањање грешака већ смо увели у нашем последњем упутству. У овом упутству ћемо предузети још један корак да бисмо олакшали отклањање грешака у апликацији Фласк. Једном инсталирана, трака са алаткама за отклањање грешака Фласк приказује се као прекривач преко апликације Фласк.
Инсталирајте Фласк Дебуг тоолбар.
pip install flask-debugtoolbar
Да бисте активирали алатку за отклањање грешака, отворите датотеку __инит__.пи у нашем пројекту и измените код додавањем следећих редова кода.
from flask_debugtoolbar import DebugToolbarExtension app.debug = True toolbar = DebugToolbarExtension(app)
Имајте на уму да је трака са алаткама за отклањање грешака Фласк омогућена само у режиму отклањања грешака. Једном када омогућите, када поново учитате апликацију, приметићете две ствари.
# 1) Трака са алаткама за отклањање грешака појављује се на десној страни прегледача. Кликните и проширите је да бисте видели разне функције које пружа трака са алаткама.

#два) Кад год се нови захтев ПОСТ пошаље апликацији, пресреће га трака са алаткама како бисмо могли да прегледамо променљиве и остале параметре који се односе на отклањање грешака у апликацији.

Ово подразумевано пресретање може се онемогућити у доњој конфигурацији.
app.config('DEBUG_TB_INTERCEPT_REDIRECTS') = False

Напишимо сада неколико тестова како бисмо тестирали наше погледе на додатне функције које смо увели у примерак апликације.
најбоља апликација за преузимање мп3 песама
Пре него што наставите са тестирањем, онемогућите отклањање грешака као што је приказано доле у __инит__.пи. Можете и да коментаришете доњи ред.
app.debug = False
Тестирање приказа апликације у тиквици
Морамо да организујемо код за тестирање како бисмо га учинили лакшим за управљање. Направите датотеку која се зове цонфтест.пи у основном директоријуму и преместите доленаведене редове из тест_хелло.пи у ову датотеку.
from app import appbuilder import pytest @pytest.fixture def client(): ''' A pytest fixture for test client ''' appbuilder.app.config('TESTING') = True with appbuilder.app.test_client() as client: yield client
питест уређаји се учитавају по питест-у током извођења. Ова опрема је доступна и дели се са свим тестовима. Дефинисање цонфтест.пи у коренској путањи било ког пројекта сматра се најбољом праксом, јер питест може препознати све модуле у пројекту без навођења експлицитног ПИТХОНПАТХ-а.
Додајте још један тест за датотеку тест_хелло. Пример теста дат је у наставку. Позивамо методу клијентовог објекта и утврђујемо очекивану вредност у подацима одговора ускладиштеним у респ.дата.
Слично томе, можете написати још тестова који указују на различите погледе. У следећим туторијалима написаћемо још тестова.
def test_greetings(client): ''' A test method to test view hello_greetings''' resp = client.get('/hello/greetings', follow_redirects=True) assert b'Good Morning' in resp.data
Покрените тестове помоћу наредбе у наставку из основног директоријума пројекта.
pytest -v
Пробно покретање даје резултате теста у конзоли, као што је приказано доле:

Још увек нема кварова. Направимо још један тест, као што је поменуто у наставку.
def test_greetings2(client): ''' A test method to test view hello_greetings2 ''' resp = client.get('/hello/greetings2', follow_redirects=True) assert b'Good Morning' in resp.data
Овај тест неће успети јер нисмо дефинисали ниједан атрибут поруке у класи ХеллоВорлд у датотеци виевс.пи.
Једном када покренете тестове помоћу питест -в, тада ће се на конзоли поново приказати резултати слични доле приказаној слици.

Одељак у наставку објашњава кораке које треба да обавимо током извођења тестова на ЦИ / ЦД платформи. За исти пројекат користимо Гит Ацтион.
ЦИ / ЦД са Гит акцијама
Сада чувамо све промене у датотекама и креирамо урезивање давањем поруке за овај водич. Након урезивања на локалном спремишту, повлачимо промене са удаљеног исходишта помоћу ознаке –ребасе да видимо да ли постоје сукоби са новим променама на даљинском. Пребазирамо се како би историја била доследна.
Користите доњу наредбу да повучете и обједините промене из удаљеног извора. Међутим, извршите промене пре повлачења промена са даљинског управљача.
git pull origin master --rebase
Сада погледајте локалну главну грану и стопите се са границом туториал-2. Када је обједињавање успешно, објавите те промене на матичној страни порекла. Ова акција ће позвати израде на циљним платформама. Тестирамо овај код на Питхон3.7 и Питхон 3.8 на Убунту најновије.
Закључак
У овом упутству видели смо како предлошци раде у оквиру Фласк. Дали смо кораке стварања и приказивања шаблона тиквица са кориснички дефинисаним вредностима помоћу променљивих и израза.
Такође смо видели примере унапред дефинисаног приказа БасеВиев додатка Фласк Аппбуилдер. Програмери Фласк-а могу лако подкласирати овај приказ да би креирали прилагођене погледе.
До сада обрађени концепти помажу читаоцима да брзо креирају статичне и динамичке веб локације помоћу тиквице без позадинске базе података. Објаснићемо како читати и писати податке из и у базе података помоћу МоделВиев-а у следећем упутству када прођемо кроз концепт коришћења база података са Фласком.
=> Прочитајте серију обука Еаси Фласк
Препоручено читање
- Водич за Питхон боцу - Увод у боцу за почетнике
- Узорци дизајна тиквица и најбоље праксе за веб апликације
- Водич за Фласк АПИ са примером | Проширење тиквице помоћу АПИ-ја
- Библиотека стандардних шаблона (СТЛ): Кратки увод
- Шта је тестни сценарио: Предложак тестног сценарија са примерима
- Узорак предлошка тест примера са примерима тест примера (преузми)
- Пример узорка за извештај о испитивању прихватања са примерима
- Предлошци на Ц ++ са примерима