~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 ابزارهای لازم برای مدیریت پیکربندی در هر مقیاسی را در اختیار شما قرار میدهد.
نوشته و پژوهش شده توسط دکتر شاهین صیامی