flask design patterns
Този урок обяснява някои от често срещаните дизайнерски модели на Flask и най-добрите практики, които да се следват при проектирането на уеб приложения с примери:
Проектирането на приложения е съществен аспект на разработването на софтуер. Непланираният дизайн на приложения води до непреодолим технически дълг. Следователно, когато искаме да мащабираме нашето приложение, тогава е добре да изпробваме изпитани от времето дизайнерски модели.
Flask общността има много такива примери, които могат да ви вдъхновят и да повлияят на вашите дизайнерски решения, когато искате да изпробвате няколко модела за вашето приложение. Flask е толкова непринуден и гъвкав, че бихте искали да комбинирате концепции от съществуващите модели и да създадете нов.
=> Посетете тук, за да научите колбата от нулата
Какво ще научите:
Модели на колби
Например, Ще намерите много примери от шаблона на MVC до приложенията за една страница до шаблона на SAAS. Вие назовавате дизайнерската парадигма и тя вече е изпробвана от някой в общността и е свободно достъпна за вас, за да опитате ръцете си.
По-долу са изброени няколко хранилища, които си заслужава да бъдат разгледани.
Flusk
Flusk е пример, който можете да използвате за създаване на големи Flask приложения, които включват SQLAlchemy, Docker и Nginx. Той има красиво логическо разделяне за създаване на бекенд, домейн, изгледи и модели в съответните им слоеве.
Той използва отлично чертежи на колби и следва фабричния модел на проектиране. Лесно е да създавате разширения във Flusk и допълнително лесно да съдържате приложението с помощта на Docker. Погледнете изходния му код тук .
Колба за бисквитки
Cookiecutter Flask е шаблон на колба с функции като групиране на активи и минимизиране с уеб пакети. Той има начални шаблони за регистрация / удостоверяване на потребителя и е изграден на Bootstrap 4.
Cookiecutter е помощна програма за команден ред за създаване на проект за пакет на Python. Това означава, че ако използвате този шаблон, можете да публикувате и вашето приложение Flask като PyPI. Този проект е в процес на активно развитие.
Струва си да се направи оценка при тази връзка .
Колба пълна
Flask full е още един захранван с мощност шаблон, който използва Celery, MongoEngine, Signals, Shell команди, WebSocket и eventlet. Той е доста добре интегриран с Swagger API документи и Sphinx документи.
Оценете този проект като негов източник. Той е свободно достъпен тук .
Крещящ
За създаването на леки приложения може да помислите за Flasky. Наличен е изходният код на Flasky тук . Това хранилище е създадено от Мигел Гринберг, който има над 25 години опит в уеб разработката.
Той създава Flasky, за да предостави кодови примери за концепциите, обсъдени в неговата книга, наречена Уеб разработка на колби .
Който и да изберете, рамка или шаблон, всички те имат някои стандартни функции и говорят за тях по свой начин. Тук изброяваме някои от тези функции и ги обсъждаме и прилагаме тези, използващи Flask-Appbuilder, в нашето примерно приложение на тази серия уроци.
Този урок разглежда някои по-често срещани модели, които ще намерите в почти всички уеб приложения днес и е хубаво да ги имате в комплекта на уеб разработчик.
Пример за влизане в колба
Уеб приложение обикновено изисква от потребителите да се регистрират и да имат достъп до ограничената част от приложението въз основа на присвоените привилегии. Потребителите имат базирани на разрешения роли. Например, публичен потребител няма разрешение да създаде друг потребител. Потребител на администратор обаче има тези разрешения.
Понякога уеб приложенията автоматизират регистрацията и създаването на потребители, като им задават разрешения по подразбиране или предварително дефинирани.
Създаване на потребител офлайн
Нека създадем потребител с помощта на командата fab create-user. След като използвате тази команда, ще получите подкани от командния ред, за да предоставите подробности за потребителския акаунт. Дайте подробности, подобни на показаните по-долу, и вашият потребител е създаден.
Role (Public): Username: user1 User first name: User1 User last name: Last1 Email: user1@sthwebsite.com Password: Repeat for confirmation: ## various logs 2020-06-21 13:55:01,053:INFO:flask_appbuilder.security.sqla.manager:Added user user1 User user1 created.
Забележете, че в края на изхода на командата sqla.manager отпечатва съобщения за потвърждение за създаване на потребител.
Сега влезте в приложението и влезте с данните, които току-що сте въвели. Ако сте създали Потребителя в производствената база данни, предайте тези подробности на човека, за когото сте създали този акаунт.
Придвижете се до http: // localhost: 8080 / login и ще видите формата за вход, както е показано по-долу.

След като user1 влезе, Потребителят може да види приветственото съобщение.

Създайте потребител онлайн
Може да е невъзможно за нас да създадем всички потребители офлайн. Освен това може да се наложи повече технически опит, за да се използва командата fab create-user на колбата в производствената среда. Може да получите изискване да премахнете малко натоварване от администратор, който през повечето време е натоварен със създаването на потребителя.
Следователно, в нашия пример за уеб приложение, нека позволим на потребителите да се регистрират сами.
Използваме услугата reCAPTCHA на Google, за да предотвратим достъпа на злонамерени участници до ограничените части на приложението.
Първо, нека регистрираме нашия домейн в услугата reCAPTCHA на Google и да придобием ключа SITE и SECRET.
Етап 1: Инсталирайте Flask-Mail, като използвате командата по-долу.
pip install Flask-Mail
Отидете на https://www.google.com/recaptcha/intro/v3.html и влезте като администратор, използвайки вашия акаунт в Google.
Стъпка 2: Изберете типа reCaptcha.

Стъпка 3: Дайте домейна, за който искате да използвате reCaptcha на Google.
Освен това добавете localhost в списъка на разрешените домейни за този ключ и приемете условията и ги изпратете. Можете да го премахнете по-късно след разработването на тази функция.
Стъпка 4: Забележете КЛЮЧА НА САЙТА, който е известен също като публичен ключ.

Стъпка 5: Забележете СЕКРЕТНИЯ КЛЮЧ, който е известен също като частен ключ.

След като запишете ключовете, както е споменато по-горе, най-добре е да ги съхранявате на място, където те могат да бъдат препратени и прочетени в конфигурацията. За този урок запазихме стойностите като променливи на средата като SITE_KEY и SECRET_KEY.
Сега отворете config.py и го актуализирайте, както е показано по-долу.
# Will allow user self registration AUTH_USER_REGISTRATION = True# The default user self registration role AUTH_USER_REGISTRATION_ROLE = 'Public'# Config for Flask-WTF Recaptcha necessary for user registration RECAPTCHA_PUBLIC_KEY = os.environ.get('SITE_KEY', None) RECAPTCHA_PRIVATE_KEY = os.environ.get('SECRET_KEY', None) # Config for Flask-Mail necessary for user registration MAIL_PORT = 587 MAIL_USE_SSL = False MAIL_SERVER = 'smtp.gmail.com' MAIL_USE_TLS = True MAIL_USERNAME = 'sthtestmail@gmail.com' MAIL_PASSWORD = 'Passw0rdqwerty' MAIL_DEFAULT_SENDER = 'sthtestmail0@gmail.com'
Може да се наложи да разрешите по-малко сигурен достъп до вашия акаунт в Google. Активирайте достъпа до акаунта на URL адресите по-долу, ако заседнате в проблеми, свързани с имейл.

- https://accounts.google.com/DisplayUnlockCaptcha
- https://support.google.com/mail/?p=BadCredentials
Сега на страницата за вход можем да видим допълнителен потребителски бутон за регистрация. След като кликнете върху регистрацията, можем да видим много полета заедно с предизвикателството reCaptcha.

След като се регистрирате с вашия имейл и преминете предизвикателството reCaptcha, ще видите съобщение за потвърждение, както е показано по-долу.

Ако имейлът, който сте дали по време на регистрацията, е валиден, тогава ще получите имейл за активиране на акаунта, подобен на този, показан на изображението по-долу.

Администратор на колбата
Ако сте прочели другите уроци в тази серия уроци на Flask, тогава ще забележите, че сме се възползвали от вградената защита, която идва с Flask-Appbuilder. Изгледите, които добавихме чрез add_view_no_menu, не са защитени. Изгледите, които добавихме въз основа на DataModels, са автоматично защитени за администраторски потребител.
Като алтернатива бихме могли да използваме Flask-Admin, който най-вече би постигнал подобен резултат. Flask-Admin също, нека дефинираме изгледи по обектно-ориентиран начин. Уеб страница на интерфейса представлява метод на клас изглед, който изрично добавяме към интерфейса.
В този урок не използваме Flask-Admin. Вместо това поемаме по пътя на постигането на същите резултати с по-голяма скорост и прескачаме необходимостта да знаем за изграждането на сигурност около Login, Auths, Roles и разрешения. Това беше възможно, тъй като използвахме Flask-Appbuilder.
Както Flask-Appbuilder, така и Flask-Admin имат своите плюсове и минуси. В случая с Flask-Admin трябва да знаем, че няма съществуващи предположения за сигурност и можете да създавате приложения въз основа на вашия модел на защита. За да научите повече за Flask-Admin, моля, посетете тук и прегледайте подходящи примери.
Качване на файл с колба
Почти всички уеб приложения в наши дни имат изискванията за съхраняване и обслужване на файлове. Типичен модел за тях е да запазват файловете по път на Сървъра, с известна информация за извършване на операцията със съхранения файл и съхраняване в Модели на приложения и изгледи.
Ще работим по подобен пример. Нека модифицираме нашия модел на песни с допълнителни функции.
Във файла models.py въведете следния код.
from flask import Markup, url_for from flask_appbuilder.models.mixins import FileColumn from flask_appbuilder.filemanager import get_file_original_name from flask_appbuilder import Model from sqlalchemy import Column, Integer, String, ForeignKey from sqlalchemy.orm import relationship class Song(Model): id = Column(Integer, primary_key=True) title = Column(String(200), nullable=False) rating = Column(Integer) album_id = Column(Integer, ForeignKey('album.id')) # for storing MP3 file of the song song_file = Column(FileColumn, nullable=False) album = relationship('Album') def __str__(self): return self.title def download(self): return Markup( ' Download ' ) def file_name(self): return get_file_original_name(str(self.song_file))
Променихме нашия създаден по-рано модел на песента, като добавихме нова колона от тип FileColumn. Освен това добавихме още две колони, които ще бъдат добавени към SongsView, за да се покаже името на файла и връзка за изтегляне на качения файл.
Методът на колбата url_for е използван заедно с Markup, за да се покаже Изтеглянето като връзка. Също така, ние използвахме метода get_file_original_name от Flask-Appbuilder, тъй като името на файла се съхранява чрез обединяване с UUID, за да се избегнат сблъсъци между същите имена на файлове.
Променете views.py с дадения по-долу код, за да актуализирате съответния SongsView.
class SongsView(ModelView): datamodel = SQLAInterface(Song) label_columns = {'file_name' : 'File Name', 'download': 'Download'} list_columns = ('title', 'file_name', 'download') show_columns = ('title', 'file_name', 'download')
В клас SongsView споменахме новите етикети, които трябва да бъдат показани, и искаме да изброим само колоните, споменати в посочения списък.
Тук трябва да запомните, че сме модифицирали модел на база данни, като сме добавили колона към модела. Съответната таблица в базата данни няма тази нова колона. Затова ще премахнем файла app.db, тъй като работим върху базата данни SQLite от последния урок.
Друга възможност е да използваме командата flask db migrate и да направим необходимите промени във файла с версията и да използваме ъпгрейд db flask за актуализиране на таблицата. Въведената от нас промяна обаче е минимална и можем да пресъздадем базата данни на приложението и потребителя.
Препоръчваме при производството да обмислите използването на командите Flask-Migrate, когато правите промени в схемата на базата данни на вашето приложение.
Използвайте командите по-долу, за да премахнете файла на базата данни и да създадете потребителя на администратор отново.
rm app.db flask fab create-db flask fab create-admin
Сега влезте в приложението с идентификационните данни на администратора и ще видите модифицирания SongsView, както е показано на изображението по-долу.

Добавете песен с файл.

След като запазите файла, колоните в изгледа ще изглеждат, както е показано по-долу.

Забележете следните стойности в config.py. Качените файлове ще се съхраняват по този път на сървъра. За този урок той ще бъде качен на машината, на която разработваме това примерно приложение.
Проверете пътя за качване, както е споменато в config.py. Файловете се съхраняват с UUID, както е показано по-долу.

Колба HTTPS
Що се отнася до развитието, може да продължим да изпълняваме нашето приложение Flask, работещо без HTTPS. От гледна точка на сигурността, HTTPS гарантира, че комуникацията се случва между легитимен клиент и сървър.
Тази криптирана комуникация изисква да се установи доверие между клиент и сървър, като се използва сертификат, подписан от CA, с двойка публични и частни ключове. Моля, прочетете повече за това тук
В този урок ще ви запознаем с методите за разработване на Flask уебсайтове, използващи HTTP по време на разработката.
Най-бързият и лесен начин да включите HTTPS по време на разработката е да използвате adhoc ssl_context, както е споменато по-долу в run.py. Моля обаче инсталирайте pyopenssl, като използвате pip в околната среда.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context='adhoc')
След добавяне на ssl_context, когато отидете до https: // localhost: 8080 /, ще получите предупреждение, пораждащо съмнение относно валидността на сертификата, използван в тази комуникация. Освен това навигацията до http: // localhost: 8080 / вече няма да работи.
По този начин този подход е малко тромав и ще изисква да продължите да приемате тази заявка всеки път, когато рестартирате сървъра си за разработка.
Трябва да кликнете върху небезопасен достъп, за да продължите да работите, както е показано по-долу.

Като алтернатива, за да се развием с функциите https, можем да предадем пътя към сертификата и ключа в Python Tuple до параметъра ssl_context в метода run. За да приемете този подход обаче, ще трябва да генерирате самоподписан сертификат и ключ, като използвате командата по-долу.
openssl req -x509 -newkey rsa:4096 -nodes -out mycert.pem -keyout mykey.pem -days 365
Дайте подходящи стойности за зададените заявки.

Оставихме всички стойности по подразбиране. Сега спрете сървъра за разработка и предайте сертификата за пътя и пътя на ключа, както е показано по-долу.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context=('mycert.pem', 'mykey.pem'))
Този подход също е подобен на предишния метод за използване на Adhoc ssl_context. В този случай обаче подробностите се запазват за по-дълго време. Споменахме 365 дни. Можете да посочите срока на валидност до дните, от които се нуждаете. Освен това тези файлове могат да се споделят с останалите членове на екипа, ако се развивате в екип.
В производствената среда сертификатите се издават от CA и Мигел Гринберг обсъжда някои случаи на употреба тук . Препоръчваме ви да прочетете повече подробности на тази страница.
Заключение
В този урок обсъдихме някои модели, които уеб разработчиците следват, докато разработват функции, свързани с Flask Login, Flask Admin, Flask File Upload и Flask HTTPS. Предоставихме примери за кодове и читателите могат да опитат и това.
В следващия урок ще разгледаме концепциите за разширяване на Flask и ще видим как да създадем REST API базирани функции. Освен това ще обсъдим как можем да използваме Twitter API в Flask.
html и css интервю въпроси и отговори
=> Разгледайте поредицата за обучение на колби тук
Препоръчително четене
- Модели за проектиране в Java: Singleton, Factory And Builder
- Урок за Python Flask - Въведение в Flask за начинаещи
- Урок за API на Flask с пример | Разширяване на колбата с API
- Flask App и Flask Project Layout с Blueprint & Bootstrap
- Django Vs Flask Vs Node: Коя рамка да изберете
- Топ 31 популярни въпроса за интервю с Python Flask с отговори
- Топ 10 Инструменти за проектиране на бази данни за изграждане на сложни модели данни
- Топ 11 UI / UX дизайнерски тенденции: Какво да очаквате през 2021 г. и след това