یک شروع تمیز که بعداً پشیمان نشوید
ساختار پیشفرض startproject پوشهی تنظیمات را همنام پروژه میسازد (mysite/mysite/settings.py) و اپها را کنار آن پراکنده میکند. در پروژههای واقعی دو قرارداد ساده خیلی کمک میکند: پوشهی تنظیمات را config بنامید و همهی اپها را داخل پوشهی apps بگذارید.
ساخت محیط مجازی روی ویندوز (PowerShell)
mkdir carpet-orders
cd carpet-orders
py -3.12 -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
pip install "django>=5.2,<6.0" python-dotenv
django-admin startproject config .
mkdir apps
New-Item apps\__init__.py -ItemType File
mkdir apps\orders
python manage.py startapp orders apps\orders
نقطهی آخر startproject config . یعنی «همین پوشه»؛ بدون آن یک لایه پوشهی اضافه ساخته میشود. روی لینوکس بهجای Activate.ps1 از source .venv/bin/activate استفاده کنید.
ساختار نهایی
carpet-orders/
├── .venv/
├── .env # رمزها؛ هرگز در git نه
├── manage.py
├── requirements.txt
├── config/
│ ├── settings.py
│ ├── urls.py
│ ├── wsgi.py
│ └── asgi.py
├── apps/
│ ├── accounts/ # Custom User
│ ├── catalog/ # طرحهای فرش
│ └── orders/
├── templates/
└── static/
یک اصلاح ضروری در apps.py
وقتی اپ داخل پوشهی apps است، مسیر پایتونی آن apps.orders است؛ پس باید name را در apps.py اصلاح و همان را در INSTALLED_APPS ثبت کنید:
# apps/orders/apps.py
from django.apps import AppConfig
class OrdersConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "apps.orders" # مسیر ایمپورت
verbose_name = "سفارشها" # عنوان فارسی در ادمین
# config/settings.py
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"apps.accounts",
"apps.catalog",
"apps.orders",
]
برچسب اپ (app label) همچنان orders است؛ یعنی در migrationها، "orders.Order" و مجوزها همان نام کوتاه به کار میرود.
نکتههایی که کمتر کسی میداند
- اگر PowerShell با خطای «running scripts is disabled» جلوی Activate.ps1 را گرفت، یک بار
Set-ExecutionPolicy -Scope CurrentUser RemoteSignedرا اجرا کنید؛ نیازی به دسترسی ادمین نیست. py -0فهرست همهی نسخههای پایتون نصبشده روی ویندوز را نشان میدهد؛ باpy -3.12دقیقاً همان نسخه را برای venv انتخاب کنید.- بعد از فعالسازی venv همیشه
python -m pipبنویسید نه فقطpip؛ اینطور مطمئنید pip همان پایتون venv را نصب میکند. - در ایران اگر pip کند است یا خطای 403 میدهد، میتوانید با
pip config set global.index-urlیک میرور داخلی PyPI را برای همیشه تنظیم کنید؛ دیگر لازم نیست هر بار-iبنویسید. startappپوشهی مقصد را نمیسازد؛ اگرapps\ordersوجود نداشته باشد خطای «Destination directory does not exist» میگیرید.