Qo'llanma №5: Flask dizayn naqshlari va veb-ilovalar uchun eng yaxshi amaliyotlar
Qo'llanma №6: Flask API qo'llanmasi misol bilan
Ushbu kirish Python Flask qo'llanmasi Flask nima ekanligini, Python, Virtualenv, Flask Hello World-ni o'rnatish misolida kod misollari, disk raskadrovka va test bo'limi bilan tushuntiriladi:
Veb-saytni ishlab chiqish - bu mahoratdan ko'ra ko'proq san'at. Haqiqiy muvaffaqiyatga erishish uchun zarur bo'lgan narsalarni yaratish uchun sabr-toqat va mehnatsevarlik, qat'iyat, jasorat va fidoyilik talab etiladi. Bu kunlarda o‘quvchilar imkon qadar tezroq tezlikka ega bo‘lishlari juda muhim.
Biz talabalar uchun Python 3 yordamida oddiy va murakkab veb-dasturlashni tezlashtirish va amalga oshirish uchun ushbu Python Flask qo‘llanmasini yaratdik. .
Ushbu Python Flask o'quv qo'llanmasi ko'proq flakon boshlang'ich o'quv qo'llanmasiga o'xshaydi. Python, Virtualenv va boshqa muhim paketlarni o'rnatish. Ushbu o'quv qo'llanmalarida biz Flaskni boshqa kerakli Flask plaginlari bilan birga o'rnatamiz. Shuningdek, biz Git Actions yordamida kodni tuzatish, sinovdan o‘tkazish va uzluksiz integratsiyaga oid bo‘limni kiritdik.
Ushbu Flask seriyasidagi o‘quv qo‘llanmalari ro‘yxati
O‘quv qo‘llanma №1: Python Flask O‘quv qo‘llanma – Yangi boshlanuvchilar uchun flaskga kirish
Qo‘llanma №2: Flask shabloni, shakl, ko‘rish va misollar bilan qayta yo‘naltirish
Dars №3: Flask ma'lumotlar bazasi bilan ishlash – Flaskni ma'lumotlar bazasi bilan qanday ishlatish
Qo'llanma №4: Flask App and Flask Project Layout with Blueprint &shartlarda aytib o'tilgan qadamlar.
1-qadam: Python-ni o'rnating
Python 3-ni o'rnatgan yoki o'rnatmaganligini tekshiring. Agar yoʻq boʻlsa, Python 3-ni bu yerdan yuklab oling va uni operatsion tizimingizga muvofiq oʻrnating.
2-qadam: Python virtual muhitini yarating
Virtual muhitni yarating. quyidagi buyruq.
python3 -m venv venv
Python virtual muhitini faollashtirish uchun quyidagi buyruqdan foydalaning.
source venv/bin/activate
Biz quyida virtual muhitni faollashtirish va oʻchirish misolini keltirdik.
Ushbu qo'llanmadagi barcha keyingi buyruqlar faollashtirilgan virtual muhitda ishlashi kerak. Virtual muhit ichida g'ildiraklar qurishimiz uchun g'ildirak paketini o'rnating.
pip install wheel
3-qadam: Flaskni yuklab olish va o'rnatish
Biz Flaskni yuklab olish bosqichlarini bajarishimiz kerak va Flaskni quyida ko'rsatilgan amallarni bajarib o'rnating.
Endi Flaskni o'rnating.
pip install flask
Ba'zilarimiz so'nggi manba kodidagi o'zgarishlar bilan ishlashni yaxshi ko'radilar. Flask manbalariga so‘nggi o‘zgartirishlar kiritilgan holda o‘rnatish uchun quyida keltirilgan buyruqdan foydalanishimiz mumkin.
Vaqtinchalik katalog yarating.
mkdir tmp
Endi Flask-ni Github omboridan o‘rnating. Quyidagi buyruq ishlashi uchun internetga ulangan boʻlishingiz kerak.
pip3 install -e [email protected]:pallets/flask.git#egg=flask
Muvaffaqiyatli oʻrnatishni tekshirish uchun konsol chiqishlariga qarang. Endi biz Flask buyruqlariga kira olamizmi yoki yo‘qligini tekshiring.
flask --help
Flask yo‘qligi haqida ba’zi istisnolarni ko‘rishingiz mumkin.ilova. Biroq, ularni e'tiborsiz qoldiring, chunki biz hech qanday Flask ilovasini yaratmaganmiz. Bizning ilovamiz Werkzeug veb-ramka va Jinja shablonlash mexanizmidagi oʻram boʻlgan Flask namunasidir.
Werkzeug
Werkzeug WSGI asboblar toʻplamidir. WSGI faqatgina veb-serverlar uchun veb-so'rovlarni Python dasturlash tilida yozilgan veb-ilovalarga yo'naltirish uchun chaqiruv konventsiyasidir.
Jinja
Templating - bu veb-ishlab chiquvchilarning asosiy malakalari to'plami. Jinja - bu Python uchun to'liq xususiyatli va mashhur shablonlash mexanizmi. Bu juda ifodali til boʻlib, shablon mualliflari uchun mustahkam vositalar toʻplamini taqdim etadi.
4-qadam: MongoDB-ni oʻrnatish
MongoDB-ni oʻrnatish uchun quyida koʻrsatilgan bosqichlarni bajaring. Biz uni Debian-ga asoslangan Linux-ga o'rnatish bosqichlarini belgilab berdik. Agar siz boshqa operatsion tizimdan foydalanayotgan bo‘lsangiz, havolaga kiring va mo‘ljallangan operatsion tizimga muvofiq o‘rnating.
MongoDB umumiy GPG kalitini import qilish uchun gnupg-ni o‘rnating.
sudo apt-get install gnupg
Endi quyidagi buyruq yordamida kalitni import qiling.
wget -qO - //www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
Linux tarqatishingizga ko'ra manbalar ro'yxati faylini yarating. Debian bo'yicha manbalar ro'yxatini qo'shdik.
echo "deb //repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
Yangilanish buyrug'ini ishga tushiring
sudo apt-get update
Endi quyidagi buyruq yordamida MongoDB-ni o'rnating.
sudo apt-get install -y mongodb-org
Oʻrnatish muvaffaqiyatli boʻlgach, quyidagi buyruq yordamida MongoDB ni ishga tushiring.
sudo systemctl start mongod
Buyruq yordamida MongoDB holatini tekshiring.quyida.
sudo systemctl status mongod
Endi mongod quyida ko'rsatilgan buyruqni berish orqali tizimni qayta yuklashda avtomatik ravishda ishga tushishiga ishonch hosil qiling.
sudo systemctl enable mongod
Endi imkoningiz borligini tekshiring. mongo mijozi yordamida MongoDB serveriga ulaning.
mongo
Mongo qobig'ida yordam va dbs buyruqlarini ko'rsatib ko'ring.
Flask ilovasini yarating
Flask-appbuilder va mongoengine-ni oʻrnatish uchun quyidagi buyruqdan foydalaning.
pip install flask-appbuilder pip install mongoengine pip install flask_mongoengine
Quyidagi kod parchasida izoh sifatida koʻrsatilgan qiymatlar bilan skeleton ilovasini yarating.
flask fab create-app # Give the following values in the command line questionnaire # Application Name: flaskTutorialApp # EngineType : MongoEngine
Biz quyida keltirilganga oʻxshash natijani koʻramiz.
Your new app name: exampleApp Your engine type, SQLAlchemy or MongoEngine (SQLAlchemy, MongoEngine) [SQLAlchemy]: MongoEngine Downloaded the skeleton app, good coding!
Loyiha va ilovaning tartibini koʻrib chiqing. Biz quyida daraxt buyrug'ining chiqishini ko'rsatdik.
Keling, Flask konfiguratsiya faylini ko'rib chiqamiz. Bu oxirgi buyruq natijasida yaratilgan standart konfiguratsiya. Quyida ko'rsatilgandek Cyborg mavzusiga izohni olib tashlang.
# Theme configuration for Cybord=g # these themes are located on static/appbuilder/css/themes # We can create our own and easily use them by placing them on the same dir structure to override #APP_THEME = "bootstrap-theme.css" # default bootstrap #APP_THEME = "cerulean.css" # cerulean #APP_THEME = "amelia.css" # amelia theme #APP_THEME = "cosmo.css" # cosmo theme APP_THEME = "cyborg.css" # cyborg theme #APP_THEME = "flatly.css" # flatly theme
Skelet ilovasini ishga tushirish uchun terminalda quyida berilgan buyruqdan foydalaning.
flask run
Flask Hello World
FlaskTutorialApp-da birinchi dasturingizni yaratish uchun ilovalar katalogi ostidagi views.py faylini oching va quyidagi kodni qo'shing. Faylda berilgan import bayonotlarini qidiring. Agar mavjud bo'lmasa, ushbu bayonotlarni qo'shing.
from flask_appbuilder import BaseView, expose from app import appbuilder class HelloWorld(BaseView): """ This first view of the tutorial """ route_base = "/hello" @expose("/") def hello(self): return "Hello, World! from Software Testing Help" # at the end of the file appbuilder.add_view_no_menu(HelloWorld())
Yuqoridagi manba kodini qo'shgandan so'ng faylni saqlang. Loyihaning asosiy katalogiga oʻting va Flaskning ishlab chiqish serverini ishga tushirish uchun quyidagi buyruqdan foydalaning.
flask run
Endi chiqishni koʻrish uchun //localhost:5000/hello/ sahifasiga oʻting.brauzer.
Nosozliklarni tuzatish
Hozirda ishlab chiqish serveri Nosozliklarni tuzatish rejimida ishlamayapti. Nosozliklarni tuzatish rejimisiz Flask ilovasining manba kodidagi xatolarni topish qiyin.
Flaskdagi disk raskadrovka rejimi quyidagi natijalarga olib keladi:
- Nosozliklarni tuzatish rejimi Avtomatik qayta yuklashni faollashtiradi. Bu shuni anglatadiki, biz dasturning manba kodiga o'zgartirish kiritganimizdan so'ng ishlab chiqish serverini qayta ishga tushirishimiz shart emas.
- Nosozliklarni tuzatish rejimi Python tuzatuvchisini faollashtiradi. Istisno paytida biz o'zgaruvchilar qiymatlarini tekshirishimiz mumkin.
- Debug rejimi Flask ilovasini tuzatishga imkon beradi. Nosozliklarni tuzatish seanslarida turli oʻzgaruvchilarning qiymatlarini tekshirishimiz mumkin.
Agar u allaqachon ishlayotgan boʻlsa, ishlab chiqish serverini toʻxtating. Xuddi shunday qilish uchun CTRL + C yoki Klaviatura uzilishidan foydalanishingiz mumkin.
Nosozliklarni tuzatish rejimini yoqish va ishlab chiqish serverini vaqtincha ishga tushirish uchun quyidagi koddan foydalaning.
FLASK_ENV=development flask run
Qidiruv Debugger PIN-kodi uchun konsolga o'ting va uni yozib oling.
Endi yuqoridagi yozilgan HelloWorld ko'rinishini kod parchasining quyidagi satrlari bilan o'zgartiramiz. Eʼtibor bering, biz maxsus istisno kiritdik.
@expose("/") def hello(self): raise Exception("A custom exception to learn DEBUG Mode") return "Hello, World! from Software Testing Help"
//localhost:5000/hello/ sahifasiga oʻting va ilova istisno keltirganini koʻrasiz. Brauzer quyida ko'rsatilganidek, stek izini ko'rsatadi.
![](/wp-content/uploads/guides/iae5sr2a76-3.png)
Bundan tashqari, ishlab chiqish serveri ishlayotgan konsolga qarang. Siz bu safar topasizviews.py-dagi o'zgarishlar avtomatik ravishda aniqlanadi va disk raskadrovka serveri o'z-o'zidan qayta ishga tushadi. Endi uni qo'lda qayta ishga tushirishning hojati yo'q.
Quyida ko'rsatilganidek, konsolda chiziqlar bo'ladi. Biz disk raskadrovka PIN-kodini keyinroq yozib olishimiz kerak.
* Detected change in '/work/sth/flaskTutorialApp/app/views.py', reloading 2020-06-02 14:59:49,354:INFO:werkzeug: * Detected change in '/work/sth/flaskTutorialApp/app/views.py', reloading * Restarting with stat 2020-06-02 14:59:49,592:INFO:werkzeug: * Restarting with stat * Debugger is active! * Debugger PIN: 150-849-897
Endi brauzerda stek izini tekshiring va oxirgi qatorga o'ting. Uning ko'rinishini kengaytirish uchun ustiga bosing va interaktiv rejimda qobiqni ochish uchun CLI belgisini bosing.
![](/wp-content/uploads/guides/iae5sr2a76-4.png)
Uni ochganingizdan so'ng, brauzer disk raskadrovka PIN-kod so'rovini ko'rsatishini ko'rasiz. Nosozliklarni tuzatish PIN-kodini bering va OK tugmasini bosing.
![](/wp-content/uploads/guides/iae5sr2a76-5.png)
Nosozliklarni tuzatish PIN-kodini berganimizdan keyin biz interaktiv qobiqqa kira olamiz.
Biz qobiqqa brauzer ichidan va Istisno sababini topish va xatoni yaxshiroq hal qilish uchun o'zgaruvchilar qiymatlarini tekshirishi mumkin. Quyidagi rasmda ko'rsatilgan misollardan birini ko'rib chiqing.
![](/wp-content/uploads/guides/iae5sr2a76-6.png)
Endi quyida ko'rsatilganidek view.py kodini o'zgartiring. E'tibor bering, biz ko'tarilgan Istisnoga ega bo'lgan qatorga izoh berdik.
@expose("/") def hello(self): # raise Exception("A custom exception to learn DEBUG Mode") return "Hello, World! from Software Testing Help"
Flask ilovasini sinovdan o'tkazish
Endi biz ishlab chiqayotgan Flask ilovasi uchun birinchi testimizni yozamiz. Birinchidan, PyTest-ni o'rnating. PyTest - bu sinov tizimi. Bu bizga yaxshiroq kod yozishga yordam beradi.
Bundan tashqari, biz ilovalarni ishlab chiqishda birlik testlarini yozishimiz mumkinligi sababli, TDD yondashuviga amal qilish mumkin. TDD "Test-Driven Development" degan ma'noni anglatadi. Bizning keyingi darslarimizdaUshbu seriyada biz har doim birinchi testlarni yozamiz va o'z qarashlarimiz yoki modellarimizni ishlab chiqamiz.
PyTest-ni o'rnating
pip install pytest
Endi ilovalar katalogida testlar deb nomlangan katalog yarating. test_hello.py nomli fayl yarating. Ko'rinishimizni sinab ko'rish uchun birinchi birlik testimizni yozamiz.
Quyidagi kod parchasidan nusxa oling va test_hello.py saytiga joylashtiring.
#!/usr/bin/env python from app import appbuilder import pytest @pytest.fixture def client(): """ A pytest fixture for test client """ appbuilder.app.config["TESTING"] = True with appbuilder.app.test_client() as client: yield client def test_hello(client): """ A test method to test view hello """ resp = client.get("/hello", follow_redirects=True) assert 200 == resp.status_code
Ishga tushirish uchun quyidagi pytest buyrug'idan foydalaning. testlar. PyTest avtomatik ravishda Testlarni yig'adi va natijalarni standart chiqishda ko'rsatadi.
![](/wp-content/uploads/guides/iae5sr2a76-7.png)
GitHub ish oqimini yaratish
Biz namunaviy ilovamiz uchun CI/CD ish oqimini yaratish uchun Git Actions-dan foydalanamiz. Loyihangiz uchun quyida qayd etilgan amallarni bajaring.
1-qadam: GitHub-dagi ombor sahifasiga o'ting. Git Actions-ni bosing.
![](/wp-content/uploads/guides/iae5sr2a76-8.png)
2-qadam: Sahifani pastga aylantiring va Python paketi uchun mavjud ish jarayoni shablonini toping.
![](/wp-content/uploads/guides/iae5sr2a76-9.png)
3-qadam: Python paketining ish jarayonini sozlang.
![](/wp-content/uploads/guides/iae5sr2a76-10.png)
4-qadam: python-package.yml ish oqimi konfiguratsiyasi ochilgandan so'ng, uni berilgan yaml asosida yangilang. teg qiymatlari.
name: flaskTutorialApp jobs: build: runs-on: ubuntu-latest strategy: matrix: python-version: [3.7, 3.8] mongodb-version: [4.2] steps: - name: Start MongoDB uses: supercharge/[email protected] with: mongodb-version: ${{ matrix.mongodb-version }} # other values
Biz Flask ilovamizni eng soʻnggi Ubuntu Linux distributivida sinab koʻrmoqchimiz. OTga qo'shimcha ravishda biz testlarimizni faqat Python 3.7 va Python 3.8 yordamida o'tkazmoqchimiz.
5-qadam: python-package.yml faylini yangilangan qiymatlar bilan bajaring.
![](/wp-content/uploads/guides/iae5sr2a76-11.png)
6-qadam: Oldingi sahifadagi majburiyat bizni GitActions-ga olib boradiish o'rinlari.
![](/wp-content/uploads/guides/iae5sr2a76-12.png)
7-qadam: [Ixtiyoriy]
Namunaviy o'quv ilovasi uchun Github Jobs sahifasida biz nishon va joy yaratishimiz mumkin uni qurish holatini ko'rsatish uchun README.md faylida.
Endi, har doim o'zgartirishlar master bo'limiga kiritilganda, python-package.yml da yozilganidek, Git Workflow amal qilinadi va Git Actions-da ishlaydi. .
Xulosa
Ushbu oʻquv qoʻllanmada biz Flask – Python-ga asoslangan veb-ishlab chiqish ramkasi yordamida ishlab chiqilgan veb-ilova uchun CI/CD ish jarayonini oʻrnatishgacha boʻlgan barcha asosiy tushunchalarni koʻrib chiqdik.
Ushbu qo'llanma Python-ni o'rnatish, yuklab olish va yuklash kabi barcha kerakli bosqichlarni o'z ichiga oladi. Python yordamida veb-ishlab chiqishni boshlash uchun Flaskni o'rnatish, Flask-Appbuilder bilan ishlash, PyTest bilan sinovdan o'tish va hokazo. Veb-ishlab chiqish hamjamiyati odatda Flask-ni Django deb nomlangan boshqa mashhur Python veb-ishlab chiqish ramkasi bilan taqqoslaydi.
Biz bu farqlarni tushuntirib beramiz va shu qatordagi darsliklardan birida ushbu ramkalarni solishtiramiz.