BluePrint: как создать успешный стратегический план разработки и не завалить проект
Ответ предельно прост:
Процесс разработки приложения подобен строительству дома. Среди нас вряд ли найдется тот, кто захочет приступить к строительству, не имея четкого плана. Хозяин будущего дома может уточнить, что в доме должно быть 4 этажа, панорамные окна и черепичная крыша. Но для того, чтобы строительная бригада приступила к работе, этих сведений явно недостаточно. Помимо этих параметров есть еще тысяча и одна мелочь, которая должна быть учтена, чтобы подрядчик мог рассчитать бюджет, обозначить этапы строительства и предоставить план работ. В свою очередь и заказчик извлечет из наличия плана неоспоримые выгоды, поскольку он может четко изложить свои требования и понимает, за что платит.
Каждому в конце дня нужен план.
Вы спросите, нужен ли план этот для более ясного понимания общей картины? Именно! И вот что конкретно заключает в себе BluePrint:
Теперь вам стало понятней, что из себя представляет BluePrint, но все же не до конца ясно, какие конкретные выгоды он в себе несет? Вот список наиболее ключевых для вас:
Мы готовы приложить максимум усилий, чтобы сделать BluePrint как можно более наглядным для вас. Если вы хотите ознакомиться с примерами и получить больше подробностей о том, как его можно оптимально применить к вашей идее, свяжитесь с нами прямо сейчас!
Blueprint что это такое
Смотрим новый клип FKA Twigs — Measure Of A Man
Ralph Lauren и Фонд «Обнаженные сердца» запускают благотворительный проект
Самые эффектные образы (и победители) церемонии The Fashion Awards 2021
Смотрим новый клип FKA Twigs — Measure Of A Man
Ralph Lauren и Фонд «Обнаженные сердца» запускают благотворительный проект
Самые эффектные образы (и победители) церемонии The Fashion Awards 2021
1. Фильм Litkovskaya Лили Литковской | 2. ПЕРВЫЙ ПОКАЗ PRADA РАФА СИМОНСА И МИУЧЧИ ПРАДЫ | 3. Главные тенденции сезона весна–лето 2021 | 4. It-вещи молодых марок | 5. Важный комбинезон Marine Serre | 6. ПЕРВАЯ КОЛЛЕКЦИЯ МЭТТЬЮ УИЛЬЯМСА ДЛЯ GIVENCHY
Независимое издание о моде, красоте и современной культуре
Мы используем файлы cookies чтобы сайт работал лучше и быстрее. Надеемся, вы не против.
К этому моменту мы с вами создали проект (WSGI-приложение), состоящий из нескольких файлов и реализующий некоторый типовой функционал: отображение статей, авторизацию и регистрацию пользователей. Но даже в этом простом приложении становится непросто ориентироваться, вносить изменения, не говоря уже о тестировании отдельных его компонент, например, авторизации пользователей. Наверное, главной проблемой разрастающегося проекта, является все большая мешанина программного кода, усложнение его понимания, редактирования и переноса части функционала в какой-либо другой подобный проект.
Так вот, все эти слова я, конечно, говорю не просто так. Фреймворк Flask позволяет разделять большой, сложный проект на набор независимых модулей. Например, на сайте могут быть модули авторизации, админ-панели, подсчета числа просмотров страниц и так далее. Причем, каждый модуль может иметь свои шаблоны, стили оформления, наборы изображений. Все это хранится в отдельном подкаталоге, что делает фрагмент приложения совершенно независимым. И при необходимости, этот каталог можно просто скопировать в другой проект и подключить к другому сайту.
Такие модули в терминологии Flask называются Blueprint (эскизами) и о них пойдет речь на этом занятии. Чтобы не копаться в уже написанном коде и не усложнять занятие, я покажу пример реализации Blueprint на примере создания простейшей админ-панели.
Структура подкаталога admin
Вся наша админ-панель будет реализована в отдельном подкаталоге admin со следующей структурой:
В корне этого каталога будет лежать файл admin.py, в котором и реализуем админ-панель с использованием Blueprint. В подкаталоге templates/admin будут располагаться файлы шаблонов, а в static – файлы оформления, js, изображений и другие статические данные, подключаемые к HTML-страницам в панели администратора. Таким образом, мы строго разделяем данные, относящиеся к нашему модулю admin от всех остальных файлов приложения. В дальнейшем, при необходимости, можно будет просто скопировать этот подкаталог в другой проект и в нем реализовать похожую админ-панель.
Здесь может возникнуть вопрос: зачем в подкаталоге templates создавать еще один каталог admin? Фактически, здесь используется Django’вский подход, когда шаблоны в каждом модуле помещаются в дополнительный подкаталог с тем же именем. Это необходимо, т.к. при компиляции проекта все шаблоны собираются в одну кучу и может возникнуть конфликт имен, когда в разных модулях будут файлы с одинаковыми именами. Чтобы этого избежать, как раз и создается дополнительный подкаталог. В этом случае в момент выполнения, шаблоны будут отделяться от других этим подкаталогом.
Создание и регистрация Blueprint
Итак, теперь у нас все готово, чтобы создать Blueprint в модуле admin.py. В начале выполним импорт класса Blueprint:
и ниже создадим экземпляр этого класса:
После создания эскиза его нужно зарегистрировать в основном приложении. Перейдем в файл flsite.py и выполним импорт переменной admin:
Обратите внимание, мы импортируем именно переменную, а не класс или функцию. Далее, ниже выполним непосредственно регистрацию Blueprint:
Здесь admin – ссылка на созданный Blueprint; url_prefix – префикс для всех URL модуля admin. Это необязательный параметр. Без него все URL внутри Blueprint будут записываться непосредственно после домена сайта. Но это не лучшая практика, так как, подключая несколько таких модулей, можно опять же столкнуться с проблемой дублирования URL. Поэтому лучше использовать префик, по которому они будут четко разделяться.
Итак, мы создали Blueprint и зарегистрировали его в приложении. Если теперь перейти по URL:
то получим ошибку 404 – страница не найдена, так как внутри эскиза не создано ни одного представления. Давайте его добавим.
Маршрутизация в Blueprint
Перейдем в модуль admin.py и пропишем декоратор route:
Смотрите, мы вызываем route для admin, а не app, как это делали в основном приложении. Тем самым указываем, что корневая (главная) страница – это страница Blueprint, а не приложения app. Причем, адрес этого URL определяется по правилу:
и в нашем случае будет выглядеть так:
то есть, это главная страница админ-панели, а не сайта. И благодаря префиксу, указанному при регистрации этого эскиза, мы можем не беспокоиться о дублировании URL в нашем модуле.
Авторизация в админ-панели
Давайте теперь добавим возможность авторизации в нашей тестовой панели администратора. Для этого пропишем еще одну функцию представления login, следующим образом:
Здесь все достаточно просто и очевидно. Сначала проверяем, что пришли данные по POST-запросу, затем, проверяем правильность логина и пароля и при истинности условий, выполняем авторизацию с помощью функции login_admin, которую пропишем чуть позже. Далее, делается перенаправление на главную страницу админ-панели, а иначе – формируется мгновенное сообщение «Неверная пара логин/пароль». В конце возврашается шаблон ‘admin/login.html’ с заголовком ‘Админ-панель’.
Обратите внимание, как здесь записан параметр в функции
Перед index указана точка. Эта точка означает, что функцию-представления index следует брать для текущего Blueprint, а не глобальную из приложения. Если убрать точку, то будет возвращен URL-адрес главной страницы сайта, а не панели администратора. Как вариант, функцию url_for можно еще вызвать и так:
Здесь admin – это имя Blueprint, а не название файла admin.py. Например, если изменить имя эскиза на bp, то придется уже прописывать:
Но, в данном случае, это избыточная запись и, кроме того, идет жесткая привязка к имени Blueprint. Поэтому, я в дальнейшем буду писать просто точку.
Итак, возвращаясь к обработчику login, добавим функцию login_admin в модуль admin.py:
Мы здесь просто в сессии создаем и сохраняем запись ‘admin_logged’ со значением 1. И в дальнейшем будем полагать, если она существует, то пользователь зашел в админ-панель.
Некоторые из вас могут задаться вопросом: почему бы нам здесь не использовать рассмотренный ранее модуль Flask-Login? Дело в том, что нельзя создать еще один его экземпляр в рамках одного приложения. А Blueprint – это лишь дополнение, расширение, но не самостоятельная программа. Конечно, мы могли бы передать ссылку на Flask-Login в наш модуль admin и как то его использовать, но тогда теряется концепция независимости и модульности Blueprint. И наша реализация будет ничем не лучше обычного дополнительного вспомогательного класса, записанного в отдельном файле проекта. Поэтому, я авторизацию сделал через сессии.
Давайте здесь же рядом объявим еще две вспомогательные функции:
Первая проверяет: авторизован ли администратор, а вторая – удаляет из сессии запись об авторизации и будет использоваться при выходе из админ-панели. И сразу пропишем функцию представления logout:
Шаблоны для страницы админ-панели и авторизации
Теперь давайте добавим первые шаблоны для нашей панели администратора. Я специально для демонстрации сделаю другое оформление и пропишу новый базовый шаблон. В каталоге templates/admin добавлю файл base_admin.html, который будет иметь следующий вид:
Здесь все, опять же, достаточно очевидно. Обратите внимание, для обращения к каталогу static первый параметр функции
записан с точкой вначале. Эта точка будет указывать брать каталог static из подкаталога admin, то есть, сформируется следующий путь:
Далее, в шаблоне идет отображение меню, если оно передается в шаблон и записан именованный блок content для добавления информации в дочерних шаблонах. И первый такой шаблон будет login.html со следующим содержимым:
Мы здесь отображаем форму авторизации, где пользователь вводит логин/пароль.
А шаблон index.html будет пока пустой:
Далее, нам нужно прописать стили оформления. Они представлены в файле
(подробнее см. в файле проекта).
И перед первым пробным тестированием, изменим обработчик главной страницы админ-панели:
Вначале идет проверка: если пользователь не авторизован, то он перенаправляется на страницу авторизации. Иначе, будет отображена панель администратора. Здесь в шаблон ‘admin/index.html’ передаются два параметра: menu и title. И для menu пропишем следующую коллекцию:
Все, теперь при запуске, мы увидим окно авторизации и, вводя admin/12345, перейдем в панель администратора.
Видео по теме
Flask #1: Что это такое? Простое WSGI-приложение
Flask #2: Использование шаблонов страниц сайта
Flask #3: Контекст приложения и контекст запроса
Flask #4: Функция url_for и переменные URL-адреса
Flask #5: Подключение внешних ресурсов и работа с формами
Flask #7: Декоратор errorhandler, функции redirect и abort
Flask #8: Создание БД, установление и разрыв соединения при запросах
Flask #9: Добавление и отображение статей из БД
Flask #10: Способ представления полноценных HTML-страниц на сервере
Flask #11: Формирование ответа сервера, декораторы перехвата запроса
Flask #12: Порядок работы с cookies (куками)
Flask #13: Порядок работы с сессиями (session)
Flask #14: Регистрация пользователей и шифрование паролей
Flask #15: Авторизация пользователей на сайте через Flask-Login
Flask #16: Улучшение процесса авторизации (Flask-Login)
Flask #17: Загрузка файлов на сервер и сохранение в БД
Flask #18: Применение WTForms для работы с формами сайта
Flask #19: Обработка ошибок во Flask-WTF
Flask #23: Операции с таблицами через Flask-SQLAlchemy
© 2021 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта
Blueprints и C++ в Unreal Engine: плюсы и минусы
Epic Games последовательно развивает систему визуального программирования Blueprints в Unreal Engine. Она продвигается как полноценная рабочая среда, в которой любой новичок может освоиться и собрать свою игру. Но действительно ли «блюпринты» ни в чём не уступают классическому программированию?
Александр Балакшин, программист AAA-игр, внёсший значительный вклад в разработку сезонных обновлений для Tom Clancy’s Rainbow Six Siege в роли старшего инженера-разработчика и лида геймплейной команды, разбирает плюсы и минусы Blueprints и объясняет её отличия от «чистого» C++.
Блюпринты выигрывают у C++ на начальных этапах разработки, особенно если код игры пишется с нуля. Они не требуют установки дополнительной среды, к тому же предлагают быстрые итерации. А блочный синтаксис блюпринтов понятен не только программистам, но и тем, кто знаком с аналогичными системами в программах для создания контента — например, художникам.
Но если рассматривать разработку игры в целом, в долгосрочной перспективе, то классический подход к программированию показывает свои преимущества. Даже сами Epic Games заостряют внимание на том, что блюпринты — это не код, а данные, поэтому и относиться к ним нужно соответственно. Например, некоторая общая логика всё равно должна выноситься в код.
По этой же причине блюпринты невозможно толком «мёрджить», то есть соединять результаты разработки. Поэтому их приходится отдельно блокировать, чтобы не создавать конфликтов и не терять проделанную работу. С классическим же кодом могут работать даже несколько человек одновременно, но результат их работы в одном файле обычно всё равно очень просто совместить.
Наконец, блюпринты бьют по производительности, так как компилируются в байт-код, который работает на встроенной в движок виртуальной машине. Да, их можно нативизировать, — то есть преобразовать Blueprint-логику в файлы C++, но даже разработчики из Epic рекомендуют этим не злоупотреблять.
Да и с точки зрения GOMS-анализа нажатие на клавишу клавиатуры оказывается быстрее, чем перемещение мышки. Это ни в коем случае не отменяет удобство визуального редактора, но, по моему опыту, с автодополнениями и прочими синтаксическими функциями современных IDE писать код удобнее и быстрее, чем создавать граф в блюпринтах. Хотя полезные сочетания клавиш и шорткаты в Unreal Engine тоже облегчают жизнь.
Я считаю, что если программисту нужно работать с Tick-функциями, или он использует какую-то сложную математику и пространственные запросы (например, LineTrace), всё это лучше вынести в С++. Отчасти из-за всех перечисленных особенностей Epic Games раздумывают над созданием отдельного скриптового языка для реализации игровой логики в Unreal Engine.
Тем не менее, блюпринты — достаточно мощный инструмент, который в Unreal Engine 4 используется не только для построения игровой логики, но и для работы с анимацией и системой эффектов Niagara. Поэтому каждая студия должна сама найти подходящий баланс между Blueprints и С++. Например, технические дизайнеры Riot Games использовали блюпринты в Valorant только для создания способностей игроков.
Сами Epic Games рекомендуют использовать блюпринты, когда в проекте очень много ссылок на контент, а его логика работает в первую очередь на визуальную составляющую. Также они пригодятся в создании прототипов, прямолинейной или редко используемой логики, которая не является частью основной архитектуры. Всё, что не получит преимуществ в С++ с точки зрения производительности, масштабируемости и стабильности, тоже может быть создано в Blueprints.
Ну а с С++ лучше работать, если функционал используется более чем в одном месте и включает в себя сложные элементы — например, сохранение игр или сетевой код. Если проект в дальнейшем будет расширяться, то его тоже лучше создавать с помощью классического программирования — оно помогает тщательно поддерживать логику и стабильность кода.
Словом, с любыми важными переменными, перечислениями и типами данных C++ работает лучше. Но и работа в Blueprints не отменяет классический подход, а только органично дополняет его в необходимых случаях. Так что разработчикам от визуального программирования никуда не деться.
Что такое Blueprint в PHP?
Оценить 2 комментария
What is the construct used to define the blueprint of an object called?
1. сущ.
1) синька, (свето)копия; фотография в голубых тонах
2) изготовление светокопий
3) (детальный) план, программа, проект; образец, шаблон
Синонимы:
plan, draft, pattern, scheme
2. гл.
1) делать светокопию; копировать чертёж
2) проектировать, намечать, планировать
В разговорной речи инженеров часто используется как чертёж или проект. Слово произошло также как наше «синька», обусловлено господствующей в свое время технологией копирования чертежей цианотипиия, дающей копию в синих тонах.
Так англофоны называют чертежи.
Еще есть CSS-фреймворк с таким названием.
Я бы так перевёл весь вопрос (дословно):
«Как имеют обыкновение называть конструкцию, описывающую структуру(архитектуру) объекта»









































