flask design patterns
Bu eğitici, örneklerle web uygulamalarını tasarlarken bazı yaygın Flask tasarım modellerini ve izlenecek en iyi uygulamaları açıklar:
Uygulama tasarımı, yazılım geliştirmenin önemli bir yönüdür. Planlanmamış bir uygulama tasarımı, üstesinden gelinemez bir teknik borçla sonuçlanır. Bu nedenle, uygulamamızı ne zaman ölçeklendirmek istersek, zaman testinden geçmiş tasarım modellerini denemekte sorun yoktur.
Flask topluluğu, uygulamanız için birkaç model denemek istediğinizde size ilham verebilecek ve tasarım kararlarınızı etkileyebilecek birçok örneğe sahiptir. Flask o kadar popüler değil ve esnektir ki, mevcut kalıplardaki kavramları birleştirmek ve yeni bir tane oluşturmak isteyebilirsiniz.
=> Sıfırdan Şişeyi Öğrenmek İçin Burayı Ziyaret Edin
Ne öğreneceksin:
Flask Tasarım Desenleri
Örneğin, MVC modelinden Tek Sayfa Uygulamalarına ve SAAS modeline kadar birçok örnek bulacaksınız. Tasarım paradigmasını siz adlandırıyorsunuz ve bu zaten orada topluluktan biri tarafından denendi ve ellerinizi denemeniz için ücretsiz olarak kullanılabilir.
Aşağıda, bakmaya değer depolardan birkaçı listelenmiştir.
Flusk
Flusk, SQLAlchemy, Docker ve Nginx içeren büyük Flask uygulamaları oluşturmak için kullanabileceğiniz bir örnektir. Arka uç, etki alanı, görünümler ve modelleri ilgili katmanlara oluşturmak için güzel bir mantıksal ayrıma sahiptir.
Flask Taslaklarının mükemmel kullanımına sahiptir ve Fabrika tasarım modelini izler. Flusk'ta uzantı oluşturmak kolaydır ve Docker kullanarak uygulamayı konteyner haline getirmek daha da kolaydır. Kaynak koduna bir göz atın İşte .
Cookiecutter Flask
Cookiecutter Flask, varlık gruplama ve web paketleri ile küçültme gibi özelliklere sahip bir şişe şablonu. Kullanıcı kaydı / kimlik doğrulaması için başlangıç şablonlarına sahiptir ve Bootstrap 4 üzerine kurulmuştur.
Cookiecutter, bir Python paketi projesi oluşturmak için bir komut satırı yardımcı programıdır. Bu, bu şablonu kullanırsanız, Flask uygulamanızı da PyPI olarak yayınlayabileceğiniz anlamına gelir. Bu proje aktif geliştirme aşamasındadır.
Değerlendirmeye değer bu bağlantı .
Flask Dolu
Flask full, Celery, MongoEngine, Signals, Shell komutları, WebSocket ve eventlet'i kullanan bir başka güç dolu kazan plakasıdır. Swagger API belgeleri ve Sphinx belgeleri ile oldukça iyi entegre edilmiştir.
Bu projeyi kaynağı olarak değerlendirin. Ücretsiz olarak temin edilebilir İşte .
Flasky
Hafif uygulamalar oluşturmak için Flasky'yi düşünebilirsiniz. Flasky’nin kaynak kodu mevcut İşte . Bu depo, web geliştirmede 25 yıldan fazla deneyime sahip Miguel Grinberg tarafından oluşturuldu.
Adlı kitabında tartışılan kavramlara kod örnekleri sağlamak için Flasky'yi yarattı. Flask Web Geliştirme .
Hangisini, Çerçeve veya şablonu seçerseniz seçin, bunların hepsinin bazı standart özellikleri vardır ve bunlar hakkında kendi yöntemleriyle bahsederler. Burada bu özelliklerden bazılarını listeliyoruz ve tartışıyoruz ve bu eğitim serisinin örnek uygulamasında Flask-Appbuilder kullananları uyguluyoruz.
Bu eğitim, bugün hemen hemen tüm web uygulamalarında bulacağınız ve bir web geliştiricisinin kitinde olması hoş olan bazı daha yaygın kalıpları tartışmaktadır.
Flask Giriş Örneği
Bir web uygulaması genellikle Kullanıcıların, atanan ayrıcalıklara göre uygulamanın kısıtlanmış bölümüne kaydolmasını ve erişmesini gerektirir. Kullanıcıların izne dayalı rolleri vardır. Örneğin, genel bir kullanıcının başka bir kullanıcı oluşturma izni yoktur. Ancak, bir Yönetici kullanıcı bu izinlere sahiptir.
Bazen web uygulamaları, varsayılan veya önceden tanımlanmış izinleri atayarak kullanıcı kaydını ve kullanıcı oluşturmayı otomatikleştirir.
Çevrimdışı Kullanıcı Oluştur
Flask fab create-user komutunu kullanarak bir kullanıcı oluşturalım. Bu komutu kullandığınızda, kullanıcı hesabının ayrıntılarını vermek için komut satırı istemleri alacaksınız. Aşağıda gösterilenlere benzer detaylar verin ve Kullanıcınız oluşturulur.
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.
Komut çıktısının sonunda, sqla.manager'ın kullanıcı oluşturma için onay mesajları yazdırdığına dikkat edin.
Şimdi Uygulamaya erişin ve az önce girdiğiniz ayrıntılarla oturum açın. Kullanıcıyı üretim veritabanında oluşturduysanız, bu ayrıntıları bu hesabı kendisi için oluşturduğunuz kişiye iletin.
Http: // localhost: 8080 / login adresine gidin ve aşağıda gösterildiği gibi giriş formunu göreceksiniz.

Kullanıcı1 oturum açtığında, Kullanıcı Hoş Geldiniz mesajını görebilir.

Çevrimiçi Kullanıcı Oluşturun
Tüm kullanıcıları çevrimdışı oluşturmamız imkansız olabilir. Dahası, üretim ortamında flask fab oluştur-kullanıcı komutunu kullanmak daha fazla teknik uzmanlık gerektirebilir. Çoğu zaman Kullanıcı oluşturma ile görevlendirilmiş olan bir Yöneticiden iş yükünün bir kısmını alma gereksinimi duyabilirsiniz.
Bu nedenle, örnek web uygulamamızda, kullanıcıların kendi kendilerine kaydolmalarına izin verelim.
Kötü niyetli kişilerin uygulamanın kısıtlanmış bölümlerine erişmesini önlemek için Google'ın reCAPTCHA hizmetini kullanıyoruz.
Öncelikle, alanımızı Google'ın reCAPTCHA hizmetine kaydettirelim ve SITE anahtarını ve SECRET anahtarını alalım.
Aşama 1: Aşağıdaki komutu kullanarak Flask-Mail'i kurun.
pip install Flask-Mail
Https://www.google.com/recaptcha/intro/v3.html adresine gidin ve Google Hesabınızı kullanarak Yönetici olarak giriş yapın.
Adım 2: ReCaptcha türünü seçin.

3. Adım: Google'ın reCaptcha'sını kullanmak istediğiniz alanı verin.
Ayrıca, bu anahtar için izin verilen etki alanları listesine localhost'u ekleyin ve şartları kabul edip gönderin. Bu özelliğin geliştirilmesinden sonra daha sonra kaldırabilirsiniz.
4. Adım: Genel anahtar olarak da bilinen SİTE ANAHTARINI not edin.

Adım 5: Özel anahtar olarak da bilinen GİZLİ ANAHTARI not alın.

Anahtarları yukarıda belirtildiği gibi bir kez not ettiğinizde, en iyisi, bunları yapılandırmada kullanılabilecek ve okunabilecek bir yerde saklamaktır. Bu eğitim için değerleri SITE_KEY ve SECRET_KEY olarak ortam değişkenleri olarak kaydettik.
Şimdi config.py'yi açın ve aşağıda gösterildiği gibi güncelleyin.
# 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 Hesabınıza daha az güvenli erişimi etkinleştirmeniz gerekebilir. E-posta ile ilgili herhangi bir sorun yaşarsanız, aşağıdaki URL'lerde Hesap erişimini etkinleştirin.

- https://accounts.google.com/DisplayUnlockCaptcha
- https://support.google.com/mail/?p=BadCredentials
Şimdi Giriş sayfasında, ek bir kullanıcı Kayıt düğmesi görebiliriz. Kaydı tıkladığınızda, reCaptcha Challenge ile birlikte birçok alanı görebiliriz.

E-postanız ile kayıt olduktan ve reCaptcha yarışmasını geçtikten sonra, aşağıda gösterildiği gibi bir onay mesajı göreceksiniz.

Kayıt sırasında verdiğiniz e-posta geçerliyse, aşağıdaki resimde gösterilene benzer bir hesap etkinleştirme e-postası alacaksınız.

Flask Yöneticisi
Bu Flask eğitim serisindeki diğer öğreticileri okuduysanız, Flask-Appbuilder ile birlikte gelen yerleşik güvenlikten yararlandığımızı fark edeceksiniz. Add_view_no_menu kullanarak eklediğimiz görünümler korunmamaktadır. Bununla birlikte, DataModellere göre eklediğimiz görünümler, bir Yönetici kullanıcı için otomatik olarak korunur.
Alternatif olarak, çoğunlukla benzer bir sonuca ulaşacak olan Flask-Admin'i kullanabiliriz. Flask-Admin de, görünümleri Nesneye Yönelik bir şekilde tanımlayalım. Ön uçtaki bir web sayfası, arayüze açıkça eklediğimiz bir görünüm sınıfındaki yöntemi temsil eder.
Bu eğitimde Flask-Admin kullanmıyoruz. Bunun yerine, aynı sonuçları daha hızlı elde etme ve Oturum Açma, Yetkilendirmeler, Roller ve izinler etrafında güvenlik yapısı hakkında bilgi edinme gerekliliğini atlama yolunu seçiyoruz. Flask-Appbuilder'ı kullandığımız için mümkün oldu.
Hem Flask-Appbuilder hem de Flask-Admin'in artıları ve eksileri vardır. Flask-Admin durumunda, mevcut güvenlik varsayımlarının olmadığını bilmeliyiz ve güvenlik modelinize göre uygulamalar oluşturabilirsiniz. Flask-Admin hakkında daha fazla bilgi için lütfen şu adresi ziyaret edin: İşte ve uygun örneklerden geçin.
Flask Dosya Yükleme
Günümüzde neredeyse tüm web uygulamalarının dosyaları saklama ve sunma gereksinimleri vardır. Onlar için tipik bir model, dosyaları, depolanan dosyada işlem yapmak ve Uygulama Modellerinde ve görünümlerinde tutmak için bazı bilgilerle birlikte Sunucu üzerindeki bir yola kaydetmektir.
Benzer bir örnek üzerinde çalışacağız. Şarkı Modelimizi ek özelliklerle değiştirelim.
Models.py dosyasında aşağıdaki kodu girin.
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))
Daha önce oluşturduğumuz Song modelimizi FileColumn türünde yeni bir sütun ekleyerek değiştirdik. Ayrıca, Dosya Adını görüntülemek için SongsView'a eklenecek iki sütun daha ve yüklenen dosyayı indirmek için bir bağlantı ekledik.
İndirmeyi bağlantı olarak görüntülemek için İşaretleme ile birlikte Flask url_for yöntemi kullanılmıştır. Ayrıca, Flask-Appbuilder'daki get_file_original_name yöntemini kullandık çünkü dosya adı, aynı dosya adları arasındaki çakışmaları önlemek için bir UUID ile bitiştirilerek saklanır.
Karşılık gelen SongsView'u güncellemek için views.py'yi aşağıda verilen kodla değiştirin.
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 sınıfında görüntülenmesi gereken yeni etiketlerden bahsettik ve sadece belirtilen listede belirtilen sütunları listelemek istiyoruz.
Burada, modele bir sütun ekleyerek bir veritabanı modelini değiştirdiğimizi hatırlamanız gerekir. Veritabanındaki ilgili tablo bu yeni sütuna sahip değildir. Bu nedenle, son öğreticiden beri SQLite veritabanı üzerinde çalıştığımız için app.db dosyasını kaldıracağız.
Alternatif olarak, flask db migrate komutunu da kullanabilir ve sürüm dosyasında gerekli değişiklikleri yapabilir ve tabloyu güncellemek için flask db upgrade'i kullanabiliriz. Ancak, sunduğumuz değişiklik minimum düzeydedir ve uygulama veritabanını ve Kullanıcıyı yeniden oluşturabiliriz.
Üretimde, uygulamanızın Veritabanı Şemasında herhangi bir değişiklik yaptığınızda Flask-Migrate komutlarını kullanmayı düşünmenizi öneririz.
Veritabanı dosyasını kaldırmak ve yönetici kullanıcıyı yeniden oluşturmak için aşağıdaki komutları kullanın.
rm app.db flask fab create-db flask fab create-admin
Şimdi Yönetici kimlik bilgileriyle uygulamaya giriş yapın ve aşağıdaki resimde gösterildiği gibi değiştirilmiş SongsView'ı göreceksiniz.

Dosyalı bir şarkı ekleyin.

Dosyayı kaydettiğinizde, Görünüm’deki sütunlar aşağıda gösterildiği gibi görünecektir.

Config.py'de aşağıdaki değerlere dikkat edin. Yüklenen dosyalar Sunucu üzerinde bu yolda saklanacaktır. Bu eğitim için, bu örnek uygulamayı geliştirdiğimiz makineye yüklenecektir.
Config.py'de belirtildiği gibi yükleme yolunu kontrol edin. Dosyalar, aşağıda gösterildiği gibi UUID'ler ile saklanır.

Flask HTTPS
Geliştirme söz konusu olduğunda, Flask Uygulamamızı HTTPS olmadan çalıştırmaya devam edebiliriz. Güvenlik açısından HTTPS, yasal İstemci ve Sunucu arasında iletişimin olmasını sağlar.
Bu şifreli iletişim, bir İstemci ile Sunucu arasında, bir çift genel ve özel anahtar içeren CA imzalı bir sertifika kullanılarak güvenin kurulmasını gerektirir. Lütfen bunun hakkında daha fazlasını okuyun İşte
Bu eğitimde, geliştirme sırasında HTTP'leri kullanarak Flask tabanlı web siteleri geliştirme yöntemlerini size bildireceğiz.
Geliştirme sırasında HTTPS'yi dahil etmenin en hızlı ve en kolay yolu, aşağıda run.py'de belirtildiği gibi adhoc bir ssl_context kullanmaktır. Ancak, ortamda pip kullanarak pyopenssl kurun.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context='adhoc')
Ssl_context ekledikten sonra, https: // localhost: 8080 / adresine gittiğinizde, bu iletişimde kullanılan sertifikanın geçerliliği hakkında şüphe uyandıran bir uyarı alacaksınız. Dahası, http: // localhost: 8080 / için gezinme artık çalışmayacaktır.
Bu nedenle, bu yaklaşım biraz külfetli ve geliştirme sunucunuzu her yeniden başlattığınızda bu isteği kabul etmeye devam etmenizi gerektirecektir.
Aşağıda gösterildiği gibi çalışmaya devam etmek için güvenli olmayan erişime tıklamanız gerekir.

Alternatif olarak, https özellikleriyle geliştirmek için, sertifika yolunu ve bir Python Tuple'daki anahtarı çalıştırma yöntemindeki ssl_context parametresine iletebiliriz. Ancak, bu yaklaşımı benimsemek için aşağıdaki komutu kullanarak kendinden imzalı bir sertifika ve bir anahtar oluşturmanız gerekecektir.
openssl req -x509 -newkey rsa:4096 -nodes -out mycert.pem -keyout mykey.pem -days 365
Sorulan sorgular için uygun değerler verin.

Tüm varsayılan değerleri bıraktık. Şimdi geliştirme sunucusunu durdurun ve yol sertifikasını ve anahtar yolunu aşağıda gösterildiği gibi iletin.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context=('mycert.pem', 'mykey.pem'))
Bu yaklaşım aynı zamanda önceki Adhoc ssl_context kullanma yöntemine benzer. Ancak bu durumda detaylar daha uzun süre devam eder. 365 günden bahsetmiştik. İhtiyaç duyduğunuz günlerin son kullanma tarihini belirtebilirsiniz. Dahası, bir takımda geliştirme yapıyorsanız bu dosyalar diğer ekip üyeleriyle paylaşılabilir.
Üretim ortamında sertifikalar CA tarafından verilir ve Miguel Grinberg bazı kullanım durumlarını tartışır İşte . Bu sayfada daha fazla ayrıntı okumanızı tavsiye ederiz.
Sonuç
Bu eğitimde, web geliştiricilerinin Flask Login, Flask Admin, Flask File Upload ve Flask HTTPS ile ilgili özellikleri geliştirirken izledikleri bazı kalıpları tartıştık. Kod örnekleri verdik ve okuyucular bunu da deneyebilir.
Bir sonraki eğitimimizde, Flask'ı genişletme kavramlarını ele alacağız ve REST API tabanlı özelliklerin nasıl oluşturulacağını göreceğiz. Ayrıca, Twitter API'yi Flask içinde nasıl kullanabileceğimizi tartışacağız.
en iyi virüs temizleyici nedir
=> Flask Eğitim Serisini Buradan Keşfedin
Önerilen Kaynaklar
- Java'da Tasarım Desenleri: Singleton, Factory And Builder
- Python Flask Eğitimi - Yeni Başlayanlar İçin Flask'a Giriş
- Örneklerle Flask API Eğitimi | API'lerle Şişeyi Genişletme
- Blueprint ve Bootstrap ile Flask Uygulaması ve Flask Proje Düzeni
- Django Vs Flask Vs Düğümü: Hangi Çerçeve Seçilmeli
- En Popüler 31 Python Flask Mülakat Sorusu ve Cevapları
- Karmaşık Veri Modelleri Oluşturmak için En İyi 10 Veritabanı Tasarım Aracı
- İlk 11 UI / UX Tasarım Trendi: 2021'de ve Ötesinde Neler Beklenmeli