مقدمه: آمادهسازی محیط کار
پیش از جلسه اول، محیط کار را آماده میکنیم: پایتون و محیط مجازی، VS Code، برنامه Bruno برای آزمودن API، یک نمایشگر SQLite و در صورت نیاز PostgreSQL. در پایان فصل، اولین سرور FastAPI را اجرا میکنیم تا مطمئن شویم همه چیز سر جایش است.
۱. بکاند چیست و FastAPI کجای کار است
وقتی در یک اپلیکیشن ثبتنام میکنید، آنچه روی صفحه میبینید فرانتاند است. اما ذخیره کاربر، بررسی رمز، پیدا کردن دورهها و جلوگیری از ثبتنام بیش از ظرفیت در جای دیگری اتفاق میافتد: روی یک سرور، در برنامهای که بکاند نام دارد. فرانتاند و بکاند با هم از راه HTTP حرف میزنند و بکاند معمولاً پاسخهایش را به شکل JSON برمیگرداند. به چنین بکاندی یک API میگوییم.
FastAPI یک چارچوب پایتونی برای ساختن همین APIهاست. سه ویژگی آن را محبوب کرده است:
- از راهنمای نوع پایتون (type hints) استفاده میکند: همان
intوstr | Noneکه در دوره پیشرفته دیدید، اینجا داده ورودی را خودکار تبدیل و بررسی میکند. - برای هر API یک مستند زنده میسازد که در مرورگر باز میشود و میتوان همانجا درخواست فرستاد.
- از پایه برای
asyncساخته شده است و هزاران درخواست همزمان را با یک فرایند پاسخ میدهد.
اگر دوره پایتون پیشرفته را گذرانده باشید، Flask را دیدهاید. Flask برای سایتهایی با قالب HTML عالی است. FastAPI برای API ساخته شده است: اعتبارسنجی، مستندسازی و تزریق وابستگی در خودش هست و لازم نیست جداگانه اضافه شود.
۲. پایتون و محیط مجازی
نسخه ۳٫۱۲ یا بالاتر پایتون را از python.org نصب کنید. در ویندوز، هنگام نصب گزینه Add python.exe to PATH را حتماً تیک بزنید. بعد در ترمینال بررسی کنید:
python --version Python 3.13.5
هر جلسه این دوره پوشه خودش و فایل requirements.txt خودش را دارد. کتابخانهها را هرگز روی پایتون اصلی سیستم نصب نکنید؛ برای هر جلسه یا پروژه یک محیط مجازی بسازید:
cd S02-fastapi-first-steps python -m venv .venv .venv\Scripts\activate # Windows source .venv/bin/activate # Linux / macOS pip install -r requirements.txt
بعد از فعال شدن محیط، نام آن در ابتدای خط ترمینال دیده میشود: (.venv). هر بار که ترمینال تازهای باز میکنید، باید دوباره فعالش کنید.
محیط مجازی با یک فرمان از روی requirements.txt دوباره ساخته میشود. به همین دلیل در فایل .gitignore مخزن آمده است. همینطور فایلهای .env که رمز و کلید دارند.
۳. ویرایشگر VS Code
VS Code را نصب کنید و این افزونهها را اضافه کنید:
- Python (از Microsoft): اجرا، اشکالزدایی و انتخاب محیط مجازی.
- Pylance: بررسی نوعها هنگام نوشتن. در این دوره خیلی به کارتان میآید، چون همه کدها راهنمای نوع دارند.
- SQLite Viewer: دیدن محتوای فایلهای
.dbبدون نصب برنامه جداگانه.
پوشه یک جلسه را با File → Open Folder باز کنید و از پایین پنجره، مفسر پایتون را روی محیط مجازی همان پوشه بگذارید.
۴. Bruno: میز کار API
در این دوره به جای مرورگر، با برنامهای به نام Bruno به API درخواست میفرستیم. در Bruno روش (GET، POST و...)، نشانی، هدرها و بدنه JSON را مینویسید، دکمه ارسال را میزنید و کد وضعیت و پاسخ را میبینید.
دلیل انتخاب Bruno این است که هر مجموعه درخواست، یک پوشه از فایلهای متنی ساده با پسوند .bru است. این پوشه کنار کد پروژه در Git قرار میگیرد و به حساب کاربری نیازی ندارد. از جلسه دوم، پروژه هر جلسه یک پوشه bruno/ دارد. اگر با Postman آشنا هستید، آن هم کار میکند.
برای باز کردن یک مجموعه: Open Collection را بزنید، پوشه bruno پروژه را انتخاب کنید و از بالا سمت راست، محیط local را برگزینید.
meta {
name: Get course 1
type: http
seq: 3
}
get {
url: {{baseUrl}}/courses/1
body: none
auth: none
}
tests {
test("status is 200", function() {
expect(res.status).to.equal(200);
});
}
هر فایل .bru یک درخواست است. {{baseUrl}} یک متغیر محیط است و بخش tests بعد از هر اجرا کد وضعیت را بررسی میکند.
۵. SQLite و در صورت نیاز PostgreSQL
از فصل پنجم، پروژه یک پایگاه داده واقعی دارد. در کلاس از SQLite استفاده میکنیم: پایگاه دادهای که فقط یک فایل است و به نصب هیچ چیزی نیاز ندارد. پایتون آن را همراه خودش دارد.
سرورهای واقعی معمولاً از PostgreSQL استفاده میکنند. خوشبختانه با SQLAlchemy برای رفتن از SQLite به PostgreSQL فقط باید نشانی اتصال را عوض کرد. PostgreSQL را مستقیم روی ویندوز ۱۱ یا اوبونتوی خودتان نصب میکنیم و بعد مثل یک سرویس در پسزمینه اجرا میشود. روش نصب قدمبهقدم در فصل پنجم آمده است و تا آن وقت لازم نیست کاری بکنید.
۶. اولین سرور
برای اطمینان از اینکه همه چیز درست نصب شده است، اولین برنامه FastAPI را اجرا کنید:
import uvicorn
from fastapi import FastAPI
app = FastAPI(title='Training Center API', version='0.1.0')
@app.get('/')
def home() -> dict[str, str]:
return {'message': 'Welcome to the Training Center API'}
@app.get('/about')
def about() -> dict[str, str | int]:
"""This docstring appears in /docs."""
return {'institute': 'Kadoos', 'city': 'Rasht', 'sessions': 16}
if __name__ == '__main__':
uvicorn.run('app:app', reload=True)
اولین سرور: نمونه S02-fastapi-first-steps/01_first_app/app.py
cd S02-fastapi-first-steps/01_first_app python app.py INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
حالا این سه نشانی را در مرورگر باز کنید:
http://127.0.0.1:8000/: پاسخ JSON برنامه.http://127.0.0.1:8000/docs: رابط Swagger. روی هر endpoint بزنید، Try it out و بعد Execute را انتخاب کنید.http://127.0.0.1:8000/redoc: همان مستند، برای خواندن.
در فایل app.py پیام خوشآمدگویی را عوض کنید و فایل را ذخیره کنید. سرور خودش دوباره راه میافتد (به خاطر reload=True). صفحه را تازه کنید و تغییر را ببینید.
۷. نقشه راه دوره
| جلسه | موضوع | قدم پروژه |
|---|---|---|
| ۱ | مرور پایتون پیشرفته، HTTP و REST | هسته پروژه با پایتون خالص |
| ۲ | قدمهای اول FastAPI | اولین API با داده در حافظه |
| ۳ | Pydantic و اعتبارسنجی | طرحوارههای ورودی و خروجی |
| ۴ | تزریق وابستگی و ساختار | پروژه به یک بسته منظم تبدیل میشود |
| ۵ | مدلهای SQLAlchemy | پایگاه داده واقعی |
| ۶ | CRUD با SQLAlchemy | ویرایش و حذف و جستوجو |
| ۷ | رابطهها | ثبتنام دانشجو در دوره |
| ۸ | Alembic و صفحهبندی | مهاجرت و فهرست حرفهای |
| ۹ | احراز هویت | ثبتنام و ورود با رمز امن |
| ۱۰ | JWT و نقشها | دسترسی بر اساس نقش و مالکیت |
| ۱۱ | فایل، کوکی و CORS | فایلهای درسی |
| ۱۲ | async | تبدیل کامل پروژه به ناهمگام |
| ۱۳ | آزمون خودکار | پنجاه و یک آزمون برای پروژه |
| ۱۴ | کلاینت REST | کلاینت پایتونی پروژه |
| ۱۵ | کلاینت async | برنامه داشبورد مدرس |
| ۱۶ | پروژه پایانی | رفع باگ، تکمیل و بازبینی کد |
فایلهای دوره در شانزده پوشه به نامهای S01-... تا S16-... قرار دارند. هر پوشه یک README.md با هدف جلسه و تقسیم زمان، یک exercises.md با تمرینها و یک requirements.txt دارد. نمونهها شمارهگذاری شدهاند و آخرین پوشه هر جلسه پروژه همان جلسه است.
۸. خلاصه فصل
| ابزار | کاربرد |
|---|---|
python -m venv .venv | ساختن محیط مجازی برای هر جلسه |
pip install -r requirements.txt | نصب کتابخانههای همان جلسه |
| VS Code + Python + Pylance | نوشتن کد با بررسی نوع |
| Bruno | فرستادن و آزمودن درخواستها، ذخیره آنها در Git |
| SQLite | پایگاه داده بدون نصب، برای کلاس |
| PostgreSQL | پایگاه داده سرورهای واقعی، روی ویندوز یا اوبونتو |
/docs و /redoc | مستند زندهای که FastAPI میسازد |
تمرینهای این فصل
- پایتون و VS Code را نصب کنید و نسخه پایتون را بررسی کنید.
- برای پوشه
S02-fastapi-first-stepsیک محیط مجازی بسازید و کتابخانهها را نصب کنید. - نمونه
01_first_appرا اجرا کنید و هر سه نشانی/،/docsو/redocرا باز کنید. - Bruno را نصب کنید و مجموعه
S01-python-refresh-and-rest/13_bruno_first_requestsرا باز کنید. هر چهار درخواست را اجرا کنید. - در Bruno یک درخواست تازه بسازید که
GET http://127.0.0.1:8000/aboutرا صدا بزند. - راهنمای نصب PostgreSQL را در پوشه
S05-sqlalchemy-models/05_postgresqlبخوانید و ببینید برای سیستمعامل شما کدام فرمانها لازم است.