بسیاری از کسانی که شروع به آموزش پایتون میکنند، وقتی برای اولین بار با دستور ساخت پروژه در جنگو روبرو میشوند، از تعداد زیاد فایلهای تولید شده تعجب میکنند. اما نگران نباشید؛ جنگو برخلاف فریمورکهای شلوغ، هیچ فایل اضافهای نمیسازد. هر فایلی که در پوشه پروژه خود میبینید، مثل یک چرخدنده در موتور سایت شما عمل میکند.
شروع عملیات: ایجاد اسکلت
در این مرحله، ما با استفاده از ترمینال و ابزار django-admin دستور میدهیم که پوشهبندی استاندارد پروژه ما ساخته شود. این اولین قدم برای تبدیل شدن به یک توسعهدهنده وب است. شما یاد میگیرید که چطور یک محیط خام را به یک وبسایت آمادهی توسعه تبدیل کنید.
چرا درک ساختار فایلهای جنگو حیاتی است؟
اگر ندانید فایل settings.py کجا قرار دارد یا نقش manage.py چیست، هر چقدر هم که در پایتون حرفهای باشید، در جنگو گم خواهید شد. در این درس، ما فقط کد نمیزنیم؛ بلکه یاد میگیریم:
- تفاوت بین Project و App در معماری جنگو چیست.
- تنظیمات اولیه دیتابیس و زبان سایت را کجا انجام دهیم.
- چطور سرور داخلی جنگو را برای اولین بار روشن کنیم تا خروجی زحماتمان را ببینیم.
هدف ما در این درس:
ما میخواهیم پروژهای به نام job_hunter بسازیم که قرار است میزبان تمام بخشهای سامانه رهگیری استخدامی ما باشد. این پروژه، قلب تپنده تمام عملیاتهای CRUD (ایجاد، خواندن، ویرایش و حذف) شما در آینده خواهد بود.
نکته: به جای حفظ کردن نام فایلها، سعی کنید کاربرد هر کدام را درک کنید. وقتی بفهمید urls.py مثل تابلوی راهنمای خیابانهای شهر شماست، دیگر هیچوقت مسیر توسعه پروژه را گم نمیکنید.
اجرای دستور startproject: خشت اول پروژه JobTrack
وقت آن رسیده که از مرحله تئوری عبور کنیم و اولین پوشه واقعی پروژه خودمان را بسازیم. برای شروع ساخت پروژه جدید در جنگو، باید از ابزاری به نام django-admin استفاده کنیم. این ابزار در واقع یک دستیار هوشمند است که با یک دستور، تمام فایلهای پایه را برای شما ردیف میکند.
اجرای دستور در ترمینال
ابتدا مطمئن شوید که در ترمینال، داخل همان پوشهای هستید که برای یادگیری اختصاص دادهاید و محیط مجازیتان هم فعال است. حالا دستور زیر را با دقت تایپ کنید:
django-admin startproject job_hunter .
یک نکته حیاتی که اکثر آموزشها نمیگویند: به آن نقطه . در انتهای دستور دقت کنید. اگر این نقطه را نگذارید، جنگو یک پوشه اضافی و تودرتو همنام با پروژهتان میسازد که بعدها هنگام آدرسدهی و آپلود سایت روی سرور، حسابی کلافهتان میکند. با گذاشتن این نقطه، به جنگو میگویید: «پروژه را همینجا بساز، نه یک لایه داخلتر!»
خروجی دستور؛ چه اتفاقی افتاد؟
به محض زدن کلید اینتر، اگر اروری دریافت نکردید، یعنی اسکلتبندی پروژه JobTrack با موفقیت انجام شده است. حالا اگر دستور ls (در مک و لینوکس) یا dir (در ویندوز) را بزنید، میبینید که چند فایل و یک پوشه جدید ظاهر شدهاند:
پوشه job_hunter/: این پوشه شامل تنظیمات اصلی و قلب تپنده سایت شماست.
فایل manage.py: همان فایلی که قرار است از این به بعد مدام با آن سر و کار داشته باشیم.
چرا اسم پروژه را job_hunter گذاشتیم؟
انتخاب نام در ساخت پروژه در جنگو سلیقهای است، اما بهتر است همیشه از نامهای معنادار و با حروف کوچک استفاده کنید. ما نام job_hunter را انتخاب کردیم چون قرار است تمام آگهیهای استخدامی را در این پوشه شکار و مدیریت کنیم. این نام در فایلهای تنظیمات شما به عنوان شناسنامه پروژه ثبت میشود.
تجربه شخصی:
«بسیاری از تازهکارها در این مرحله با ارور command not found روبرو میشوند. اگر شما هم این پیام را دیدید، به احتمال زیاد در مرحله قبل، جنگو را خارج از محیط مجازی نصب کردهاید یا اصلاً آن را فعال نکردهاید. یک بار دیگر با دستور pip list از حضور جنگو در محیطتان مطمئن شوید.»
فایل manage.py: عصای دست برنامهنویس جنگو
اگر به پوشه پروژه JobTrack نگاه کنید، فایلی به نام manage.py را دقیقاً در ریشه اصلی میبینید. این فایل قرار نیست توسط شما ویرایش شود؛ در واقع شما اصلاً نیازی ندارید داخل آن را دستکاری کنید. نقش این فایل، برقرار کردن ارتباط بین شما و امکانات داخلی فریمورک است.
واسطهای میان شما و جنگو
فایل manage.py در حقیقت نسخهی محلی و اختصاصی همان ابزار django-admin است که در مرحله قبل دیدیم. با این تفاوت که این فایل کاملاً با تنظیمات پروژه شما (یعنی همان پوشه job_hunter) هماهنگ شده است. هر بار که میخواهید دستوری را به جنگو ابلاغ کنید، باید از طریق این فایل اقدام کنید.
از این به بعد، دستورات شما در ترمینال همیشه با عبارت python manage.py شروع خواهد شد. این فایل مثل یک ریموتکنترل عمل میکند که دکمههای مختلفی برای مدیریت سایت در اختیارتان میگذارد.
کارهای مهمی که این فایل انجام میدهد
بدون وجود manage.py، مدیریت پروژه برای شما کابوس خواهد بود. بیایید ببینیم این عصای دست چه کارهایی برای ما انجام میدهد:
- اجرای سرور محلی: با دستور runserver به شما اجازه میدهد سایت را روی سیستم خودتان ببینید.
- مدیریت دیتابیس: تمام کارهای مربوط به ساخت جداول و تغییرات پایگاه داده از این مسیر میگذرد.
- ساخت اپلیکیشنهای جدید: وقتی بخواهید بخشهای مختلف پروژه را تفکیک کنید، این فایل برایتان پوشههای جدید میسازد.
- ساخت کاربر مدیر (Superuser): برای دسترسی به پنل مدیریت، باید از این فایل بخواهید که برایتان حساب کاربری بسازد.
یک نکته فنی برای جلوگیری از سردرگمی
بسیاری از کاربران میپرسند: «چرا گاهی از django-admin استفاده میکنیم و گاهی از manage.py؟»
پاسخ ساده است: django-admin برای کارهای عمومی (مثل ساختن خودِ پروژه از صفر) است، اما وقتی پروژه ساخته شد، برای اینکه جنگو بفهمد دقیقاً با کدام تنظیمات و کدام دیتابیس طرف است، حتماً باید از فایل manage.py استفاده کنید.
به یاد داشته باشید:
هرگز این فایل را پاک نکنید و نام آن را تغییر ندهید. اگر این فایل آسیب ببیند، عملاً دسترسی شما به تمام ابزارهای مدیریتی پروژه قطع میشود و مجبورید به صورت دستی تنظیمات پیچیدهای را در سیستمعامل اعمال کنید که اصلاً خوشایند نیست.
کالبدشکافی پوشه تنظیمات: در فایل settings.py چه میگذرد؟
داخل پوشه پروژه، یک پوشه همنام با نام پروژه (یعنی job_hunter) وجود دارد که حکم اتاق فرمان سایت شما را دارد. در این میان، فایل settings.py مهمترین فایلی است که با آن سر و کار خواهید داشت. تمام هویت پروژه شما، از زبان سایت گرفته تا نوع دیتابیس و امنیت، در این فایل تعریف میشود.
شناسنامه پروژه شما
وقتی برای اولین بار فایل settings.py را باز میکنید، با متغیرهای زیادی روبرو میشوید که شاید در نگاه اول ترسناک به نظر برسند. اما نگران نباشید؛ شما قرار نیست همه این خطوط را حفظ کنید. هر بخش از این فایل مسئول یک تنظیم خاص است:
SECRET_KEY: این یک کد امنیتی منحصربهفرد برای پروژه شماست. هرگز این کد را در اختیار کسی قرار ندهید، چون امنیت کل سایت به آن وابسته است.
DEBUG: در حالت توسعه (مثل الان که روی سیستم خودتان هستید)، این گزینه روی True تنظیم شده تا اگر کدی را اشتباه زدید، جنگو با جزئیات کامل به شما بگوید مشکل کجاست.
ALLOWED_HOSTS: اینجا مشخص میکنید که سایت شما اجازه دارد روی چه دامنههایی (مثلاً academypython.ir) اجرا شود.
شخصیسازی برای کاربران ایرانی
یکی از جذابیتهای پروژه در جنگو، انعطافپذیری بالای آن است. برای اینکه سایت JobTrack ما با فرهنگ و زمان ایران هماهنگ باشد، باید دو تغییر کوچک اما مهم در این فایل اعمال کنیم:
۱. تغییر زبان (LANGUAGE_CODE): کافیست مقدار آن را از 'en-us' به 'fa-ir' تغییر دهید تا پنل مدیریت و پیامهای سیستم فارسی شوند.
۲. تنظیم زمان (TIME_ZONE): برای اینکه زمان ثبت آگهیهای استخدامی دقیق باشد، مقدار آن را روی 'Asia/Tehran' بگذارید.
دیتابیس کجاست؟
اگر به بخش DATABASES در این فایل نگاه کنید، میبینید که جنگو به صورت پیشفرض از SQLite استفاده میکند. این یک دیتابیس سبک و عالی برای شروع کار است که نیاز به نصب هیچ نرمافزار اضافهای ندارد. جنگو به صورت خودکار یک فایل با پسوند .sqlite3 در کنار فایل manage.py برایتان میسازد تا تمام اطلاعات پروژه در آن ذخیره شود.
نکته: فایل تنظیمات جنگو در واقع یک فایل پایتونی ساده است. یعنی شما میتوانید از تمام قدرت پایتون در اینجا استفاده کنید، اما مراقب باشید که ساختار متغیرها (مثل لیستها و دیکشنریها) را به هم نریزید تا پروژه با خطا متوقف نشود.
نقش urls.py و wsgi.py: مسیر یابی و اتصال به دنیای بیرون
در ادامه کالبدشکافی پروژه، به دو فایلی میرسیم که مسئولیت ارتباط پروژه ما با کاربران و سرورهای اینترنتی را بر عهده دارند. این دو فایل شاید در ابتدای مسیر کمتر توسط شما ویرایش شوند، اما بدون آنها، پروژه JobTrack عملاً یک جزیره دورافتاده و دستنیافتنی خواهد بود.
فایل urls.py: تابلوی راهنمای پروژه
تصور کنید وبسایت شما یک ساختمان بزرگ با اتاقهای مختلف است. کاربران چطور باید بفهمند که برای دیدن لیست آگهیهای استخدام یا ثبت یک رزومه جدید به کدام اتاق بروند؟ فایل urls.py دقیقاً همان تابلوی راهنمای طبقات است.
در این فایل، شما مشخص میکنید که هر آدرس (URL) در مرورگر، کاربر را به کدام سمت هدایت کند. به صورت پیشفرض، جنگو آدرس پنل مدیریت (/admin/) را در اینجا قرار داده است. در آینده، ما آدرسهای اختصاصی خودمان را هم به این لیست اضافه میکنیم تا مثلاً با وارد کردن domain.com/jobs لیست آگهیها نمایش داده شود.
فایل wsgi.py: پل ارتباطی با دنیای وب
کلمه WSGI مخفف عبارت "Web Server Gateway Interface" است، اما نگذارید اسامی فنی شما را گیج کند. به زبان ساده، پایتون به تنهایی نمیتواند با سرورهای وب (مثل Nginx یا Apache) صحبت کند.
فایل wsgi.py (و برادر جدیدترش asgi.py) نقش مترجم را بازی میکنند. وقتی پروژه شما آماده انتشار روی اینترنت شد، این فایلها کد پایتونی شما را به شکلی بستهبندی میکنند که سرورهای اینترنتی بتوانند آن را بفهمند و به کاربران نمایش دهند. برای الان، شما اصلاً نیازی به تغییر این فایلها ندارید؛ فقط بدانید که آنها «نگهبانان درِ خروجی» پروژه شما هستند.
چرا درک این بخش برای یک توسعهدهنده مهم است؟
نظم در مسیریابی: با فهمیدن نقش urls.py متوجه میشوید که چرا جنگو در مدیریت آدرسها اینقدر تمیز و سئوشده عمل میکند.
آمادگی برای استقرار (Deployment): دانستن نام wsgi به شما کمک میکند تا در مراحل نهایی پروژه، وقتی میخواهید سایت را روی سرور واقعی بیاورید، با اصطلاحات میزبانی غریبه نباشید.
ساختار استاندارد: این فایلها بخشی از معماری جنگو هستند که باعث میشوند پروژههای شما در مقیاسهای بزرگ هم بدون بینظمی کار کنند.
دقت کنید که:
بسیاری از ارورهای ۴۰۴ که کاربران در سایتها میبینند، ریشه در تنظیمات اشتباه فایل urls.py دارد. در درسهای بعدی یاد میگیریم چطور با نوشتن مسیرهای هوشمند، کاربر را مستقیماً به مقصد برسانیم.
اولین اجرای موفق: روشن کردن سرور داخلی (Runserver)
لحظهی هیجانانگیز فرا رسید! بعد از تمام این چیدمانها، حالا میخواهیم نتیجهی ساخت پروژه جدید در جنگو را با چشم ببینیم. جنگو با خودش یک سرور کوچک و سبک دارد که مخصوص زمان توسعه است. یعنی نیازی نیست از همین حالا درگیر تنظیمات پیچیدهی سرورهای واقعی شوید؛ همهچیز در سیستم خودتان آماده است.
استارت زدن موتور پروژه
برای اینکه پروژه را زنده کنید، دوباره به سراغ فایل همهکارهی خودمان یعنی manage.py میرویم. در ترمینال، در حالی که در پوشه اصلی پروژه هستید، این دستور را تایپ کنید:
python manage.py runserver
بعد از زدن اینتر، اگر همهچیز درست باشد، چند خط نوشته در ترمینال ظاهر میشود. مهمترین بخش آن، آدرسی شبیه به http://127.0.0.1:8000/ است. این یعنی سایت شما در حال حاضر روی پورت ۸۰۰۰ کامپیوترتان در حال اجراست.
مشاهده اولین خروجی در مرورگر
حالا مرورگر خود (گوگل کروم یا هر مرورگر دیگری) را باز کنید و آدرسی که ترمینال به شما داده را در قسمت نوار آدرس وارد کنید. اگر تصویر یک موشک در حال پرواز را دیدید، تبریک میگویم! این یعنی اسکلتبندی پروژه JobHunter با موفقیت انجام شده و جنگو آماده است تا کدهای شما را به واقعیت تبدیل کند.
چند نکته که باید بدانید:
توقف سرور: اگر خواستید سرور را خاموش کنید، کافیست در ترمینال کلیدهای Ctrl + C را فشار دهید.
تغییرات زنده: یکی از جذابیتهای اجرای پروژه جنگو این است که وقتی کدهای خود را تغییر میدهید و فایل را ذخیره میکنید، سرور به صورت خودکار متوجه میشود و خودش را بازنشانی (Reload) میکند؛ پس نیازی نیست مدام دستور را دوباره بزنید.
هشدار قرمزرنگ: ممکن است در ترمینال با پیامی مواجه شوید که میگوید چند "Unapplied Migrations" دارید. نگران نباشید؛ این پیام یعنی دیتابیس شما هنوز برای جداول پیشفرض جنگو آماده نیست که در درسهای مربوط به دیتابیس آن را با هم حل میکنیم.
چرا این لحظه مهم است؟
بسیاری از برنامهنویسها در همین مرحلهی اول گیر میکنند. دیدن صفحه خوشآمدگویی جنگو یعنی شما تمام مراحل نصب، ساخت محیط مجازی و ایجاد پروژه را بدون نقص انجام دادهاید. حالا یک بستر امن دارید تا پروژه "سامانه استخدام" خود را روی آن بسازید.