Ачааллж байна...
Программ бичихээс өмнө программ бичих газраа бэлдэх ёстой. Энэ нь тогооч хоол хийхээсээ өмнө гал тогоогоо цэгцэлдэгтэй адил юм. Курс 2-ын Бүлэг 1-д та virtual environment (товчоор venv) гэж юу болохыг сурсан: төсөл бүрт зориулсан тусдаа өрөө, тэр өрөөнд суулгасан package-ууд өөр төсөлд нөлөөлдөггүй, өөр төслийн package-ууд ч энд орж ирдэггүй. Тэр мэдлэг энэ хичээлээс эхлээд сургалтын төгсгөл хүртэл өдөр бүр ажиллана.
Энэ хичээлд бид дөрвөн зүйл хийнэ: төслийн хавтас үүсгэх, venv үүсгэж идэвхжүүлэх, FastAPI суулгах, эхний серверээ асааж browser дээрээ хариуг нь харах. Алхам бүрийг дугаарлаж, тухайн алхамд гарч болох алдааг яг тэнд нь шийдэж өгнө. Яарах шаардлагагүй — энэ орчин таныг сургалтын турш дагалдана.
Эхлээд нэг зуршлыг тогтооё, учир нь энэ сургалтын бүх хичээл түүн дээр тулгуурлана. Та хоёр цонхтой ажиллана.
Нэг цонх бол таны editor (VS Code) — энд та код бичнэ. Нөгөө цонх бол терминал — энд сервер ажиллаж байна. Терминалын цонх хаагдахгүй, тасалдахгүй, зүгээр л ажиллаад сууна. Та editor дээрээ кодоо өөрчилж, хадгалахад терминал дээрх сервер өөрөө анзаарч, өөрийгөө шинэчилнэ. Дараа нь та browser-оо шинэчлээд өөрчлөлтөө шууд харна.
Энэ гурвалсан хэмнэл — бич, хадгал, browser-оо шинэчил — энэ сургалтын үндсэн хөдөлгөөн юм. Эхэндээ гурван цонх хооронд гүйх нь бага зэрэг эвгүй санагдаж болох ч хэдхэн хичээлийн дараа энэ нь автоматаар болно.
Компьютер дээрээ өөрт тохиромжтой газар шинэ хавтас үүсгэнэ үү. Жишээ нь Documents дотор fastapi-course гэсэн нэртэй хавтас. Хавтасны нэрэнд кирилл үсэг, хоосон зай, тусгай тэмдэгт хэрэглэхээс зайлсхийвэл хожим гарах олон жижиг асуудлаас урьдчилан сэргийлнэ — латин үсэг, тоо, зураас л ашиглаарай.
Дараа нь VS Code-оо нээж, File цэснээс Open Folder сонгоод энэ хавтсаа нээнэ үү. VS Code одоо энэ хавтсыг таны ажлын талбар гэж үзнэ.
Одоо VS Code дотроос терминал нээнэ. Дээд цэсний Terminal -> New Terminal. Доор нь терминалын цонх нээгдэж, мөрийн эхэнд таны хавтасны зам харагдана. Ойролцоогоор ийм харагдана:
PS C:\Users\Дулгуун\Documents\fastapi-course>(Энд screenshot тавих боломжтой: VS Code нээлттэй, доор терминал харагдаж байгаа байдал.)
Терминал дээрээ дараах тушаалыг бичээд Enter дарна:
python -m venv venvХэдэн секунд юу ч болоогүй мэт харагдаад дараа нь дахин шинэ мөр гарч ирнэ. Гэхдээ бодит байдал дээр их зүйл болсон: таны хавтас дотор venv гэсэн шинэ хавтас үүссэн. VS Code-ийн зүүн талын файлын жагсаалт дээр та түүнийг харах болно. Энэ хавтас бол таны "тусдаа өрөө" — энэ төсөлд суулгах бүх package энд орох болно.
Тушаалын бүтцийг задалж харъя. python бол Python-ыг дуудаж байна. -m venv бол "venv гэдэг модулийг ажиллуул" гэсэн үг. Сүүлийн venv бол үүсгэх хавтасны нэр. Хоёр venv хажуулдаа байгаа нь эхэндээ ойлгомжгүй харагддаг, гэхдээ эхнийх нь хэрэгсэл, хоёр дахь нь үр дүн юм.
Хэрэв алдаа гарвал
Хэрэв python гэдэг тушаалыг олохгүй гэсэн алдаа гарвал:
python : The term 'python' is not recognized as the name of a cmdlet, function, script file, or operable program.Энэ нь Python таны компьютер дээр суулгагдаагүй, эсвэл PATH дээр бүртгэгдээгүй гэсэн үг. Курс 1-ийн суулгах хичээлд буцаж очоод шалгана уу. Заримдаа python биш py гэж бичихэд ажилладаг (Windows дээр): py -m venv venv.
Өрөө үүссэн боловч та түүн рүү орсонгүй. Одоо орно:
.\venv\Scripts\ActivateАмжилттай болвол мөрийн эхэнд хаалттай (venv) гэсэн бичиг гарч ирнэ:
(venv) PS C:\Users\Дулгуун\Documents\fastapi-course>Энэ (venv) бол энэ сургалтын хамгийн чухал жижиг тэмдэг юм. Тэр байгаа цагт та тусдаа өрөөндөө байна. Тэр байхгүй бол та гадаа байна, тэгвэл суулгасан package-ууд тань олдохгүй. Сургалтын турш алдаа гарах бүрт хамгийн түрүүнд шалгах зүйл бол энэ — та (venv) харагдаж байна уу?
Хэрэв алдаа гарвал: execution policy
Windows дээр анх удаа энэ тушаалыг өгөхөд ийм алдаа гарах нь маш түгээмэл:
.\venv\Scripts\Activate : File C:\Users\...\venv\Scripts\Activate.ps1 cannot be loaded because running scripts is disabled on this system.Энэ нь Windows аюулгүй байдлын үүднээс script ажиллуулахыг хориглосон гэсэн үг. Курс 2-т та үүнтэй уулзсан. Шийдэл нь терминал дээр дараах тушаалыг нэг удаа өгөх:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSignedАсуулт гарч ирвэл Y бичээд Enter дарна. Дараа нь идэвхжүүлэх тушаалаа дахин өгнө. Энэ тохиргоо зөвхөн таны хэрэглэгчид хамаарах бөгөөд компьютерийг тань аюултай болгохгүй.
(venv) харагдаж байгаа эсэхийг дахин шалгаад дараах тушаалыг өгнө:
pip install "fastapi[standard]"Хашилт заавал байх ёстой — тэдгээргүй бол зарим терминал дөрвөлжин хаалтыг өөрөөр ойлгож алдаа өгдөг.
Хэдэн арван мөр текст урсаж, олон package суух болно. Төгсгөлд нь ойролцоогоор ийм мөр харагдана:
Successfully installed fastapi-0.139.0 starlette-0.51.0 uvicorn-0.40.0 ...Юу болсныг тайлбарлая. fastapi бол бидний framework. Харин [standard] гэсэн хэсэг нь "FastAPI-тай хамт ердийн ажилд хэрэгтэй бүх зүйлийг суулга" гэсэн үг бөгөөд түүний дотор uvicorn гэдэг зүйл байна. Uvicorn бол жинхэнэ сервер программ — таны кодыг ажиллуулж, сүлжээнээс ирсэн хүсэлтийг хүлээж авдаг нь тэр. FastAPI бол таны бичсэн логик; uvicorn бол түүнийг гадаад ертөнцөд хүргэдэг машин. Бид хоёуланг нь ашиглах боловч uvicorn-ыг шууд дуудахгүй — доор үүнийг тайлбарлана.
VS Code-ийн файлын жагсаалт дээр баруун товшоод (эсвэл шинэ файлын товч дарж) main.py гэсэн файл үүсгэнэ. Файл заавал төслийн хавтасны үндсэн түвшинд байх ёстой — venv хавтас дотор биш.
Дараах кодыг бичнэ:
python
# main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def root():
return {"мэссэж": "Сайн байна уу"}Мөр мөрөөр нь тайлбарлая.
from fastapi import FastAPI — суулгасан package-аас FastAPI гэдэг class-ыг авч байна. Курс 2-оос та import хэрхэн ажилладгийг мэднэ.
app = FastAPI() — тэр class-аас нэг объект үүсгэж, app гэж нэрлэлээ. Энэ app бол таны бүх аппликейшн. Цаашид endpoint нэмэх бүрт та энэ объект руу нэмнэ. Нэрийг нь app гэж өгөх нь заавал биш боловч бүх дэлхий тэгж нэрлэдэг тул бид ч бас тэгнэ.
@app.get("/") — энэ бол decorator. Курс 2-ын Бүлэг 10-д та decorator гэж юу болохыг сурсан: бэлгийг боох цаас, бэлгээ өөрчлөхгүйгээр түүнд нэмэлт өгдөг. Энд яг тэр зүйл болж байна. Доорх функц өөрөө ямар ч онцгой зүйл биш, гэхдээ энэ decorator түүнийг FastAPI-д бүртгүүлж, "хэн нэгэн / гэсэн хаяг руу GET хүсэлт илгээвэл энэ функцийг дууд" гэж хэлж байна. Курс 2-т бид энэ мөрийг зөвхөн холоос харуулж, "тайлбарыг нь дараа" гэж амласан. Одоо тэр амлалт биелж эхэлж байна — бүрэн задаргааг Бүлэг 2-т хийнэ.
def root(): — энгийн Python функц. Нэрийг нь юу ч гэж болно; FastAPI функцийн нэрийг тоохгүй, зөвхөн decorator дээрх хаягийг тооно.
return {"мэссэж": "Сайн байна уу"} — энэ бол энгийн Python dictionary. Гэхдээ FastAPI түүнийг автоматаар JSON болгож хувиргаад хэрэглэгч рүү илгээнэ. Курс 2-ын Бүлэг 6-д та JSON-ыг гар аргаар уншиж, бичиж байсан. Одоо тэр ажлыг framework тань хийж өгч байна.
Файлаа заавал хадгална (Ctrl+S). Хадгалаагүй код байхгүйтэй адил.
Терминал дээрээ ((venv) харагдаж байгаа эсэхийг шалгаад) дараах тушаалыг өгнө:
fastapi dev main.pyТерминал дээр хэдэн мөр гарч ирнэ. Хамгийн чухал нь энэ хоёр:
Server started at http://127.0.0.1:8000
Documentation at http://127.0.0.1:8000/docsТаны компьютер дээр сервер ажиллаж байна. Энэ бол жинхэнэ вэб сервер — таны бичсэн код одоо хүсэлт хүлээж сууна.
http://127.0.0.1:8000 гэдгийг задалъя. 127.0.0.1 бол "энэ компьютер өөрөө" гэсэн утгатай тусгай хаяг (localhost гэж бас нэрлэдэг). Өөрөөр хэлбэл энэ сервер интернэтэд гараагүй, зөвхөн таны компьютер дотор ажиллаж байна — дэлхийн хэн ч түүн рүү хандаж чадахгүй. 8000 бол port дугаар: нэг компьютер дээр олон сервер зэрэг ажиллаж болдог тул тус бүр өөрийн дугаартай байдаг.
(Энд screenshot тавих боломжтой: терминал дээр сервер асаж, тэр хоёр мөр харагдаж байгаа байдал.)
Uvicorn хаана байна вэ
Дээр дурдсан uvicorn яг одоо ажиллаж байна — fastapi dev тушаал түүнийг таны өмнөөс асаасан. Энэ бол шинэ, товчилсон арга юм.
Үүнийг мэдэж байх хэрэгтэй, учир нь та интернэтээс FastAPI-ийн талаар хайх бүрт хуучин бичлэгтэй тааралдана:
uvicorn main:app --reloadЭнэ мөр яг ижил зүйл хийдэг: uvicorn-ыг шууд дуудаж, main файлын app объектыг ажиллуул, өөрчлөлт гарвал автоматаар дахин ач гэж хэлж байна. Хоёулаа зөв. Бид шинэ бичлэгийг ашиглах болно, гэхдээ хуучныг харахад та "аа, энэ бол ижил зүйл" гэж таних болно. Бүлэг 15-д, deployment ярихдаа бид uvicorn руу дахин эргэж очно, учир нь бодит production дээр fastapi dev ашигладаггүй.
Browser нээгээд хаягийн мөрөнд бичнэ:
http://127.0.0.1:8000Дэлгэц дээр ийм зүйл харагдана:
json
{"мэссэж":"Сайн байна уу"}Энэ бол таны API-ийн эхний хариу. Та хүсэлт (request) илгээлээ — browser-ийн хаягийн мөрөнд хаяг бичиж Enter дарах нь GET хүсэлт илгээх хамгийн энгийн арга. Сервер тань хүлээж авч, root() функцийг дуудаж, dictionary буцааж, FastAPI түүнийг JSON болгож илгээв. Курс 2-т та бусдын API-аас яг ийм JSON хүлээж авч байсан. Одоо энэ JSON-ыг та илгээж байна.
Анзаараарай: түлхүүр үг ("мэссэж") кирилл үсгээр байсан ч ажиллаж байна. Гэхдээ ирээдүйд бид JSON түлхүүрүүдийг латин үсгээр бичих болно — яагаад гэдгийг Бүлэг 3-т тайлбарлана. Одоохондоо энэ нь техникийн хувьд боломжтой гэдгийг л мэдээд орхиё.
Editor дээрээ буцаж очоод хариултаа өөрчилнө:
python
# main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def root():
return {"мэссэж": "Миний анхны API"}Хадгална (Ctrl+S). Терминал руугаа хараарай — тэнд шинэ мөр гарч ирнэ, сервер өөрийгөө дахин ачаалсан гэсэн мэдэгдэл. Одоо browser-оо шинэчилнэ (F5):
json
{"мэссэж":"Миний анхны API"}Та серверээ унтраагаагүй, дахин асаагаагүй. fastapi dev таны файлыг ажиглаж сууж байгаа бөгөөд өөрчлөлт хадгалагдах бүрт өөрөө шинэчилдэг. Энэ бол хөгжүүлэлтийн үеийн тав тух юм.
Хэрэв өөрчлөлт харагдахгүй бол — терминал дээр reload болсныг шалгаарай. Терминал дээр шинэ мөр гараагүй бол файлаа хадгалаагүй байх магадлалтай.
Терминал дээр товшоод Ctrl+C дарна. Сервер зогсоно, ердийн мөр буцаж ирнэ.
Терминалын цонхыг зүгээр хааж болно, гэхдээ Ctrl+C бол зөв арга. Сервер ажиллаж байхад терминал "эзлэгдсэн" байдаг — өөр тушаал бичих боломжгүй. Шинэ тушаал өгөх шаардлагатай бол эсвэл серверээ зогсоо, эсвэл хоёр дахь терминал нээ (VS Code-ийн терминал хэсэгт + товч байна).
ModuleNotFoundError: No module named 'fastapi'
ModuleNotFoundError: No module named 'fastapi'Энэ бол энэ сургалтын хамгийн түгээмэл алдаа бөгөөд түүний шалтгаан бараг үргэлж ижил байдаг: venv идэвхгүй байна. Терминал шинээр нээгдэх бүрт venv автоматаар идэвхжихгүй — та гараар идэвхжүүлэх ёстой.
Мөрийн эхийг хараарай. (venv) байна уу? Байхгүй бол:
.\venv\Scripts\ActivateХэрэв ModuleNotFoundError гарвал — venv идэвхтэй эсэхээ шалгаарай. Энэ өгүүлбэрийг сургалтын турш олон удаа давтана, учир нь энэ алдаа олон удаа гарна. Ичих зүйл биш — туршлагатай хөгжүүлэгчид ч өдөр бүр үүнийг мартдаг.
Address already in use
ERROR: [Errno 10048] error while attempting to bind on address ('127.0.0.1', 8000): only one usage of each socket address is normally permittedЭнэ нь 8000 дугаартай port аль хэдийн эзлэгдсэн гэсэн үг. Ихэвчлэн та өмнөх серверээ зогсоолгүй мартсан байдаг — өөр терминалын цонх нээлттэй, тэнд сервер ажиллаж байна.
Хоёр шийдэл бий. Эхнийх нь: хуучин терминалаа олоод Ctrl+C дарж зогсоо. Хоёр дахь нь: өөр port ашигла.
fastapi dev main.py --port 8001Тэгвэл таны сервер http://127.0.0.1:8001 дээр ажиллана. Browser дээрээ хаягаа зөв бичихээ мартуузай.
Тушаал олдохгүй
fastapi : The term 'fastapi' is not recognized...Энэ нь дахиад л venv идэвхгүй байгаагийн шинж (fastapi тушаал venv дотор суусан) эсвэл суулгалт амжилтгүй болсон гэсэн үг. Эхлээд venv-ээ идэвхжүүлээд, дараа нь дахин оролдоно уу. Хэрэв venv идэвхтэй байхад ч ажиллахгүй бол:
pip install "fastapi[standard]"тушаалыг дахин өгч, Successfully installed гэсэн мөр гарч ирж байгаа эсэхийг шалгана уу.
Хүсвэл кодоо жаахан өөрчилж үзээрэй. Жишээ нь буцаах dictionary-д хоёр дахь түлхүүр нэмж болно, эсвэл тоо буцааж болно. Хадгалаад browser-оо шинэчилээд юу болохыг харна уу. Хэрэв юу ч эвдэрвэл санаа зовох хэрэггүй — энэ бол таны компьютер дээрх жижиг файл, дахин бичихэд хэдхэн секунд болно.
Сонирхвол терминал дээр гарч ирсэн хоёр дахь хаяг — http://127.0.0.1:8000/docs — руу орж үзээрэй. Тэнд юу байгааг та мэдэхгүй байж магадгүй, бүрэн ойлгох ч шаардлагагүй. Дараагийн хичээл бүхэлдээ тэр хуудсанд зориулагдана.
Төсөл бүр өөрийн venv-тэй байна: python -m venv venv, дараа нь .\venv\Scripts\Activate.
Мөрийн эхэнд (venv) харагдаж байгаа эсэхийг үргэлж шалгана. Ихэнх алдааны шалтгаан энэ.
Суулгах: pip install "fastapi[standard]". Ажиллуулах: fastapi dev main.py.
app = FastAPI() бол таны аппликейшн; @app.get("/") бол хаягийг функцтэй холбож буй decorator.
Функцээс буцаасан dictionary автоматаар JSON болно.
Файлаа хадгалахад сервер өөрөө reload болно. Зогсоох: Ctrl+C.
Хоёр цонхны зуршил: editor дээр бич, терминал дээр сервер ажиллуул, browser дээр хар.
Дараагийн хичээл дээр бид /docs хаягийг нээнэ. Тэнд FastAPI таны кодоос автоматаар үүсгэсэн интерактив баримт бичиг байх бөгөөд та түүн дээрээс endpoint-үүдээ шууд туршиж чадна. Энэ хуудас нь сургалтын турш таны лаборатори болно.
Бүртгэлтэй болсноор энэ сургалтын бүх хичээлд хандах эрх авна.