پایتون برای بکاند در ۱۲ شب؛ از نخستین برنامه تا HTTPS
این دوره برای خوانندهای است که با ترمینال لینوکس و مفهوم فایل آشناست و میخواهد برنامهنویسی پایتون را با مثالهای زیرساخت یاد بگیرد. از کارت مشخصات سرور و گزارش دیسک شروع میکنیم و به API دارای اعتبارسنجی، پایگاه داده، کلید دسترسی، آزمون و HTTPS محلی میرسیم. آشنایی قبلی با پایتون لازم نیست؛ هر ابزار در مرحلهای معرفی میشود که مسئلهٔ مشخصی را حل میکند.
شیوهٔ استفاده از دوره#
جلسهها را به ترتیب فهرست بخوانید. هر شب یک هدف آموزشی دارد و نثر آن برای حدود ۵ تا ۱۰ دقیقه مطالعه تنظیم شده است. قرارداد تحریری این برآورد ۱۸۰ واژه در دقیقه است؛ خواندن کد، نصب، اجرای فرمان، تمرین و عیبیابی زمان جدا میخواهند. برای تمرینهای ابتدایی حدود نیم ساعت و بخش API و کانتینر حدود یک ساعت یا بیشتر کنار بگذارید؛ این زمانها برآوردند.
مسیر کار محلی ~/python-backend/night-NN است. شبهای نخست نمونههای مستقل دارند؛ از شب نهم، main.py مبنای برنامهٔ پایدار است و شبهای بعد آن را گسترش میدهند. فایل کامل یک شب را با فایل کامل شب قبلی پشت سر هم ادغام نکنید. هرجا فقط بخشی تغییر میکند، محل تغییر توضیح داده شده است. برای ترتیب مطالعه از همین فهرست استفاده کنید؛ پیوند زمانی قبلی و بعدی سایت لزوماً ترتیب دوره را نشان نمیدهد.
خروجیهای داخل درسها نمونهٔ مورد انتظار هستند و به معنی اجرای همهٔ فرمانها روی هر محیط نیستند. موفقیت ساخت سایت هم به معنی اجرای Docker یا آزمون برنامه نیست. برای تمرین از دادهٔ ساختگی و پایگاه جدا استفاده کنید؛ هیچ کلید واقعی یا فهرست زیرساخت خصوصی را وارد مخزن عمومی نکنید.
محیط آزمایشگاه#
مبنای دستورها Bash روی Ubuntu با Python 3.11 یا جدیدتر است. مثال تصویر کانتینر از python:3.14-slim استفاده میکند. برای شبهای اول کتابخانهٔ استاندارد کافی است؛ از شب پنجم venv و pip، از شب ششم Requests و از شب هفتم FastAPI با Pydantic نسخهٔ دوم لازم میشود. pytest و TestClient در شب دهم اضافه میشوند. نسخههای نصبشده را در محیط مجازی پروژه ثبت کنید.
برای دو شب پایانی Docker Engine، Compose نسخهٔ دوم و OpenSSL لازماند. نصب و مدیریت موتور Docker در دامنهٔ این مجموعه نیست. دریافت بستهها و تصویرها نیازمند اینترنت یا مخزن محلی آماده است؛ اجرای معمول مثالها به سرویس خارجی وابسته نیست. رابط /docs ممکن است برای داراییهای نمایشی به شبکه نیاز داشته باشد؛ مسیر API را جدا با curl بررسی کنید.
نشانیهای 192.168.10.* فقط دادهٔ نمونهٔ فهرستاند و برنامه به آنها وصل نمیشود. تا شب یازدهم API روی loopback درگاه 8000 است. شب دوازدهم فقط Nginx روی loopback درگاههای 8080 و 8443 منتشر میشود. پیش از رفتن به پروژهٔ بعدی، سرور یا مجموعهٔ قبلی را متوقف کنید تا آزمون به سرویس اشتباه وصل نشود. در آزمونهای پایگاه از مسیر موقت استفاده میکنیم.
این مجموعه یک آزمایشگاه محلی بکاند است؛ نام دوره به معنی آمادگی کامل برای انتشار عمومی نیست. مدیریت هویت چندکاربره، مهاجرت طرح پایگاه، پشتیبانگیری عملیاتی، محدودیت نرخ و خودکارسازی صدور و تمدید گواهی به طراحی جدا نیاز دارند. TLS شب آخر با گواهی خودامضای کوتاهعمر و اعتماد صریح کلاینت تمرین میشود.
فهرست شبها و تطبیق با منبع#
مبنای این دوره ۲۶ فایل Markdown پوشهٔ python_docs است. فایلهای 16.md و 17.md کاملاً یکساناند؛ بنابراین ۲۵ درس یکتا داریم. برای رسیدن به شبهای منسجم، درسهای مرتبط با هم ترجمه و تدوین شدهاند؛ متن، ترجمهٔ خطبهخط نیست و مثالهای همپوشان در نمونهٔ یکپارچه جمع شدهاند. پیامهای شخصی، نمرههای گفتوگو و پرسش پایانی دربارهٔ ادامهٔ کار زمانبندیشده کنار گذاشته شدهاند. نکتههای فنی پاسخها در توضیح درس حفظ شده است.
| شب | درس و نتیجه | فایلهای منبع |
|---|---|---|
| ۱ | نخستین برنامه، ورودی و نوع داده ؛ کارت سرور و گزارش ظرفیت | 01.md، 02.md |
| ۲ | شرط و حلقه ؛ گزارش گروهی سلامت | 03.md، 04.md |
| ۳ | فهرست، دیکشنری و تابع ؛ رکورد سرور و منطق قابل استفاده | 05.md، 06.md |
| ۴ | خطا و JSON ؛ ورودی کنترلشده و فایل ماندگار | 07.md، 08.md |
| ۵ | ماژول، محیط مجازی و dataclass ؛ جداسازی منطق و تعریف مدل | 09.md، 10.md |
| ۶ | HTTP و کلاینت Requests ؛ درخواست، وضعیت و شکست اتصال | 11.md، 12.md |
| ۷ | مسیرهای FastAPI و فیلتر ؛ خواندن یک منبع یا فهرست | 13.md، 14.md |
| ۸ | Pydantic و خطاهای HTTP ؛ ثبت معتبر و پاسخ دقیق | 15.md، 16.md و نسخهٔ تکراری 17.md |
| ۹ | SQL و SQLite در API ؛ ماندگاری و تعارض یکتایی | 18.md، 19.md |
| ۱۰ | کلید، آزمون و رویداد ؛ نوشتن کنترلشده و رفتار قابل سنجش | 20.md، 21.md، 22.md |
| ۱۱ | Docker و Compose ؛ کاربر غیرریشه، volume و سلامت | 23.md، 24.md |
| ۱۲ | Nginx و HTTPS ؛ ورودی خصوصی API و گواهی محلی | 25.md، 26.md |
منبع پس از درس خطا، وعدهٔ درس CRUD داده است، ولی فایل جداگانهای برای آن در مجموعه نیست؛ نام فایل 17.md را بهاشتباه درس تازه حساب نکردهایم. چهار عمل SQL در شب نهم معرفی میشوند و تمرین تغییر و حذف روی دادهٔ ساختگی دارند، اما پیادهسازی API کامل ویرایش و حذف جزو محتوای دریافتی نیست. وعدهٔ درس بعدی lifespan در پایان منبع نیز ادامهٔ تحویلدادهنشده است؛ در نسخهٔ فارسی فقط بخش لازم برای آغاز امن پایگاه را در شب نهم آوردهایم.
اصلاحهای فنی در تدوین فارسی#
چند نکتهٔ منبع برای اجرای قابل فهم دقیقتر شدهاند: شمارهٔ درگاه بعدی «آزاد» نامیده نمیشود؛ حلقهٔ چاپ تلاشها پایش واقعی نیست؛ timeout در Requests به معنی مهلت کل دقیق نیست؛ فیلتر تعداد بازهٔ مثبت دارد؛ خرابی JSON باعث جایگزینی خاموش داده نمیشود. در API پایدار، قید یکتایی در SQLite اعمال میشود، نوع بولی پاسخ ثابت میماند و خطای قید نامرتبط به نام تکراری تعبیر نمیشود.
نمونهٔ آغاز پایگاه با lifespan، آزمون را از ساخت فایل هنگام import جدا میکند. کلید محیطی پیش از اجرای برنامه لازم است و در آزمون اعتبار ساختگی داریم. در شبکهٔ پراکسی، اعتماد هدرها به توپولوژی دو سرویس محدود شده و در لبهٔ ورودی آدرس ادعایی کلاینت بازنویسی میشود. در TLS، بررسی گواهی با --cacert فعال میماند و مقصد بازهدایت محلی مشخص است.
معیار پایان تمرین#
در پایان باید بتوانید یک سرور معتبر ثبت کنید، خطای نام تکراری و ورودی نامعتبر را تشخیص دهید و پس از آغاز دوباره همان رکورد را بخوانید. نوشتن بدون کلید نباید ردیفی بسازد؛ خواندن در قرارداد این آزمایشگاه عمومی میماند. آزمونها باید پایگاه موقت داشته باشند و ثبت رویداد نباید کلید را نمایش دهد.
در اجرای نهایی، فقط Nginx روی میزبان درگاه منتشر میکند، HTTPS با گواهی مورد اعتماد آزمایشگاه بررسی میشود و درخواست مستقیم به درگاه API شکست میخورد. نتیجهٔ هر مرحله را ثبت کنید: پیش از تغییر، پس از تغییر و پس از راهاندازی دوباره. این شواهد از صرف دیدن یک پاسخ سالم روشنتر نشان میدهند چه چیزی واقعاً کار میکند.
بازبینی این نسخه#
پس از بازبینی فنی، نثر درسها مستقل از متن انگلیسی بازخوانی شد. با کنارگذاشتن فرانتمتر، بلوکهای کد و خروجی، جدولها، عنوانها و منابع، هر شب حدود ۹۲۰ تا ۹۸۰ واژهٔ نثر دارد؛ جمع مجموعه حدود ۱۱٬۴۰۰ واژه است. با قرارداد ۱۸۰ واژه در دقیقه، سهم نثر هر شب حدود ۵ تا ۵٫۵ دقیقه میشود. تراکم کد شبهای پایگاه و کانتینر بیشتر است و خواندن و اجرای آن زمان جدا میخواهد.
در بازبینی مثالها، نمونههای مستقل کتابخانهٔ استاندارد اجرا و نحو بلوکهای Python بررسی شد. چهار آزمون عین متن شب دهم و سیزده آزمون تکمیلی مسیر، فیلتر، اعتبارسنجی، یکتایی و ماندگاری API موفق بودند. محیط این بررسی Python 3.14.8، FastAPI 0.115.12، Pydantic 2.14.1، HTTPX 0.28.1 و pytest 9.2.0 بود. نسخههای قدیمیتر FastAPI و Starlette در این ترکیب اخطارهای منسوخشدن داخلی دارند؛ موفقیت آزمون را به سازگاری همهٔ نسخههای آینده تعمیم ندهید.
پیکربندی Compose با نسخهٔ 2.40.3 برای حالت مستقیم، پراکسی HTTP و TLS اعتبارسنجی شد؛ گواهی محلی، نام میزبان و مجوز کلید نیز بررسی شدند. ساخت تصویر، اجرای کامل کانتینرها، اتصال واقعی Nginx به Uvicorn و مسیر شبکهای سرور و کلاینت HTTP در این بازبینی انجام نشدهاند. پاسخهای مربوط به این مسیرها همچنان نمونهٔ مورد انتظارند. ساخت Hugo و بررسی پیوندها، تاریخها، RSS، جستوجو و ترتیب دوازده درس نیز انجام شد.