flask design patterns
Ten samouczek wyjaśnia niektóre z typowych wzorców projektowych Flask i najlepsze praktyki, których należy przestrzegać podczas projektowania aplikacji internetowych, wraz z przykładami:
Projektowanie aplikacji jest istotnym aspektem tworzenia oprogramowania. Nieplanowany projekt aplikacji powoduje nie do pokonania dług techniczny. Dlatego zawsze, gdy chcemy skalować naszą aplikację, dobrze jest wypróbować sprawdzone wzorce projektowe.
Społeczność Flask ma wiele takich przykładów, które mogą Cię zainspirować i wpłynąć na Twoje decyzje projektowe, jeśli chcesz wypróbować kilka wzorców dla swojej aplikacji. Flask jest tak nieoceniony i elastyczny, że możesz chcieć łączyć koncepcje z istniejących wzorów i tworzyć nowe.
=> Odwiedź tutaj, aby nauczyć się Flask od podstaw
Czego się nauczysz:
Wzorce projektowe kolb
Na przykład, Znajdziesz wiele przykładów, od wzorca MVC przez aplikacje jednostronicowe do wzorca SAAS. Podajesz nazwę paradygmatu projektowania, który został już wypróbowany przez kogoś w społeczności i jest dostępny bezpłatnie, abyś mógł wypróbować go.
Poniżej wymieniono kilka repozytoriów, którym warto się przyjrzeć.
Flusk
Flusk to przykład, którego można użyć do tworzenia dużych aplikacji Flask, które obejmują SQLAlchemy, Docker i Nginx. Ma piękną logiczną separację do tworzenia zaplecza, domeny, widoków i modeli w odpowiednich warstwach.
Doskonale wykorzystuje Schematy Kolb i jest zgodny z wzorcem projektowym Fabryki. Tworzenie rozszerzeń w Flusku jest łatwe, a ponadto łatwo jest konteneryzować aplikację za pomocą Dockera. Spójrz na jego kod źródłowy tutaj .
Kolba Cookiecutter
Cookiecutter Flask to szablon kolby z funkcjami takimi jak grupowanie zasobów i minifikacja za pomocą pakietów internetowych. Posiada szablony startowe do rejestracji / uwierzytelniania użytkowników i jest oparty na Bootstrap 4.
Cookiecutter to narzędzie wiersza poleceń do tworzenia projektu pakietu Python. Oznacza to, że jeśli użyjesz tego szablonu, możesz opublikować swoją aplikację Flask również jako PyPI. Ten projekt jest w trakcie aktywnego rozwoju.
Warto ocenić na ten link .
Kolba pełna
Flask full to jeszcze jedna potężna standardowa tablica, która wykorzystuje Selery, MongoEngine, Sygnały, polecenia powłoki, WebSocket i Eventlet. Jest dość dobrze zintegrowany z dokumentacją Swagger API i dokumentacją Sphinx.
Oceń ten projekt jako jego źródło. Jest dostępny bezpłatnie tutaj .
Flasky
Do tworzenia lekkich aplikacji możesz rozważyć Flasky. Kod źródłowy Flasky jest dostępny tutaj . To repozytorium zostało stworzone przez Miguela Grinberga, który ma ponad 25-letnie doświadczenie w tworzeniu stron internetowych.
Stworzył Flasky, aby dostarczyć przykłady kodu dla koncepcji omówionych w jego książce pt Tworzenie stron internetowych Flask .
Niezależnie od tego, którą platformę lub szablon wybierzesz, wszystkie mają pewne standardowe funkcje i mówią o nich na swój własny sposób. Poniżej wymieniliśmy niektóre z tych funkcji i omówiliśmy je, a także zaimplementowaliśmy te, które używają Flask-Appbuilder w naszej przykładowej aplikacji z tej serii samouczków.
Ten samouczek omawia niektóre bardziej powszechne wzorce, które można znaleźć w prawie wszystkich dzisiejszych aplikacjach internetowych i które można mieć w zestawie dla programistów internetowych.
Przykład logowania do Flask
Aplikacja internetowa zazwyczaj wymaga od Użytkowników rejestracji i dostępu do zastrzeżonej części aplikacji w oparciu o przypisane uprawnienia. Użytkownicy mają role oparte na uprawnieniach. Na przykład, użytkownik publiczny nie ma uprawnień do tworzenia innego użytkownika. Jednak administrator ma te uprawnienia.
Czasami aplikacje internetowe automatyzują rejestrację i tworzenie użytkowników, przypisując im domyślne lub predefiniowane uprawnienia.
Utwórz użytkownika offline
Utwórzmy użytkownika przy użyciu polecenia flask fab create-user. Po użyciu tego polecenia w wierszu polecenia pojawią się monity o podanie szczegółów konta użytkownika. Podaj szczegóły podobne do tych pokazanych poniżej, a Twój użytkownik zostanie utworzony.
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.
Zwróć uwagę, że na końcu danych wyjściowych polecenia sqla.manager drukuje komunikaty potwierdzające utworzenie użytkownika.
Teraz uzyskaj dostęp do aplikacji i zaloguj się za pomocą wprowadzonych danych. Jeśli utworzyłeś Użytkownika w produkcyjnej bazie danych, to przekaż te dane osobie, dla której utworzyłeś to konto.
Przejdź do http: // localhost: 8080 / login, a zobaczysz formularz logowania, jak pokazano poniżej.

Po zalogowaniu się użytkownika 1 użytkownik może zobaczyć wiadomość powitalną.

Utwórz użytkownika online
Utworzenie wszystkich użytkowników w trybie offline może być niemożliwe. Ponadto użycie polecenia flask fab create-user w środowisku produkcyjnym może wymagać większej wiedzy technicznej. Może pojawić się wymóg odciążenia administratora, który przez większość czasu zajmuje się tworzeniem użytkownika.
Dlatego w naszej przykładowej aplikacji internetowej pozwólmy użytkownikom się zarejestrować.
Korzystamy z usługi reCAPTCHA firmy Google, aby uniemożliwić złośliwym podmiotom dostęp do zastrzeżonych części aplikacji.
Najpierw zarejestrujmy naszą domenę w usłudze Google reCAPTCHA i zdobądźmy klucz SITE oraz SECRET.
Krok 1: Zainstaluj Flask-Mail za pomocą poniższego polecenia.
pip install Flask-Mail
Przejdź do https://www.google.com/recaptcha/intro/v3.html i zaloguj się jako administrator, używając swojego konta Google.
Krok 2: Wybierz rodzaj reCaptcha.

Krok 3: podaj domenę, dla której chcesz używać reCaptcha Google.
Dodaj również hosta lokalnego do listy dozwolonych domen dla tego klucza, zaakceptuj warunki i prześlij je. Możesz go później usunąć po opracowaniu tej funkcji.
Krok 4: Zanotuj KLUCZ SITE, który jest również znany jako klucz publiczny.

Krok 5: Zanotuj TAJNY KLUCZ, który jest również znany jako klucz prywatny.

Po zanotowaniu kluczy, jak wspomniano powyżej, najlepiej jest przechowywać je w miejscu, w którym można je odwołać i odczytać w pliku config. W tym samouczku zapisaliśmy wartości jako zmienne środowiskowe jako SITE_KEY i SECRET_KEY.
Teraz otwórz config.py i zaktualizuj go, jak pokazano poniżej.
# 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'
Konieczne może być włączenie mniej bezpiecznego dostępu do konta Google. Włącz dostęp do konta pod poniższymi adresami URL, jeśli utkniesz w jakichkolwiek problemach związanych z pocztą e-mail.

- https://accounts.google.com/DisplayUnlockCaptcha
- https://support.google.com/mail/?p=BadCredentials
Teraz na stronie logowania widzimy dodatkowy przycisk Rejestracja użytkownika. Po kliknięciu rejestracji, zobaczymy wiele pól wraz z wyzwaniem reCaptcha.

Po zarejestrowaniu się za pomocą adresu e-mail i zaliczeniu wyzwania reCaptcha, zobaczysz komunikat potwierdzający, jak pokazano poniżej.

Jeśli adres e-mail, który podałeś podczas rejestracji, jest ważny, otrzymasz e-mail aktywujący konto podobny do tego, który pokazano na poniższym obrazku.

Flask Admin
Jeśli przeczytałeś inne samouczki z tej serii samouczków Flask, zauważysz, że skorzystaliśmy z wbudowanych zabezpieczeń, które są dostarczane z Flask-Appbuilder. Widoki, które dodaliśmy za pomocą add_view_no_menu, nie są chronione. Jednak widoki, które dodaliśmy na podstawie DataModels, są automatycznie chronione dla użytkownika Admin.
Alternatywnie moglibyśmy skorzystać z Flask-Admin, który w większości przyniósłby podobny rezultat. Również Flask-Admin, zdefiniujmy widoki w sposób obiektowy. Strona internetowa na interfejsie reprezentuje metodę w klasie widoku, którą jawnie dodajemy do interfejsu.
W tym samouczku nie używamy Flask-Admin. Zamiast tego podążamy ścieżką osiągania tych samych wyników z większą szybkością i pomijając konieczność znajomości budowania bezpieczeństwa wokół logowania, uwierzytelnień, ról i uprawnień. Było to możliwe, ponieważ używaliśmy Flask-Appbuilder.
Zarówno Flask-Appbuilder, jak i Flask-Admin mają swoje wady i zalety. W przypadku Flask-Admin musimy wiedzieć, że nie ma żadnych istniejących założeń bezpieczeństwa i możesz tworzyć aplikacje w oparciu o swój model bezpieczeństwa. Aby dowiedzieć się więcej o Flask-Admin, odwiedź tutaj i przejrzyj odpowiednie przykłady.
Przesyłanie pliku Flask
Prawie wszystkie aplikacje internetowe mają obecnie wymagania dotyczące przechowywania i udostępniania plików. Typowym dla nich wzorcem jest zapisywanie plików w ścieżce na serwerze, z pewnymi informacjami dotyczącymi wykonania operacji na przechowywanym pliku i utrzymywaniem ich w modelach aplikacji i widokach.
Będziemy pracować nad podobnym przykładem. Zmodyfikujmy nasz model utworu, dodając dodatkowe funkcje.
W pliku models.py wprowadź następujący kod.
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))
Zmodyfikowaliśmy nasz wcześniej utworzony model Song, dodając nową kolumnę typu FileColumn. Ponadto dodaliśmy jeszcze dwie kolumny, które zostaną dodane do SongsView w celu wyświetlenia nazwy pliku i łącza do pobrania przesłanego pliku.
Metoda Flask url_for została użyta wraz ze znacznikami do wyświetlenia pobierania jako łącza. Ponadto użyliśmy metody get_file_original_name z programu Flask-Appbuilder, ponieważ nazwa pliku jest przechowywana poprzez konkatenację z UUID, aby uniknąć kolizji między tymi samymi nazwami plików.
Zmodyfikuj views.py za pomocą podanego poniżej kodu, aby zaktualizować odpowiedni 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')
W klasie SongsView wspomnieliśmy o nowych etykietach, które należy wyświetlić, a chcemy wyszczególnić tylko kolumny wymienione na określonej liście.
Tutaj należy pamiętać, że zmodyfikowaliśmy model bazy danych poprzez dodanie kolumny do modelu. Odpowiednia tabela w bazie danych nie ma tej nowej kolumny. Dlatego usuniemy plik app.db, ponieważ pracujemy nad bazą danych SQLite od ostatniego samouczka.
Alternatywnie możemy również użyć komendy flask db migrate i dokonać niezbędnych zmian w pliku wersji, a następnie zaktualizować tabelę za pomocą aktualizacji bazy danych flask. Jednak wprowadzona przez nas zmiana jest minimalna i możemy odtworzyć bazę danych aplikacji i Użytkownika.
Zalecamy, aby w środowisku produkcyjnym rozważyć użycie poleceń Flask-Migrate za każdym razem, gdy wprowadzasz jakiekolwiek zmiany w schemacie bazy danych aplikacji.
Użyj poniższych poleceń, aby usunąć plik bazy danych i ponownie utworzyć użytkownika administratora.
rm app.db flask fab create-db flask fab create-admin
Teraz zaloguj się do aplikacji przy użyciu poświadczeń administratora, a zobaczysz zmodyfikowany widok SongsView, jak pokazano na poniższym obrazku.

Dodaj piosenkę z plikiem.

Po zapisaniu pliku kolumny w Widoku będą wyglądać tak, jak pokazano poniżej.

Zwróć uwagę na następujące wartości w config.py. Przesłane pliki będą przechowywane w tej ścieżce na serwerze. W tym samouczku zostanie on przesłany na komputer, na którym tworzymy tę przykładową aplikację.
Sprawdź ścieżkę przesyłania, jak wspomniano w config.py. Pliki są przechowywane z identyfikatorami UUID, jak pokazano poniżej.

Kolba HTTPS
Jeśli chodzi o rozwój, możemy nadal uruchamiać naszą aplikację Flask bez protokołu HTTPS. Z punktu widzenia bezpieczeństwa, HTTPS zapewnia komunikację między legalnym klientem a serwerem.
Ta zaszyfrowana komunikacja wymaga ustanowienia zaufania między klientem a serwerem przy użyciu certyfikatu podpisanego przez urząd certyfikacji z parą kluczy publicznych i prywatnych. Przeczytaj więcej na ten temat tutaj
W tym samouczku przedstawimy Ci metody tworzenia witryn internetowych opartych na Flask przy użyciu HTTPs podczas programowania.
Najszybszym i najłatwiejszym sposobem włączenia HTTPS podczas programowania jest użycie adhoc ssl_context, jak wspomniano poniżej w run.py. Należy jednak zainstalować pyopenssl za pomocą pip w środowisku.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context='adhoc')
Po dodaniu ssl_context, po przejściu do https: // localhost: 8080 /, otrzymasz ostrzeżenie budzące wątpliwości co do ważności certyfikatu używanego w tej komunikacji. Ponadto nawigacja do adresu http: // localhost: 8080 / nie będzie już działać.
Dlatego to podejście jest nieco kłopotliwe i będzie wymagało ciągłego akceptowania tego żądania przy każdym ponownym uruchomieniu serwera programistycznego.
Aby kontynuować pracę, musisz kliknąć niebezpieczny dostęp, jak pokazano poniżej.

Alternatywnie, aby programować z funkcjami https, możemy przekazać ścieżkę do certyfikatu i klucz w Python Tuple do parametru ssl_context w metodzie run. Jednak aby zastosować to podejście, będziesz musiał wygenerować certyfikat z podpisem własnym i klucz za pomocą poniższego polecenia.
openssl req -x509 -newkey rsa:4096 -nodes -out mycert.pem -keyout mykey.pem -days 365
Podaj odpowiednie wartości dla zadawanych zapytań.

Pozostawiliśmy wszystkie wartości domyślne. Teraz zatrzymaj serwer deweloperski i przekaż certyfikat ścieżki i ścieżkę klucza, jak pokazano poniżej.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context=('mycert.pem', 'mykey.pem'))
To podejście jest również podobne do poprzedniej metody korzystania z Adhoc ssl_context. Jednak w tym przypadku szczegóły utrzymują się przez dłuższy czas. Wspomnieliśmy o 365 dniach. Możesz określić datę wygaśnięcia do potrzebnych dni. Ponadto te pliki można udostępniać innym członkom zespołu, jeśli tworzysz w zespole.
W środowisku produkcyjnym certyfikaty są wydawane przez CA, a Miguel Grinberg omawia niektóre przypadki użycia tutaj . Zalecamy zapoznanie się ze szczegółami na tej stronie.
Wniosek
W tym samouczku omówiliśmy niektóre wzorce, które twórcy stron internetowych przestrzegają podczas opracowywania funkcji związanych z Flask Login, Flask Admin, Flask File Upload i Flask HTTPS. Przedstawiliśmy przykłady kodu, a czytelnicy też mogą to wypróbować.
W naszym następnym samouczku omówimy koncepcje rozszerzania Flaska i zobaczymy, jak tworzyć funkcje oparte na REST API. Ponadto omówimy, jak możemy używać API Twittera w Flasku.
graj w wow za darmo na prywatnym serwerze
=> Poznaj serię treningową Flask tutaj
rekomendowane lektury
- Wzorce projektowe w Javie: Singleton, Factory i Builder
- Python Flask Tutorial - Wprowadzenie do Flask dla początkujących
- Samouczek interfejsu Flask API z przykładem | Rozszerzanie Flask z API
- Aplikacja Flask i układ projektu Flask z Blueprint i Bootstrap
- Węzeł Django Vs Flask Vs: Którą strukturę wybrać
- 31 najpopularniejszych pytań do wywiadów z Python Flask z odpowiedziami
- 10 najlepszych narzędzi do projektowania baz danych do tworzenia złożonych modeli danych
- 11 najważniejszych trendów w projektowaniu UI / UX: czego się spodziewać w 2021 roku i później