


بررسی django و postgres به عنوان یکی از جذابترین تک استکهای مدرن وب
جنگو یک فریمورک انعطافپذیر برای ایجاد سریع برنامههای پایتون است
جنگو یک فریمورک انعطافپذیر برای ایجاد سریع برنامههای پایتون است. به طور پیشفرض، برنامههای جنگو برای ذخیره دادهها در یک فایل پایگاه داده مانند SQLite پیکربندی شدهاند. در حالی که این کار در برخی از شرایط به خوبی کار میکند، اما گاهی اوقات میبایست از پایگاه داده دیگری برای ذخیره فایلها استفاده نمود.
PostgreSQL یکی از سیستمهای پایگاه داده متن باز است که بیش از 20 سال از توسعه آن میگذرد. قابلیت اطمینان، مقاومت و عملکرد برتر از ویژگیهای این سیستم پایگاه داده است. در این راهنما، نحوه نصب و پیکربندی PostgreSQL برای استفاده در کنار برنامههای جنگو را توضیح خواهیم داد.
Django چیست؟
Django یا جنگو یک فریمورک وب سطح بالا در محیط برنامهنویسی پایتون است که توسعه سریع وبسایتهای ایمن و قابل توسعه را امکانپذیر میکند. جنگو که توسط توسعهدهندگان باتجربه ساخته شده، بسیاری از دردسرهای توسعه وب را در سایر فریمورکها برطرف کرده است. بنابراین میتوانید بدون نیاز به ساخت مجدد بسیاری از کدها، روی نوشتن برنامه خود تمرکز کنید. این فریمورک رایگان و متن باز است، دارای جامعه کاربری فعال، اسناد پیشرفته، و گزینههای زیادی برای پشتیبانی رایگان و پولی است. ویژگیهای کدهای جنگو را میتوان به صورت خلاصه کرد:
• کامل بودن: جنگو از اصول طراحی یکپارچه و سازگار برای ایجاد کدها استفاده کرده و دارای اسناد گسترده و بهروز است.
• همهکاره بودن: از جنگو میتوان تقریباً برای ایجاد هر وبسایتی استفاده کرد. از سیستم مدیریت محتوا نظیر وردپرس گرفته تا ویکیها و شبکههای اجتماعی، همگی به کمک جنگو قابل توسعه هستند.
• ایمنی: جنگو روشهای امنیتی زیادی را برای محافظت از وبسایت در اختیار توسعهدهندگان قرار میدهد. روشی امن برای مدیریت حسابهای کاربری و رمزهای عبور، ممانعت از قرار دادن اطلاعات در کوکیها و یا سایر قسمتهای آسیبپذیر وبسایت، جلوگیری از ذخیرهسازی مستقیم رمزهای عبور و غیره از ویژگیهای جنگو هستند.
• مقیاسپذیری: جنگو از ویژگی اشتراکگذاری مبتنی بر کامپوننت استفاده میکند. این بدان معنی است که هر بخش از معماری برنامه مستقل از سایر بخشها است و میتواند به صورت جداگانه در صورت نیاز جایگزین شده و یا تغییر کند.
• قابلیت نگهداری: کد جنگو با استفاده از اصول و الگوهای طراحی نوشته میشود که ایجاد کدهای قابل نگهداری و قابلاستفاده مجدد را نتیجه میدهد. این یعنی تکرارهای غیرضروری کدها کمتر شده و حجم کد برنامه نیز کاهش مییابد.
• قابلیت حمل: کدهای جنگو به زبان پایتون نوشته میشوند و روی پلتفرمهای مختلفی قابلاجرا است. یعنی اجرای برنامه به هیچ سرور خاصی وابسته نیست و میتوان برنامه را روی هر سرور و یا سیستم عاملی نظیر لینوکس، Mac و غیره اجرا کرد.
postgres چیست؟
PostgreSQL یک سیستم پایگاه داده رابطهای پیشرفته، در کلاس سازمانی و متن باز است. PostgreSQL از query های SQL (رابطهای) و JSON (غیر رابطهای) پشتیبانی میکند. PostgreSQL یک پایگاه داده بسیار پایدار است که با بیش از 20 سال سابقه، توسط جامعه کاربری بزرگی پشتیبانی میشود. PostgreSQL به عنوان پایگاه داده اولیه برای بسیاری از اپلیکیشنهای وب و همچنین اپلیکیشنهای موبایل استفاده میشود. ویژگیهای برتر این پایگاه داده را میتوان به صورت زیر خلاصه کرد:
• تایپهای تعریف شده توسط کاربر
• جدول مفاهیم
• مکانیزم قفل پیشرفته
• یکپارچگی کلید خارجی
• نماها، قواعد، subquery
• تراکنشهای تو در تو (savepoints)
• کنترل همزمان چند نسخه (MVCC)
• همانندسازی غیر سنکرون
نسخههای اخیر PostgreSQL از ویژگیهای زیر پشتیبانی میکنند:
• نسخه Native Microsoft Windows Server
• Tablespaces
• بازیابی Point-in-time
پایگاه داده Postgre از زبانهای برنامهنویسی زیر پشتیبانی میکند:
• پایتون
• جاوا
• سی شارپ
• C++/C
• Ruby
• جاوا اسکریپت (Node.js)
• Perl
• Go
• Tcl
پیشنیازهای PostgreSQL
فرض ما این است که شما قبلاً جنگو را روی سیستم خود نصب کردهاید و یک پروژه جنگو را در حال اجرا دارید. برای دانلود PostgreSQL در ویندوز و یا سیستم عامل Mac میتوانید از وبسایت رسمی آن به آدرس https://www.postgresql.org/download/ نسخه مورد نظر را دانلود کرده و آن را نصب نمایید.
نصب psycopg2
در مرحله بعد، باید ابزار تطبیقدهنده پایگاه داده PostgreSQL را نصب کنیم تا با پایتون و پایگاه داده ارتباط برقرار کرده و بتوانیم انتقال فایلها به سیستم پایگاه داده را انجام دهیم. برای این منظور در محیط پایتون در سطح پوسته، دستور زیر را اجرا میکنیم.
pip install psycopg2
ایجاد یک کاربر و پایگاه داده PostgreSQL
در پیکربندی پیشفرض Postgres، کاربری به نام Postgres ایجاد میشود و کاربر Postgres به کل بخشهای PostgreSQL که روی سیستمعامل شما اجرا میشود، دسترسی خواهد داشت. این دسترسی در سطح super admin است. برای شروع دستور زیر را اجرا کنید.
sudo -u postgres psql
دستور بالا رابط خط فرمان psql را در مود admin full تعریف میکند. در ادامه یک کاربر و پایگاه داده ایجاد میکنیم.
CREATE DATABASE mydb;
این دستور یک پایگاه داده با عنوان mydb ایجاد خواهد کرد، توجه داشته باشید که هر دستور SQL باید با یک نقطه ویرگول در انتهای دستور به پایان برسد. برای ایجاد کاربر نیز از دستور زیر استفاده میکنیم:
CREATE USER myuser WITH ENCRYPTED PASSWORD 'mypass';
تا اینجا ما یک کاربر به نام myuser با رمز عبور mypass ایجاد کردهایم. شما میتوانید از هر نام کاربری و رمز عبوری که میخواهید استفاده کنید.
اصلاح پارامترهای ارتباطی
ALTER ROLE myuser SET client_encoding TO 'utf8'; ALTER ROLE myuser SET default_transaction_isolation TO 'read committed'; ALTER ROLE myuser SET timezone TO 'UTC';
کدگذاری پیشفرض برای پارامترهای ارتباطی در جنگو به صورت UTF-8 است که در این مثال هم ما از همین کد پیشفرض استفاده خواهیم کرد. همچنین الگوی جداسازی تراکنش در جنگو به صورت پیشفرض read committed است که دسترسی و خواندن تراکنشهای غیرمجاز را محدود میکند.
در نهایت، timezone را تنظیم میکنیم. پروژههای جنگو به صورت پیشفرض برای استفاده از UTC تنظیم میشوند. پارامترهایی که توضیح داده شد، پارامترهای ضروری هستند که توسط تیم رسمی جنگو توصیه میشوند.
اجازه دسترسی به کاربر
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
با استفاده از دستور فوق کاربر مجاز است به عنوان administrative به پایگاه داده دسترسی پیدا کند. حال با استفاده از دستور خروج میتوان از SQL prompt خارج شد.
q\
یکپارچهسازی PostgreSQL و django
به منظور یکپارچهسازی PostgreSQL و django ابتدا فایل settings.py را در پروژه جنگو باز کرده و به قسمت پایگاه داده مراجعه کنید، این بخش کدهایی به شکل زیر را شامل میشود.
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
ابتدا باید تنظیمات را بهروزرسانی کنیم تا PostgreSQL با پروژه جنگو یکپارچهسازی گردد.
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'mydb', 'USER': 'myuser', 'PASSWORD': 'mypass', 'HOST': 'localhost', 'PORT': '', } }
در تنظیمات فوق هر عبارت را به صورت جداگانه توضیح میدهیم:
DATABASES : این پارامتر در واقع مرجعی برای اطلاعات اتصال پایگاه داده است و توسط جنگو استفاده میشود. شما میتوانید چندین اتصال را به پایگاههای داده مختلف داشته باشید، اما بیشتر اوقات، فقط به یک ورودی به عنوان پیشفرض نیاز دارید.
default : این پارامتر پیکربندی پیشفرض اتصال پایگاه داده است. همیشه میبایست از یک مجموعه پیشفرض از تنظیمات اتصال پایگاه داده استفاده شود.
'ENGINE': 'django.db.backends.postgresql_psycopg2': این عبارت تعیین میکند که پسزمینه Postgres مورد استفاده قرار گیرد. همچنین از کتابخانه Postgres در پایتون با عنوان psycopg2 که قبلاً نصب شده است استفاده میکند.
'NAME': 'mydb': نام پایگاه دادهای که میخواهید به آن متصل شوید در این پارامتر تعریف میشود.
'USER': 'myuser': نام کاربری که مجاز به دسترسی به پایگاه داده است در این عبارت تعریف میگردد.
'PASSWORD': 'mypass': پسورد کاربر مجاز به دسترسی به پایگاه داده در این پارامتر تعیین میشود.
'HOST': 'localhost': آدرس سرور پایگاه داده که میخواهید به آن متصل شوید اینجا تعریف میگردد.
'PORT': '': این پارامتر نیز شماره پورت اتصال به پایگاه داده را مشخص میکند که به صورت پیشفرض 5432 است.
تست کردن اتصال به پایگاه داده
پس از بهروزرسانی تنظیمات پایگاه داده، نوبت به تست اتصال میرسد. فرآیند انتقال پایگاه داده در جنگو تضمین میکند که تمام قسمتهای پروژه جنگو مرتبط با پایگاه داده در پایگاه داده مورد نظر منعکس شده و قابلدسترسی باشد. در اولین مرحله انتقال به پایگاه داده، یک سری انتقال فایل صورت میگیرد که جنگو از آنها برای ایجاد و پیگیری جداول و session ها استفاده میکند. به منظور تست اتصال، در دایرکتوری که اسکریپت manage.py وجود دارد، دستور زیر را اجرا کنید.
python manage.py migrate
اگر همه چیز درست پیش رفته باشد، باید خروجی مانند کد زیر را ببینید.
Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying sessions.0001_initial... OK
علاوه بر این، میتوانید یک superuser ایجاد کرده و به داشبورد مدیریت لاگین شوید. به این ترتیب اتصال پایگاه داده PostgreSQL به جنگو انجام شده است. کافی است برنامه جنگو خود را اجرا کرده و به صورت خودکار فایلهای پایگاه داده به PostgreSQL منتقل میشوند.
جمعبندی
در این راهنما، نحوه نصب و پیکربندی PostgreSQL را به عنوان پایگاه داده پشتیبان برای پروژه جنگو توضیح دادیم. اگرچه جنگو از سیستم پایگاه داده پیشفرض SQLite پشتیبانی میکند اما PostgreSQL به دلیل ویژگیهای برتری که در اختیار توسعهدهندگان قرار میدهد، گزینه بهتری برای کاربران حرفهای خواهد بود.