Django یک فریمورک انعطافپذیر برای ساخت سریع برنامههای Python است. بهصورت پیشفرض، برنامههای Django برای ذخیره داده از یک فایل پایگاه داده سبک SQLite استفاده میکنند. در حالی که این گزینه در برخی بارها مناسب است، یک سیستم مدیریت پایگاه داده سنتیتر میتواند عملکرد را در محیط تولید بهبود بخشد.
در این راهنما، شما PostgreSQL (معمولاً Postgres نامیده میشود) را برای استفاده با برنامههای Django نصب و پیکربندی خواهید کرد. نرمافزار لازم را نصب میکنید، اطلاعات حساب کاربری پایگاه داده را برای برنامه خود میسازید و سپس یک پروژه جدید Django را برای استفاده از این بکاند راهاندازی و پیکربندی میکنید.
وقتی آماده ادامه بودید، با کاربر دارای دسترسی sudo خود وارد شوید.
نصب اجزای ضروری
ابتدا اجزای ضروری را نصب خواهید کرد. این شامل pip، مدیر بسته پایتون برای نصب و مدیریت مؤلفههای پایتون، و همچنین نرمافزار پایگاه داده و کتابخانههای مرتبط است.
شما از Python 3 استفاده خواهید کرد که با اوبونتو 20.04 عرضه میشود. نصب را با تایپ کردن شروع کنید:
/* sudo apt update
sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib */
بعد از اتمام نصب، میتوانید به بخش پایگاه داده بروید.
پیکربندی Postgres
بهصورت پیشفرض، Postgres از یک طرح احراز هویت به نام “peer authentication” برای اتصالات محلی استفاده میکند. اساساً این بدین معناست که اگر نام کاربری سیستم عامل کاربر با یک نام کاربری معتبر در Postgres مطابقت داشته باشد، آن کاربر میتواند بدون احراز هویت بیشتر وارد شود.
در طول نصب Postgres، یک کاربر سیستم عامل به نام postgres ایجاد شده است که مطابق با کاربر مدیریتی PostgreSQL به نام postgres است. شما باید از این کاربر برای انجام وظایف مدیریتی استفاده کنید. میتوانید از sudo استفاده کنید و نام کاربر را با گزینه -u وارد کنید.
برای ورود به یک جلسه تعاملی Postgres با تایپ کردن:
/* sudo -u postgres psql */
ابتدا باید یک پایگاه داده برای پروژه Django ایجاد کنید. هر پروژه باید پایگاه داده جداگانهای برای دلایل امنیتی داشته باشد. ما در این راهنما، پایگاه داده را myproject مینامیم، اما همیشه بهتر است نامی توصیفیتر انتخاب کنید:
/* CREATE DATABASE myproject; */
بعد، یک کاربر پایگاه داده ایجاد خواهید کرد که برای اتصال و تعامل با پایگاه داده از آن استفاده خواهید کرد. رمز عبور را به چیزی قوی و امن تنظیم کنید:
/* CREATE USER myprojectuser WITH PASSWORD 'password'; */
سپس چند پارامتر اتصال را برای کاربری که همین حالا ایجاد کردید تغییر میدهید. این کار عملیات پایگاه داده را سرعت میبخشد تا مقادیر صحیح هر بار که یک اتصال برقرار میشود، پرسوجو و تنظیم نشوند.
/* ALTER ROLE myprojectuser SET client_encoding TO 'utf8';
ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE myprojectuser SET timezone TO 'UTC'; */
شما در حال تعیین کدگذاری پیشفرض به UTF-8 هستید که Django آن را انتظار دارد. همچنین طرح ایزولاسیون تراکنش پیشفرض را به “read committed” تنظیم میکنید که از خواندن از تراکنشهای تأیید نشده جلوگیری میکند. در نهایت، timezone را تنظیم میکنید. بهصورت پیشفرض، پروژههای Django شما روی UTC تنظیم خواهند شد. اینها همه توصیههایی از خود پروژه Django هستند: https://docs.djangoproject.com/en/1.9/ref/databases/#optimizing-postgresql-s-configuration.
حالا تنها کاری که باید انجام دهید این است که به کاربر پایگاه دادهتان حقوق دسترسی به پایگاه دادهای که ایجاد کردید بدهید:
GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;
خروج از پرامپت SQL برای بازگشت به shell session کاربر postgres:
/* \q */
نصب Django و محیط مجازی
حالا که پایگاه داده تنظیم شده است، میتوانید Django را نصب کنید. برای انعطافپذیری بیشتر، Django و تمام وابستگیهای آن را درون یک محیط مجازی پایتون نصب خواهید کرد. بسته virtualenv اجازه میدهد این محیطها را بهسادگی ایجاد کنید.
برای نصب virtualenv، تایپ کنید:
/* sudo pip3 install virtualenv */
یک دایرکتوری بسازید و وارد آن شوید تا پروژه Django را در آن نگه دارید:
mkdir ~/myproject
cd ~/myproject
میتوانید یک محیط مجازی برای ذخیره نیازمندیهای پایتون پروژه Django ایجاد کنید با تایپ کردن:
python3 -m virtualenv myprojectenv
این یک کپی محلی از پایتون و یک فرمان pip محلی را در یک دایرکتوری به نام myprojectenv درون دایرکتوری پروژه شما نصب خواهد کرد.
قبل از اینکه برنامهها را داخل محیط مجازی نصب کنید، باید آن را فعال کنید. میتوانید با تایپ کردن:
source myprojectenv/bin/activate
پرامپت شما تغییر خواهد کرد تا نشان دهد که اکنون در محیط مجازی کار میکنید. شبیه به این خواهد بود: (myprojectenv)user@host:~/myproject$.
وقتی محیط مجازی فعال شد، میتوانید نسخه رسمی Django را با pip نصب کنید. همچنین بسته psycopg2 را نصب خواهید کرد که اجازه میدهد از پایگاه داده Postgres که پیکربندی کردید استفاده کنید:
pip install django psycopg2
توجه: صرفنظر از نسخه پایتونی که استفاده میکنید، وقتی محیط مجازی فعال است باید از فرمان pip (نه pip3) استفاده کنید.
ایجاد پروژه Django
اکنون میتوانید یک پروژه Django را درون پوشه myproject شروع کنید. این کار یک زیرپوشه با همان نام برای نگهداری کد ایجاد میکند و یک اسکریپت مدیریت درون دایرکتوری جاری میسازد. مطمئن شوید نقطه را در انتهای فرمان اضافه کردهاید تا این بهدرستی تنظیم شود:
django-admin startproject myproject .
حالا که پروژه دارید، باید آن را پیکربندی کنید تا از پایگاه دادهای که ایجاد کردید استفاده کند.
فایل تنظیمات اصلی پروژه Django را که درون پوشه زیرپروژه قرار دارد باز کنید:
/* nano myproject/settings.py */
در پایین فایل، بخشی به نام DATABASES را خواهید دید که شبیه به این است:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / "db.sqlite3",
}
}
این در حال حاضر برای استفاده از SQLite پیکربندی شده است. شما باید این را تغییر دهید تا بهجای آن از پایگاه داده PostgreSQL استفاده شود.
اول، engine را تغییر دهید تا از سازگارکننده postgresql بهجای sqlite3 استفاده کند. برای NAME از نام پایگاه داده خود (در این مثال myproject) استفاده کنید. همچنین باید اطلاعات ورود را اضافه کنید. برای اتصال به username، password و host نیاز دارید. گزینه port را اضافه کنید و خالی بگذارید تا پیشفرض انتخاب شود:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'myproject',
'USER': 'myprojectuser',
'PASSWORD': 'your_password_here',
'HOST': 'localhost',
'PORT': '',
}
}
در همین فایل، باید مقدار ALLOWED_HOSTS را نیز تنظیم کنید. این دستور whitelist از آدرسها یا نامهای دامنهای را تعریف میکند که اجازه اتصال به نمونه Django را دارند. هر درخواست ورودی که هدر Host آن در این لیست نباشد، یک استثنا برانگیخته خواهد شد. Django از شما میخواهد این را تنظیم کنید تا از یک کلاس از آسیبپذیریهای امنیتی جلوگیری شود.
در قطعه زیر، چند مثال کامنت شده برای نشان دادن استفاده قرار داده شدهاند:
ALLOWED_HOSTS = ['your_domain.com', 'server_IP_address']
درون براکتها، آدرسهای IP یا نامهای دامنه مرتبط با سرور Django خود را لیست کنید. هر مورد باید درون کوتیشن باشد و با کاما از هم جدا شوند. اگر میخواهید درخواستها برای یک دامنه و همه زیر دامنههای آن مجاز باشند، یک نقطه در ابتدای آن ورودی قرار دهید.
وقتی کارتان تمام شد، فایل را ذخیره و ببندید.
اعمال مهاجرتها و تست سرور
حال که تنظیمات Django پیکربندی شدهاند، میتوانید ساختارهای داده را به پایگاه داده منتقل کنید و سرور را آزمایش کنید.
میتوانید با ایجاد و اعمال مهاجرتها به پایگاه داده شروع کنید. از آنجا که هنوز داده واقعی ندارید، این صرفاً ساختار اولیه پایگاه داده را تنظیم میکند:
python manage.py makemigrations
python manage.py migrate
پس از ایجاد ساختار پایگاه داده، میتوانید یک حساب کاربری مدیریتی بسازید با تایپ کردن:
python manage.py createsuperuser
از شما خواسته میشود یک نام کاربری انتخاب کنید، یک ایمیل وارد کنید و یک رمز عبور برای حساب انتخاب و تأیید کنید.
اگر راهنمای راهاندازی اولیه سرور را دنبال کرده باشید، باید فایروال UFW را فعال کرده باشید. قبل از اینکه بتوانید به سرور توسعه Django برای تست پایگاه داده دسترسی پیدا کنید، باید پورت را در فایروال باز کنید.
اتصالات خارجی به پورت را با تایپ کردن اجازه دهید:
sudo ufw allow 8000
وقتی پورت را باز کردید، میتوانید برای آزمایش اینکه پایگاه داده شما به درستی کار میکند، سرور توسعه Django را راهاندازی کنید:
python manage.py runserver 0.0.0.0:8000
در مرورگر وب خود، به نام دامنه یا آدرس IP سرور خود دنبال شده با :8000 بروید تا صفحه ریشه پیشفرض Django را ببینید:
شما باید صفحه شاخص پیشفرض را ببینید.
آدرس صفحه شاخص Django:

در انتهای URL عبارت /admin را اضافه کنید تا صفحه ورود به پنل مدیریت را ببینید:

نام کاربری و رمز عبوری را که با فرمان createsuperuser ایجاد کردید وارد کنید. سپس به رابط مدیریت هدایت خواهید شد:

وقتی از بررسی تمام شد، میتوانید با فشار دادن CTRL-C سرور توسعه را در پنجره ترمینال خود متوقف کنید.
با دسترسی به رابط مدیریت، تأیید کردهاید که پایگاه داده اطلاعات حساب کاربری شما را ذخیره کرده و میتوان بهطور مناسب به آن دسترسی یافت.
نتیجهگیری
در این راهنما نشان داده شد چگونه PostgreSQL را بهعنوان بکاند پایگاه داده برای یک پروژه Django نصب و پیکربندی کنید. در حالی که SQLite بهراحتی میتواند بار توسعه و استفاده سبک در تولید را مدیریت کند، بیشتر پروژهها با پیادهسازی یک سیستم مدیریت پایگاه داده کاملتر سود میبرند.
از اینکه با جامعه ParminCloud همراهید متشکریم.
نظرات کاربران