Tutorial #5: Mga Pattern ng Disenyo ng Flask At Pinakamahuhusay na Kasanayan Para sa Mga Web Application
Tutorial #6: Tutorial sa Flask API na May Halimbawa
Itong panimulang Python Flask tutorial ay nagpapaliwanag kung ano ang Flask, pag-install ng Python, Virtualenv, Flask Hello World halimbawa na may seksyon sa mga halimbawa ng code, pag-debug, at pagsubok:
Ang pagbuo ng website ay higit pa sa isang sining kaysa sa isang kasanayan. Nangangailangan ito ng pasensya at sipag, kasama ng tiyaga, katapangan, at dedikasyon upang lumikha ng kung ano ang kinakailangan para ito ay maging isang tunay na tagumpay. Sa mga araw na ito, mahalaga para sa mga mag-aaral na makakuha ng bilis sa lalong madaling panahon.
Ginawa namin itong Python Flask tutorial para sa mga mag-aaral na makakuha ng bilis at maipatupad ang simple pati na rin ang kumplikadong web programming gamit ang Python 3 .
Ang Python Flask tutorial na ito ay mas katulad ng isang tutorial sa baguhan ng flask, na sasakupin ang pag-install ng Python, Virtualenv, at iba pang mahahalagang pakete. Sa seryeng ito ng mga tutorial, ii-install din namin ang Flask kasama ang iba pang kinakailangang Flask plugin. Nagsama rin kami ng seksyon sa pag-debug ng code, pagsubok, at patuloy na pagsasama gamit ang Git Actions.
Listahan ng Mga Tutorial Sa Serye ng Flask na Ito
Tutorial #1: Python Flask Tutorial – Introduction To Flask For Beginners
Tutorial #2: Flask Template, Form, View, At Redirect With Examples
Tutorial #3: Pangangasiwa sa Flask Database – Paano Gamitin ang Flask Sa Isang Database
Tutorial #4: Flask App At Flask Project Layout na May Blueprint &nabanggit na mga hakbang sa mga paunang kinakailangan.
Hakbang 1: I-install ang Python
Tingnan kung na-install mo ang Python 3 o hindi. Kung hindi, pagkatapos ay i-download ang Python 3 mula dito at i-install ito ayon sa iyong Operating System.
Hakbang 2: Gumawa ng Python Virtual Environment
Gumawa ng virtual na kapaligiran gamit ang below command.
python3 -m venv venv
Gamitin ang command sa ibaba para i-activate ang Python virtual environment.
source venv/bin/activate
Nagbigay kami ng halimbawa ng activation at deactivation ng virtual environment sa ibaba.
Ang lahat ng kasunod na command sa tutorial na ito ay dapat tumakbo sa isang activated virtual environment. I-install ang wheel package para makagawa tayo ng mga gulong sa loob ng virtual na kapaligiran.
pip install wheel
Hakbang 3: I-download At I-insall ang Flask
Kailangan nating gawin ang mga hakbang sa pag-download ng Flask at i-install ang Flask gamit ang mga nabanggit na hakbang sa ibaba.
I-install ngayon ang Flask.
pip install flask
Gusto ng ilan sa amin na magtrabaho kasama ang mga pinakabagong pagbabago sa source code. Magagamit namin ang ibinigay na command sa ibaba upang i-install kasama ang mga pinakabagong pagbabago sa mga pinagmumulan ng Flask.
Gumawa ng pansamantalang direktoryo.
mkdir tmp
I-install ngayon ang Flask mula sa Github repository. Kailangan mong manatiling konektado sa internet para gumana ang command sa ibaba.
pip3 install -e [email protected]:pallets/flask.git#egg=flask
Tingnan ang mga output ng console upang suriin ang matagumpay na pag-install. Ngayon tingnan kung maa-access natin ang mga command ng Flask.
flask --help
Maaari kang makakita ng ilang mga pagbubukod tungkol sa kawalan ng Flaskaplikasyon. Gayunpaman, pabayaan ang mga iyon dahil hindi pa kami nakagawa ng anumang Flask app. Ang aming app ay isang instance ng Flask, na isang wrapper sa Werkzeug web framework at Jinja templating engine.
Werkzeug
Werkzeug ay isang WSGI toolkit. Ang WSGI ay isang calling convention lamang para sa mga web server upang ipasa ang mga kahilingan sa web sa mga web application na nakasulat sa Python programming language.
Jinja
Ang pag-template ay isang mahahalagang kasanayan ng mga web developer. Ang Jinja ay isang ganap na tampok at sikat na templating engine para sa Python. Ito ay isang medyo nagpapahayag na wika at nagbibigay ng matatag na hanay ng mga tool sa mga may-akda ng template.
Hakbang 4: I-install ang MongoDB
Sundin ang mga nabanggit na hakbang sa ibaba upang i-install ang MongoDB. Binalangkas namin ang mga hakbang upang mai-install ito sa isang Linux na nakabase sa Debian. Kung gumagamit ka ng ibang operating system, pagkatapos ay i-access ang link at i-install ayon sa nilalayong operating system.
I-install ang gnupg para sa pag-import ng MongoDB na pampublikong GPG key.
sudo apt-get install gnupg
I-import ngayon ang key gamit ang command sa ibaba.
wget -qO - //www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
Gumawa ng source list file ayon sa iyong pamamahagi ng Linux. Idinagdag namin ang listahan ng mga source ayon sa Debian.
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
Patakbuhin ang update command
sudo apt-get update
I-install ngayon ang MongoDB, gamit ang command sa ibaba.
sudo apt-get install -y mongodb-org
Kapag matagumpay na ang pag-install, simulan ang MongoDB gamit ang command sa ibaba.
sudo systemctl start mongod
Suriin ang status ng MongoDB, gamit ang commandsa ibaba.
sudo systemctl status mongod
Siguraduhin ngayon na awtomatikong magsisimula ang mongod sa pag-reboot ng system sa pamamagitan ng pag-isyu ng command na ipinapakita sa ibaba.
sudo systemctl enable mongod
Ngayon suriin kung magagawa mo kumonekta sa MongoDB server gamit ang mongo client.
mongo
Sa mongo shell, subukang gamitin ang tulong at ipakita ang mga dbs command.
Gumawa ng Flask App
Gamitin ang command sa ibaba para i-install ang flask-appbuilder at mongoengine.
pip install flask-appbuilder pip install mongoengine pip install flask_mongoengine
Gumawa ng skeleton app na may mga value na ipinapakita bilang mga komento sa snippet ng code sa ibaba.
flask fab create-app # Give the following values in the command line questionnaire # Application Name: flaskTutorialApp # EngineType : MongoEngine
Makikita natin ang output na katulad ng ibinigay sa ibaba.
Your new app name: exampleApp Your engine type, SQLAlchemy or MongoEngine (SQLAlchemy, MongoEngine) [SQLAlchemy]: MongoEngine Downloaded the skeleton app, good coding!
Tingnan ang layout ng proyekto at ang app. Ipinakita namin ang output ng tree command sa ibaba.
Tingnan natin ang Flask config file. Ito ay isang default na config na nabuo bilang resulta ng huling utos. Alisin sa komento ang Cyborg na tema, tulad ng ipinapakita sa ibaba.
# 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
Upang patakbuhin ang skeleton app, gamitin ang ibinigay na command sa ibaba sa terminal.
flask run
Flask Hello World
Upang gawin ang iyong unang program sa flaskTutorialApp, buksan ang file views.py sa ilalim ng direktoryo ng app at idagdag ang sumusunod na code. Maghanap ng mga pahayag sa pag-import na ibinigay sa file. Idagdag ang mga pahayag na ito kung wala pa.
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())
I-save ang file pagkatapos idagdag ang source code sa itaas. Pumunta sa root directory ng proyekto at gamitin ang command sa ibaba para patakbuhin ang development server ng Flask.
flask run
Ngayon mag-navigate sa //localhost:5000/hello/ para makita ang output saang browser.
Pag-debug
Sa kasalukuyan, ang development server ay hindi tumatakbo sa Debug mode. Kung walang debugging mode, mahirap hanapin ang mga error sa source code ng Flask Application.
Debug Mode sa Flask ay nagreresulta sa sumusunod:
- Ina-activate ng debug mode ang Awtomatikong reloader. Nangangahulugan ito na hindi namin kailangang i-restart ang development server pagkatapos naming gumawa ng mga pagbabago sa source code ng application.
- Ina-activate ng debug mode ang Python debugger. Maaari naming siyasatin ang mga halaga ng mga variable sa panahon ng Exception.
- Ang debug mode ay nagbibigay-daan sa pag-debug ng Flask application. Maaari naming suriin ang mga halaga ng iba't ibang mga variable sa mga sesyon ng pag-debug.
Ihinto ang development server kung ito ay tumatakbo na. Maaari mong gamitin ang CTRL + C o Keyboard interrupt para gawin din ito.
Gamitin ang sumusunod na code para paganahin ang debug mode at pansamantalang patakbuhin ang development server.
FLASK_ENV=development flask run
Search ang console para sa Debugger PIN at itala ito.
Ngayon, baguhin natin ang nakasulat sa itaas na HelloWorld view gamit ang mga sumusunod na linya ng code snippet. Pansinin na nagpakilala kami ng custom na exception.
@expose("/") def hello(self): raise Exception("A custom exception to learn DEBUG Mode") return "Hello, World! from Software Testing Help"
Mag-navigate sa //localhost:5000/hello/, at makikita mong nagtaas ang application ng exception. Ipinapakita ng browser ang stack trace, tulad ng ipinapakita sa ibaba.
![](/wp-content/uploads/guides/iae5sr2a76-3.png)
Higit pa rito, tingnan ang console kung saan tumatakbo ang development server. Malalaman mo na sa pagkakataong ito, angang mga pagbabago sa views.py ay awtomatikong nade-detect, at ang debug server ay magre-restart nang mag-isa. Ngayon ay hindi na natin ito kailangang manual na i-restart.
Magkakaroon ng mga linya ang console, tulad ng ipinapakita sa ibaba. Kailangan nating tandaan ang Debug PIN para sa ibang pagkakataon.
* 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
Ngayon suriin ang stack trace sa browser at pumunta sa huling linya. Mag-click dito upang palawakin ang view nito at mag-click sa icon ng CLI upang buksan ang shell sa interactive na mode.
![](/wp-content/uploads/guides/iae5sr2a76-4.png)
Kapag binuksan mo ito, makikita mong magpapakita ang browser ng prompt para sa Debug PIN. Ibigay ang Debug PIN at i-click ang OK.
![](/wp-content/uploads/guides/iae5sr2a76-5.png)
Sa sandaling magpatuloy kami pagkatapos ibigay ang Debug PIN, maa-access namin ang interactive na shell.
A-access namin ang shell mula sa loob ng browser at maaaring suriin ang mga halaga ng mga variable upang mahanap ang sanhi ng Exception at pangasiwaan ang error sa isang mas mahusay na paraan. Pakitingnan ang isa sa mga halimbawang ipinapakita sa larawan sa ibaba.
![](/wp-content/uploads/guides/iae5sr2a76-6.png)
Ngayon baguhin ang code sa view.py, tulad ng ipinapakita sa ibaba. Tandaan na nagkomento kami sa linyang nagkaroon ng nakataas na Exception.
@expose("/") def hello(self): # raise Exception("A custom exception to learn DEBUG Mode") return "Hello, World! from Software Testing Help"
Pagsubok sa Flask Application
Ngayon, isulat natin ang aming unang pagsubok para sa Flask application na aming binuo. Una, i-install ang PyTest. Ang PyTest ay isang balangkas ng pagsubok. Nakakatulong ito sa amin na magsulat ng mas mahusay na code.
Higit pa rito, dahil lang sa nakakasulat kami ng mga unit test habang ginagawa ang aming mga application, posibleng sundin ang TDD approach. Ang TDD ay nangangahulugang Test-Driven Development. Sa aming mga kasunod na tutorial ngsa seryeng ito, palagi kaming magsusulat ng mga pagsubok muna at bumuo ng aming mga view o modelo.
I-install ang PyTest
pip install pytest
Ngayon ay lumikha ng isang direktoryo na tinatawag na mga pagsubok sa loob ng direktoryo ng app at doon lumikha ng isang file na tinatawag na test_hello.py. Isulat natin ang ating unang unit test para subukan ang ating view.
Kopyahin ang sumusunod na code snippet at i-paste ito sa test_hello.py.
#!/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
Gamitin ang command na pytest sa ibaba para tumakbo ang mga pagsubok. Awtomatikong kinokolekta ng PyTest ang Mga Pagsusuri at ipinapakita ang mga resulta sa karaniwang output.
![](/wp-content/uploads/guides/iae5sr2a76-7.png)
Lumikha ng GitHub Workflow
Gumagamit kami ng Git Actions para gumawa ng CI/CD workflow para sa aming sample na application. Sundin ang mga hakbang na binanggit sa ibaba para sa iyong proyekto.
Hakbang 1: Mag-navigate sa pahina ng repositoryo sa GitHub. Mag-click sa Git Actions.
![](/wp-content/uploads/guides/iae5sr2a76-8.png)
Hakbang 2: Mag-scroll pababa sa page at maghanap ng kasalukuyang workflow template para sa isang Python package.
![](/wp-content/uploads/guides/iae5sr2a76-9.png)
Hakbang 3: I-set up ang Workflow ng Python package.
![](/wp-content/uploads/guides/iae5sr2a76-10.png)
Hakbang 4: Kapag nagbukas na ang configuration ng workflow ng python-package.yml, i-update ito batay sa ibinigay na karagdagang yaml tag values.
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
Gusto naming subukan ang aming Flask application sa pinakabagong pamamahagi ng Ubuntu Linux. Bilang karagdagan sa OS, gusto naming patakbuhin ang aming mga pagsubok gamit lang ang Python 3.7 at Python 3.8.
Hakbang 5: I-commit ang python-package.yml na may mga na-update na value.
![](/wp-content/uploads/guides/iae5sr2a76-11.png)
Hakbang 6: Ang commit sa nakaraang page ay magdadala sa amin sa GitActionsmga trabaho.
![](/wp-content/uploads/guides/iae5sr2a76-12.png)
Hakbang 7: [Opsyonal]
Sa pahina ng Mga Trabaho sa Github para sa sample na tutorial app, maaari tayong gumawa ng badge at lugar ito sa README.md file para sa pagpapakita ng status ng build.
Ngayon, sa tuwing ang mga pagbabago ay gagawin sa master branch, ang Git Workflow, gaya ng nakasulat sa python-package.yml ay susundan at tatakbo sa Git Actions .
Konklusyon
Sa tutorial na ito, sinaklaw namin ang lahat ng batayang konsepto mula sa mga kinakailangan hanggang sa pag-set up ng CI/CD workflow para sa isang web application na binuo gamit ang Flask – Isang Python-based na web development framework.
Sinasaklaw ng tutorial na ito ang lahat ng kinakailangang hakbang gaya ng pag-install ng Python, pag-download ng & pag-install ng Flask, pagtatrabaho sa Flask-Appbuilder, pagsubok sa PyTest, atbp. upang makapagsimula sa web development gamit ang Python. Karaniwang ikinukumpara ng komunidad ng web development ang Flask sa isa pang sikat na Python web development framework na tinatawag na Django.
Ipapaliwanag namin ang mga pagkakaibang ito at ihahambing din ang mga framework na ito sa isa sa mga tutorial sa seryeng ito.