آشنایی کامل با Django Settings: پیکربندی، مدیریت محیط، و بهترین شیوه‌ها

این مقاله یک راهنمای جامع دربارهٔ سیستم تنظیمات در Django ارائه می‌دهد. موضوعاتی مانند ساختار فایل تنظیمات، نحوهٔ تعیین DJANGO_SETTINGS_MODULE، استفاده از settings در کد، امنیت، پیکربندی دستی با configure()، استفادهٔ مستقل از Django با django.setup() و ایجاد تنظیمات سفارشی بررسی می‌شوند.

تنظیمات جنگو، Django settingsDJANGO_SETTINGS_MODULE، settings.configuredjango.setup، global_settings، پیکربندی جنگو

~3 دقیقه مطالعه • بروزرسانی ۲۴ اسفند ۱۴۰۴

مقدمه

فایل تنظیمات Django شامل تمام پیکربندی‌های پروژه است. این فایل در واقع یک ماژول پایتون است که متغیرهای سطح ماژول را تعریف می‌کند و رفتار پروژه را کنترل می‌کند—از دیتابیس و اپلیکیشن‌ها گرفته تا امنیت، ایمیل، کش و موارد دیگر.

چون فایل تنظیمات یک ماژول پایتون است:

  • نباید خطای نحوی داشته باشد
  • می‌تواند مقادیر را به‌صورت پویا تولید کند
  • می‌تواند از ماژول‌های دیگر import کند

ساختار پایهٔ فایل تنظیمات

نمونه‌ای از تنظیمات معمول:


ALLOWED_HOSTS = ["www.example.com"]
DEBUG = False
DEFAULT_FROM_EMAIL = "[email protected]"

اگر DEBUG = False باشد، باید ALLOWED_HOSTS را به‌درستی تنظیم کنید.


مشخص کردن فایل تنظیمات

متغیر محیطی DJANGO_SETTINGS_MODULE

Django باید بداند از کدام فایل تنظیمات استفاده کند. این کار با متغیر محیطی DJANGO_SETTINGS_MODULE انجام می‌شود.

مقدار آن باید مسیر پایتونی فایل تنظیمات باشد:


mysite.settings

این ماژول باید در sys.path قرار داشته باشد.

استفاده از django-admin

در لینوکس:


export DJANGO_SETTINGS_MODULE=mysite.settings
django-admin runserver

در ویندوز:


set DJANGO_SETTINGS_MODULE=mysite.settings
django-admin runserver

یا با آرگومان:


django-admin runserver --settings=mysite.settings

در سرور WSGI


import os
os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"

تنظیمات پیش‌فرض

تمام تنظیمات پیش‌فرض Django در django/conf/global_settings.py قرار دارند. فایل تنظیمات شما فقط مواردی را که تغییر می‌دهید بازنویسی می‌کند.

برای مشاهدهٔ تفاوت‌ها:


python manage.py diffsettings

استفاده از settings در کد

برای دسترسی به تنظیمات:


from django.conf import settings

if settings.DEBUG:
    ...

نکات مهم:

  • settings یک شیء است، نه ماژول
  • نمی‌توان تنظیمات را مستقیم import کرد
  • نباید از فایل تنظیمات یا global_settings مستقیماً import کنید

تغییر تنظیمات در زمان اجرا ممنوع است

هرگز این کار را انجام ندهید:


settings.DEBUG = True

تنظیمات فقط باید در فایل تنظیمات تعریف شوند.


امنیت فایل تنظیمات

فایل تنظیمات شامل اطلاعات حساسی مانند:

  • رمز دیتابیس
  • کلیدهای API
  • SECRET_KEY

بنابراین باید دسترسی به آن محدود باشد، مخصوصاً در هاست اشتراکی.


ایجاد تنظیمات سفارشی

می‌توانید تنظیمات مخصوص اپلیکیشن خود بسازید. قوانین:

  • نام تنظیمات باید تماماً با حروف بزرگ باشد
  • تنظیمات موجود را دوباره اختراع نکنید
  • برای لیست‌ها از list استفاده کنید (رسم Django)

استفاده از Django بدون DJANGO_SETTINGS_MODULE

اگر نمی‌خواهید متغیر محیطی تنظیم کنید، می‌توانید Django را دستی پیکربندی کنید:


from django.conf import settings

settings.configure(DEBUG=True)

هر تعداد آرگومان دلخواه می‌توانید بدهید. اگر تنظیمی ارائه نشود، Django مقدار پیش‌فرض را استفاده می‌کند.


تنظیمات پیش‌فرض سفارشی

می‌توانید ماژول پیش‌فرض را تغییر دهید:


from django.conf import settings
from myapp import myapp_defaults

settings.configure(default_settings=myapp_defaults, DEBUG=True)

در این حالت باید تمام تنظیمات لازم را خودتان تعریف کنید.


configure() یا DJANGO_SETTINGS_MODULE — فقط یکی

باید دقیقاً یکی از این دو را استفاده کنید:

  • DJANGO_SETTINGS_MODULE
  • settings.configure()

اگر هیچ‌کدام تنظیم نشوند → ImportError اگر هر دو تنظیم شوند → RuntimeError

برای بررسی:


if not settings.configured:
    settings.configure(...)

استفادهٔ مستقل از Django و django.setup()

اگر Django را خارج از محیط معمول (مثل اسکریپت مستقل) استفاده می‌کنید، باید:


import django
django.setup()

این کار تنظیمات را بارگذاری و رجیستری اپلیکیشن‌ها را مقداردهی می‌کند.

فقط یک‌بار باید فراخوانی شود.


جمع‌بندی

سیستم تنظیمات Django انعطاف‌پذیر، قدرتمند و ضروری برای پیکربندی پروژه است. با درک نحوهٔ بارگذاری تنظیمات، مدیریت محیط، پیکربندی دستی، امنیت و استفادهٔ مستقل از Django، می‌توانید پروژه‌هایی پایدار، امن و قابل نگهداری بسازید. Django ابزارهای لازم برای مدیریت پیکربندی در هر مقیاسی را در اختیار شما قرار می‌دهد.

نوشته و پژوهش شده توسط دکتر شاهین صیامی