flask design patterns
Цей посібник пояснює деякі загальні шаблони дизайну колби та найкращі практики, яких слід дотримуватися при розробці веб-додатків, на прикладах:
Дизайн додатків є важливим аспектом розробки програмного забезпечення. Незапланована розробка додатків призводить до непереборної технічної заборгованості. Тому, коли ми хочемо масштабувати свою програму, тоді спробувати випробувати перевірені часом дизайнерські шаблони.
Спільнота Flask має безліч таких прикладів, які можуть надихнути вас і вплинути на ваші дизайнерські рішення, коли ви хочете випробувати кілька шаблонів для своєї програми. Flask настільки непінійована та гнучка, що вам може сподобатися поєднати концепції з існуючих шаблонів і створити нову.
=> Завітайте сюди, щоб вивчити колбу з нуля
Що ви дізнаєтесь:
Шаблони дизайну колб
Наприклад, Ви знайдете багато прикладів від шаблону MVC до додатків для однієї сторінки до шаблону SAAS. Ви називаєте парадигму дизайну, і вона вже спробувана кимось із спільноти і є у вільному доступі для вас, щоб спробувати свої сили.
Нижче наведено кілька сховищ, на які варто подивитися.
Флак
Flusk - це приклад, який можна використовувати для створення великих додатків Flask, які включають SQLAlchemy, Docker та Nginx. Він має прекрасне логічне розділення для створення бекенда, домену, подань та моделей у відповідні шари.
Він чудово використовує креслення колби та відповідає заводському дизайну. Створити розширення у Flusk легко, а додатково легко вмістити додаток за допомогою Docker. Подивіться на його вихідний код тут .
Колба для печива
Cookiecutter Flask - це шаблон колби з такими функціями, як об'єднання активів та мініфікація за допомогою веб-пакетів. Він має початкові шаблони для реєстрації / аутентифікації користувачів і побудований на Bootstrap 4.
Cookiecutter - це утиліта командного рядка для створення проекту пакету Python. Це означає, що якщо ви використовуєте цей шаблон, ви можете також опублікувати свою програму Flask як PyPI. Цей проект знаходиться в стадії активної розробки.
Варто оцінити на це посилання .
Колба повна
Flask full - це ще один енергоблок, який використовує Celery, MongoEngine, Signals, команди Shell, WebSocket та eventlet. Він досить добре інтегрований з документами API Swagger та Sphinx.
Оцініть цей проект як його джерело. Він знаходиться у вільному доступі тут .
Непомітний
Для створення полегшених програм ви можете розглянути Flasky. Доступний вихідний код Flasky тут . Це сховище було створено Мігелем Грінбергом, який має понад 25-річний досвід у веб-розробці.
Він створив Flasky, щоб навести приклади коду для концепцій, обговорених у його книзі Веб-розробка Flask .
Який би ви не вибрали, фреймворк чи шаблон, усі вони мають деякі стандартні функції та говорять про них по-своєму. Тут ми перелічимо деякі з цих функцій і обговоримо їх, а також застосуємо ті, що використовують Flask-Appbuilder, у нашому прикладі цієї серії навчальних посібників.
Цей підручник обговорює деякі загальні закономірності, які ви знайдете майже у всіх веб-програмах сьогодні, і які приємно мати в наборі веб-розробника.
Приклад входу в колбу
Зазвичай веб-програма вимагає від користувачів реєстрації та доступу до обмеженої частини програми на основі призначених привілеїв. Користувачі мають ролі на основі дозволів. Наприклад, публічний користувач не має дозволу на створення іншого користувача. Однак адміністратор має ці дозволи.
Іноді веб-програми автоматизують реєстрацію та створення користувачів, призначаючи їм типові або заздалегідь визначені дозволи.
Створити користувача в автономному режимі
Давайте створимо користувача за допомогою команди flask 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, і ви побачите форму входу, як показано нижче.

Як тільки користувач1 увійде в систему, Користувач зможе побачити привітальне повідомлення.

Створити користувача в Інтернеті
Нам може бути неможливо створити всіх користувачів у режимі офлайн. Більше того, для використання команди flask fab create-user у виробничому середовищі може знадобитися додатковий технічний досвід. Ви можете отримати вимогу зняти деяке навантаження з адміністратора, якому більшу частину часу доручено створення Користувача.
Тому у нашому прикладі веб-програми дозвольмо користувачам реєструватися самостійно.
Ми використовуємо службу Google reCAPTCHA, щоб запобігти доступу зловмисних акторів до обмежених частин програми.
По-перше, давайте зареєструємо наш домен у службі Google reCAPTCHA та отримаємо ключ 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. Натомість ми беремо шлях досягнення тих самих результатів з більшою швидкістю і пропускаємо необхідність знати про побудову безпеки навколо Входу, Авторизацій, Ролей та дозволів. Це було можливо, оскільки ми використовували 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 для відображення імені файлу та посилання для завантаження завантаженого файлу.
Метод flask url_for був використаний разом із розміткою для відображення завантаження як посилання. Крім того, ми використовували метод 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 та внести необхідні зміни у файл версії, а також використовувати оновлення flask db для оновлення таблиці. Однак внесені нами зміни є мінімальними, і ми можемо відтворити базу даних програми та Користувача.
Ми рекомендуємо у виробництві розглянути можливість використання команд Flask-Migrate щоразу, коли ви вносите будь-які зміни в Схему баз даних вашої програми.
Використовуйте наведені нижче команди, щоб видалити файл бази даних і знову створити користувача адміністратора.
rm app.db flask fab create-db flask fab create-admin
Тепер увійдіть до програми за допомогою облікових даних адміністратора, і ви побачите модифікований SongsView, як показано на зображенні нижче.

Додайте пісню з файлом.

Після збереження файлу стовпці у поданні виглядатимуть, як показано нижче.

Зверніть увагу на такі значення в config.py. Завантажені файли будуть збережені за цим шляхом на Сервері. Для цього підручника він буде завантажений на машину, на якій ми розробляємо цей зразок програми.
Перевірте шлях завантаження, як зазначено у config.py. Файли зберігаються разом з UUID, як показано нижче.

Колба HTTPS
Що стосується розробки, ми можемо продовжувати запускати наш додаток Flask, який працює без HTTPS. З точки зору безпеки, HTTPS забезпечує зв'язок між законним клієнтом та сервером.
Цей зашифрований зв’язок вимагає встановлення довіри між Клієнтом та Сервером за допомогою сертифіката, підписаного ЦС, з парою відкритих та приватних ключів. Будь ласка, прочитайте більше про це тут
У цьому посібнику ми розповімо вам методи розробки веб-сайтів на основі 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.
як переглянути файли bin на android - -
=> Ознайомтесь з циклами навчальних серій тут
Рекомендована література
- Шаблони дизайну на Java: Singleton, Factory And Builder
- Підручник з колби з Python - Вступ до колби для початківців
- Підручник з Flask API з прикладом | Розширення колби за допомогою API
- Програма Flask та макет проекту Flask за допомогою проекту та Bootstrap
- Django проти Flask проти вузла: який фреймворк вибрати
- 31 найпопулярніше запитання для інтерв’ю з колбою Python із відповідями
- 10 найкращих інструментів проектування баз даних для побудови складних моделей даних
- Найкращі 11 тенденцій дизайну UI / UX: чого очікувати в 2021 році та далі