فصل ۲: اولین پروژه جنگو (Hello World به سبک جنگو!)

مقدمه: در این فصل، ما از تئوری فاصله گرفته و به صورت عملی اولین پروژه جنگو را ایجاد میکنیم. شما با دستورات اصلی برای ساختن یک پروژه و یک اپلیکیشن آشنا میشوید، سرور توسعه را راهاندازی میکنید و ساختار فایلهایی را که جنگو به صورت خودکار برای ما ایجاد میکند، درک خواهید کرد. این فصل، پایه و اساس تمام کارهایی است که در آینده انجام خواهیم داد.
۲.۱: ساخت پروژه با startproject
جنگو یک ابزار خط فرمان به نام django-admin دارد که بسیاری از کارها را برای ما ساده میکند. اولین و مهمترین دستور، startproject است که کل ساختار یک پروژه را برای ما ایجاد میکند.
در ترمینال، مطمئن شوید که در پوشه my_blog_project هستید و محیط مجازی (venv) شما فعال است. سپس دستور زیر را اجرا کنید:
django-admin startproject config .
تحلیل دستور:
django-admin startproject: این دستور به جنگو میگوید که یک پروژه جدید بساز.config: این نامی است که ما برای پوشه اصلی پیکربندی پروژه خود انتخاب کردهایم. میتوانید نام دیگری انتخاب کنید، اماconfigیک نام رایج و معنادار است..(نقطه در انتها): این بخش بسیار مهم است. به جنگو میگوید که پروژه را در همین پوشه فعلی (my_blog_project) بساز. اگر نقطه را نگذارید، جنگو یک پوشهmy_blog_projectدیگر در داخل پوشه فعلی شما ایجاد میکند که باعث تو در تو شدن پوشهها میشود.
۲.۲: بررسی ساختار فایلهای ایجاد شده
حالا اگر به پوشه my_blog_project خود نگاه کنید، ساختار زیر را خواهید دید:
my_blog_project/
├── venv/
├── config/
│ ├── init.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
بیایید ببینیم هر کدام از این فایلها چه کاری انجام میدهند:
manage.py: مهمترین ابزار شما برای تعامل با پروژه از طریق خط فرمان. دستوراتی مانندrunserver,startapp,migrateو… همگی با کمک این فایل اجرا میشوند. شما تقریباً هیچوقت این فایل را ویرایش نخواهید کرد.- پوشه
config/: این یک پکیج پایتون است که شامل تمام تنظیمات و پیکربندیهای پروژه شماست. نام این پوشه با نامی که در دستورstartprojectدادیم یکی است.__init__.py: یک فایل خالی که به پایتون میفهماند این پوشه یک پکیج است.settings.py: قلب تنظیمات پروژه شما. اطلاعات مربوط به پایگاه داده، اپلیکیشنهای نصب شده، مسیر فایلهای استاتیک و قالبها و دهها تنظیم دیگر در این فایل قرار دارد. ما در طول دوره بارها به این فایل سر خواهیم زد.urls.py: دفترچه تلفن یا روتر اصلی پروژه. این فایل مشخص میکند که هر آدرس URL (مثلاًyoursite.com/about) باید توسط کدام بخش از کد شما (کدام ویو) مدیریت شود.wsgi.pyوasgi.py: این فایلها به عنوان نقطه ورود برای وبسرورها عمل میکنند تا بتوانند با اپلیکیشن جنگوی شما ارتباط برقرار کنند. در مراحل اولیه توسعه، ما با این فایلها کاری نداریم.
۲.۳: اجرای سرور توسعه (runserver)
جنگو یک وبسرور سبک و داخلی برای مراحل توسعه دارد. این سرور برای استفاده در محیط واقعی (Production) مناسب نیست، اما برای ساخت و تست اپلیکیشن عالی است.
برای راهاندازی سرور، دستور زیر را در ترمینال اجرا کنید:
python manage.py runserver
اگر همه چیز درست باشد، خروجی مشابه زیر را خواهید دید:
Watching for file changes with StatReloader
Performing system checks…
System check identified no issues (0 silenced).
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run ‘python manage.py migrate’ to apply them.
September 25, 2023 – 15:30:00
Django version 4.2.5, using settings ‘config.settings’
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
نکته: به پیغام مربوط به unapplied migration(s) توجه کنید. جنگو به ما میگوید که برخی جداول پیشفرض (مربوط به کاربران، ادمین و…) هنوز در پایگاه داده ساخته نشدهاند. ما در فصل مدلها به این موضوع رسیدگی خواهیم کرد.
حالا مرورگر وب خود را باز کنید و به آدرس http://127.0.0.1:8000/ بروید. شما باید صفحه معروف خوشآمدگویی جنگو با یک موشک در حال پرتاب را ببینید!
تبریک! شما اولین پروژه جنگوی خود را با موفقیت اجرا کردید!
برای خاموش کردن سرور، به ترمینال برگردید و کلیدهای CONTROL + C را فشار دهید.
۲.۴: مفهوم “پروژه” در مقابل “اپلیکیشن”
این یکی از مهمترین مفاهیمی است که باید در جنگو درک کنید.
- پروژه (Project): کل وبسایت شما را در بر میگیرد. پروژه شامل تنظیمات کلی، پیکربندیها و URLهای اصلی است. شما میتوانید یک پروژه را به یک خانه تشبیه کنید.
- اپلیکیشن (App): یک بخش یا یک قابلیت مجزا از وبسایت شماست که کار مشخصی را انجام میدهد. مثلاً یک وبلاگ، یک سیستم نظرسنجی، یا یک فرم تماس با ما، هر کدام میتوانند یک اپلیکیشن جداگانه باشند. اپلیکیشنها طوری طراحی شدهاند که قابل استفاده مجدد (reusable) باشند؛ یعنی شما میتوانید اپلیکیشن وبلاگی که ساختهاید را در پروژههای دیگر نیز استفاده کنید. اپلیکیشنها را میتوان به اتاقهای مختلف خانه تشبیه کرد.
یک پروژه میتواند شامل چندین اپلیکیشن باشد.
۲.۵: ساخت اولین اپلیکیشن با startapp
حالا که تفاوت را میدانیم، بیایید اولین اپلیکیشن خود را بسازیم که قرار است مسئولیت بخش وبلاگ سایت را بر عهده بگیرد.
مطمئن شوید سرور توسعه خاموش است (CONTROL + C) و سپس دستور زیر را اجرا کنید:
python manage.py startapp blog
این دستور یک پوشه جدید به نام blog در کنار پوشه config شما ایجاد میکند. اگر داخل آن را نگاه کنید، فایلهای جدیدی را میبینید:
blog/
├── migrations/
│ └── init.py
├── init.py
├── admin.py
├── apps.py
├── models.py
├── tests.py
└── views.py
views.py: منطق اپلیکیشن شما در اینجا نوشته میشود (ویوها).models.py: ساختار دادهها و جداول پایگاه داده در اینجا تعریف میشود (مدلها).admin.py: تنظیمات مربوط به نمایش مدلها در پنل ادمین جنگو.apps.py: فایل پیکربندی خود اپلیکیشن.tests.py: جایی برای نوشتن تستها برای اپلیکیشن.- پوشه
migrations/: تاریخچه تغییرات مدلهای شما در این پوشه نگهداری میشود.
۲.۶: معرفی اپلیکیشن به پروژه
شما اپلیکیشن blog را ساختید، اما پروژه config هنوز از وجود آن خبر ندارد! باید اپلیکیشن جدید را در تنظیمات پروژه ثبت (رجیستر) کنیم.
- فایل
config/settings.pyرا باز کنید. - به دنبال لیستی به نام
INSTALLED_APPSبگردید. - نام اپلیکیشن خود را به عنوان یک رشته متنی به ابتدای این لیست اضافه کنید.
# config/settings.py
INSTALLED_APPS = [
'blog.apps.BlogConfig', # راه مدرن و توصیه شده
# یا 'blog', (این راه هم کار میکند)
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
استفاده از 'blog.apps.BlogConfig' روش کاملتر و بهتری است، زیرا مستقیماً به کلاس پیکربندی اپلیکیشن شما اشاره میکند که در فایل blog/apps.py تعریف شده است.
خلاصه فصل دوم:
- یاد گرفتیم که با دستور
django-admin startprojectیک پروژه جدید بسازیم. - با ساختار فایلهای اصلی یک پروژه جنگو (
manage.py,settings.py,urls.py) آشنا شدیم. - سرور توسعه را با
python manage.py runserverاجرا کردیم و صفحه خوشآمدگویی را دیدیم. - تفاوت مفهومی کلیدی بین پروژه (کل وبسایت) و اپلیکیشن (یک قابلیت مجزا) را درک کردیم.
- اولین اپلیکیشن خود را با نام
blogتوسط دستورpython manage.py startappساختیم و آن را درsettings.pyثبت کردیم.