Dash tətbiqini mövcud bir Flask tətbiqinə necə inteqrasiya etmək olar

Jezael Melgoza'nın Unsplash'daki şəkli

Dash (Plotly tərəfindən) istifadəsi asan, gözəl məlumatlara əsaslanan veb tətbiqetmələr yaratmaq üçün açıq mənbəli Python çərçivəsidir.

Çərçivə haqqında daha çox məlumat üçün rəsmi təqdimat elanı olan Dash'i ziyarət edin və ya qaleridəki bir çox nümunəyə baxın.

Bununla əlaqəli olan şey, Dash'ın Flask'ı arxa uc üçün istifadə etməsidir.

Flask ilə tanışsınızsa, bunun minimalist bir nüvəyə, yüksək dərəcədə fərdiləşdirilə bilən və əlavə edilməsi asan uzantılara sahib olduğunu biləcəksiniz.

Beləliklə, Dash tətbiqetmələrini mövcud bir Flask tətbiqi ilə birləşdirmək asan olardı.

Mündəricat

  • Mövcud həllər
  • Müstəqil bir nümunə
  • Dash tətbiqini öz alt qovluğuna sürükləyin
  • Tək bir Flask serverində birdən çox Dash tətbiqi
  • Əla məqamlar
  • Quraşdırma, direnv və virtual şəbəkə ilə əlaqəli qeydlər
  • Güncəyi yeniləyin

Mövcud həllər

Dash'i mövcud bir Flask tətbiqinə inteqrasiya etmək üçün mənbələr seyrək və natamamdır.

"Dash Integration Flask" ı axtarırsınızsa, rəsmi yerləşdirmə sənədlərindən kod görəcəksiniz. B̵u̵t̵ ̵i̵t̵'̵s̵ ̵h̵a̵r̵d̵l̵y̵ ̵e̵v̵e̵n̵ ̵a̵n̵ ̵e̵x̵a̵m̵p̵l̵e̵. Dash komandası cəmiyyətin istəklərini cavablandırmaq üçün əla bir iş gördü. Buna baxmayaraq, yeni nümunələrdə yalnız çılpaq sümüklər üçün bir şişə qurğusu istifadə olunur.

Digər axtarış nəticələri, bir Flask tətbiqetməsində bir Dash tətbiqetməsi və ya sizdən soruşan Dash'in Github problemi kimi StackOverflow suallarına işarə edir.

Bu mənbələr hələ də qeyri-kafidir və adətən aşağıdakı məsələlərdən bəzilərinə malikdir:

  • Nümunələr təkbaşına deyil, sınanması çətindir, dağınıqdır
  • real olmayan dərəcədə sadələşdirilmiş bir Flask tətbiqinə ehtiyac var
  • Doğrulama kimi müəyyən əsas tələblərə cavab verməyin

Və azacıq müvəffəqiyyətlə onlarla iç içə keçidi axtarmağa, oxumağa və sınamağa saatlar sərf etdinizsə, çox güman ki, eyni nəticəyə gəldiniz.

Mövcud bir Flask tətbiqinə Dash tətbiqetməsini yerləşdirmək üçün sənədləşdirilmiş bir strategiyaya ehtiyacımız var!

Müstəqil bir nümunə

Dash tətbiqetməsini real Flask layihəsinə inteqrasiya edən asanlıqla sınaqdan keçirilə bilən və müstəqil bir nümunə yaratdım.

Bunu yoxlamaq üçün

Github deposunu klonlaşdırın:

Git klon https://github.com/okomarov/dash_on_flask cd dash_on_flask Touch .envrc

.Envrc faylına konfiqurasiya təfərrüatları əlavə edin (təsdiq olunmamış):

ixrac FLASK_APP = dashapp ixrac FLASK_ENV = inkişaf
ixrac DATABASE_URL = sqlite: ///$PWD/app.db
ixrac SECRET_KEY = secret_key_change_as_you_wish_make_it_long_123

Konfiqurasiya detallarını yükləyin, virtual mühit yaradın (istəyə görə, müraciət olunur), Python asılılıqlarını quraşdırın, verilənlər bazasını işə salın və tətbiqi işə salın:

Mənbə .envrc pip quraşdırma -r requirements.txt
Flask db init flask db migrate -m 'init' şüşə DB yüksəltmə
Pistonlar qaçır

Nəhayət, http://127.0.0.1:5000/dashboard saytındakı tətbiqə baxın!

Əvvəl qeydiyyatdan keçmək üçün istifadə edə biləcəyiniz bir keçid olan bir qeyd formasına yönəldilməlisiniz. Yəni idarəetmə paneli identifikasiya tələb edir:

Qeydiyyat formasının nümunəsi

İstədiyimiz tam budur! Əvvəlcə qeydiyyatdan keçin, sonra daxil olub / panelə qayıdın.

İndi Flask tətbiqetməmiz tərəfindən təmin edilmiş, identifikasiyamız və digər uzantılarımızla yaxşı işləyən müstəqil qurulmuş Dash tətbiqetmə var.

Tətbiq detalları

Tətbiq aşağıda göstərilən sadə səhmdar hazırlayıcıyı əlavə edir (Yahoo qiymətlərindən istifadə etmək üçün dəyişdirildi):

Dash birja ticker nümunəsinə uyğunlaşdırılmışdır

istifadə edən bir Flask tətbiqinə:

  • tətbiq fabrikinin nümunəsi və planları
  • istifadəçi idarəsi üçün verilənlər bazası (Flask-SQLAlchemy və Flask-Migrate ilə sqlite)
  • Doğrulama (Şüşə giriş)

Bu, əksər piston tətbiqləri üçün standart bir konfiqurasiyadır. Repomda istifadə olunan infrastrukturun tətbiqi üçün addımlar və kod Miguel Grinberg tərəfindən mükəmməl Flask Mega Tutorial-dan götürülmüşdür.

Unutmamalı olduğumuz bir neçə şey var. Beləliklə qovluq quruluşuna baxaq:

. ├── App / │ ├── __init__.py │ ├── extensions.py │ ├── formalar.py ├── ├── models.py │ ├── Şablonlar / │ │ └── ... │ └─ ─ webapp.py ├── app.db ├── config.py ├── dashapp.py ├── köçlər / │ │ ... ├── .envrc └── requirements.txt

Birincisi, tətbiq / qovluq Dash sənədlərində göstərildiyi kimi Flask tətbiqimiz və ya serverlə əlaqəli hər şeyi ehtiva edir. Əsas dizaynı və marşrutları webapp.py-də yaradırıq (aydınlıq üçün düzəldilmişdir):

və __init__.py-də App Factory-ni müəyyənləşdirin:

İkincisi, dashapp.py, flask run ilə işlədiyimiz sənəddir. Bu fayl, Dash tətbiqinin yenidən istifadə etdiyi Server Flask tətbiqini yaradır.

Bundan əlavə, fayl Dash tətbiqinin tərtibini və geri çağırışlarını təyin etmək və marşrutlarını / görünüşlərini qorumaq üçün də istifadə olunur (aydınlıq üçün düzəldilmişdir):

Dash tətbiqini öz alt qovluğuna sürükləyin

Yəqin ki, fərq etdiyiniz kimi, tətbiqin hazırladığı fayl (bəzən run.py adlanır) həmişəkindən daha qarışıqdır. Məsələn, Dash tətbiqi həqiqətən öz qovluğuna aid olmalıdır.

Beləliklə, Tətbiq Fabriki nümunəsini istifadə etmədiyiniz təqdirdə, bu cavabda təsvir edilən daha sadə quruluş sizin üçün daha yaxşıdır.

Bu cavabda izah edildikdən sonra Dash tətbiqetmə kodunu / app altındakı öz alt qovluğuna qoya bilərik:

. ├── App │ ├── __init__.py py ├── dashapp1 1 │ ├── Assets / │ │ ├── Recall.py │ │ └── layout.py │ │ │ └── webapp.py ├─ ─ dashapp.py ⋮

Düzen və geri çağırışların ayrı sənədlərdə olduğu yer (düzəliş altındakı geri çağırışlardan yan-yana düzəliş etmək asandır):

Dash tətbiqetmə hazırlaması artıq tamamilə __init__.py-də həyata keçirilir (ətraflı məlumat üçün Github deposuna baxın). Dashapp.py sadədir:

tətbiqdən idxal Create_app
server = create_app ()

Yaxşı hiss edirəm!

Tək bir Flask serverində birdən çox Dash tətbiqi

Artıq Dash tətbiqimizi öz alt qovluğuna necə sökəcəyimizi bildiyimizdən, eyni Flask serverinin altında bir çox Dash tətbiqetməsini hazırlaya bilərik.

Tam həll Github-da filial funksiyası / multip_dash_apps altında tapıla bilər.

Flask serverini işə salarkən zavod nümunəsindən istifadə etmirsinizsə, bu bölməni atlayın və çox səhifəlik bir tətbiqin necə qurulacağına dair rəsmi təlimatları izləyin.

/ App / dashapp1 altında yaratdığınız başqa bir Dash tətbiqinizin olduğunu düşünək:

. ├── App │ ├── __init__.py │ ├── dashapp1 │ │ ├── Assets / │ │ ├── Recall.py │ │ └── layout.py │ ├── dashapp2 │ │ ├── Assets / │ │ ├── Callback.py │ │ └── layout.py │ │ │ └── webapp.py ├── dashapp.py ⋮

/App/__init__.py-nizi aşağıdakılara uyğunlaşdıra bilərik:

İndi Flask serverimizi başlayıb bağlaya bilərik / ilk tire tətbiqi üçün panel İkinci tətbiq üçün gedin / misal!

Əla məqamlar

Jinja şablonu: Pano marşrutuna daxil olduqda, tire tətbiqi, Jinja şablonlarımıza yerləşdirilə bilən div elementində deyil, öz səhifəsində yüklənir. Bu cavab, Dash tətbiqi üçün Jinja şablonumuzu yenidən istifadə etmək üçün bir həll yolu təmin edir.

Quraşdırma haqqında qeydlər

direnv

Nümunəni göstərmək üçün config.py tərəfindən avtomatik olaraq idxal olunan bəzi mühit dəyişənləri yaratmalıyıq. Bu dəyişənləri .envrc adlı bir fayla yerləşdiririk və lazım olduqda mənbə kimi göstəririk.

Qovluqda bir CD qoyanda direnv-nin .envrc faylında müəyyən edilmiş layihə üçün müəyyən mühit dəyişənlərini avtomatik yükləməsinə icazə verdim.

virtualenvwrapper

Tələbləri quraşdırmadan əvvəl bir virtual mühit yaratmağı məsləhət görürəm. Bunu etmək üçün bir yol layihə kökündən başlamaqdır:

python3 -m venv env mənbə env / bin / activate

Digər bir seçim, mühərriklərimi direnv inteqrasiyası ilə birlikdə istifadə etdiyim virtualenvwrapper ilə bir yerdə idarə etmək və təşkil etməkdir.

Güncəyi yeniləyin

  • İlk yazı - 2019/01/02
  • Better Dash App Files Organization - 2019/02/21
  • Tək bir Flask serverinin altında birdən çox Dash tətbiqi - 05/05/2019
  • Dash Tətbiqlərinə Flask Konteksti əlavə edildi - 2019/07/09

Gəlin əlaqəni kəsməyək

Bu yazını bəyəndinizsə və müvafiq yenilikləri almaq və ya gələcək mövzular haqqında məlumat almaq istəyirsinizsə, daha dərin bir əlaqə yarada bilərsiniz.

Bülletenimə üzv olun. Və narahat olmayın. Keyfiyyət yaratmağa çalışıram və keyfiyyət vaxt tələb edir (və spamdan da nifrət edirəm).