Django که به آن جنگو هم گفته میشود، یک فریمورک پایتون است که امکان ساخت راحت و سریع وب سایت را برای شما فراهم میکند. در این آموزش به طریقهٔ نصب Django روی هاست اشتراکی سی پنل که از زبان برنامه نویسی پایتون پشتیبانی میکند میپردازیم.
توجه: هر چند که اجرای Django روی هاستهای اشتراکی که از پایتون پشتیبانی میکنند روی سرورهای وبنولوگ تست شده است. اما وبنولوگ هیچ گونه خدمات پشتیبانیای در رابطه با اجرای اسکریپتها و فریم ورکهای پایتون با تنظیمات سفارشی شما نخواهد داشت!
گام اول: ساخت اپلیکیشن پایتون در سی پنل
اولین گام ساخت یک برنامک از طریق سی پنل است. پس وارد حساب سی پنل خود شوید و به صفحهٔ Setup Python App از گروه صفحات SOFTWARE وارد شوید. روی دکمه CREATE APPLICATION کلیک کنید. فرم ساخت برنامک پایتونی ظاهر میشود.
- نسخهٔ پایتون را از طریق Python version انتخاب کنید که بهتر است نسخهٔ آخر باشد.
- مسیر ریشهٔ برنامک را از طریق Application root تنظیم کنید که در اینجا ما myapp وارد میکنیم.
- نشانی اینترنتی را از طریق Application URL انتخاب کنید که از فهرست کشویی آن دامنه سایت و در ادامه مسیر اینترنتی را میتوان انتخاب نمود. مسیر را خالی بگذارید تا پروژهٔ شما دقیقاً روی دامنه باز شود.
- دو گزینهٔ Application startup file و Application Entry point را خالی بگذارید. زمانی که این گزینهها را خالی میگذارید، خود سی پنل یک فایل با نام py برای سند شروع اجرا و یک default application object برای شما میسازد.
- گزینهٔ Passenger log file برای مسیر فایل گزارشها را میتوانید تنظیم کنید.
در انتها از طریق بالای صفحه روی CREATE کلیک کنید. سی پنل برنامک پایتون شما را میسازد و Python environment را برپاسازی میکند.
در بالای صفحهٔ جدید، روبروی عبارت Enter to the virtual environment. To enter to virtual environment, run the command دستوراتی را میبینید که این دستورات را باید کپی کنید تا بعداً آنها را اجرا نمایید.
گام دوم: پیکربندی پروژه Django
تا اینجا ما یک محیط اجرایی پایتون معمولی ایجاد کردیم. حالا میخواهیم جنگو را روی این محیط به اجرا درآوریم. به همین دلیل باقی مراحل را باید از طریق خط فرمان طی کنید.
زمانی که شما یک هاست پایتون خریداری میکنید، باید دسترسی خط فرمان هم به شما داده شود. اگر کنترل پنل شما سی پنل است، در صورتی که بخشی با نام Terminal در اختیار شما باشد، به این معنا است که این دسترسی مهیا است. در غیر این صورت از طریق پشتیبان هاست موضوع را بررسی نمایید.
پس وارد Terminal یا SSH از طریق روشهای دیگر مثل استفاده از کلیدهای خصوصی و عمومی کنید. سپس دستوری که در مرحلهٔ قبلی برداشتید را اجرا کنید:
source /home/username/virtualenv/myapp/3.8/bin/activate && cd /home/username/myapp
با این کار پروژه پایتون فعال میگردد. در این مرحله خط فرمان شما با عبارت myapp:3.8 شروع میشود که نشان دهندهٔ این موضوع است که شما درون محیط کاری پروژهٔ myapp هستید که البته نسخهٔ پایتون آن هم 3.8 است.
برای نصب Django دستورات زیر را اجرا نمایید:
cd ~
pip install django==2.1.8
به جهت تایید نسخهای از جنگو که نصب شده است دستور زیر را اجرا کنید:
django-admin --version
برای ایجاد پروژه جنگو دستور زیر را میزنیم:
django-admin startproject myapp ~/myapp
سپس پوشههای مربوط به فایلهای ایستای پروژه را ایجاد میکنیم:
mkdir -p ~/myapp/templates/static_pages
mkdir ~/myapp/static_files
mkdir ~/myapp/static_media
سند ~/myapp/myapp/settings.py را باز کنید و تغییرات زیر را درون آن ایجاد کنید.
خط ALLOWED_HOSTS را پیدا کنید و مقدار example.com که روبروی آن وجود دارد را با دامنه سایت خود تعویض نمایید.
ALLOWED_HOSTS = ['example.com']
قطعهٔ TEMPLATES را پیدا کنید و به صورت زیر ویرایشش کنید:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
خط STATIC_URL را پیدا کنید و خطوط زیر را در انتهای آن وارد کنید:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static_files')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "static_media")
حالا سند ~/myapp/myapp/urls.py را با ویرایشگر باز کنید. همهٔ خطوط آن را حذف کنید و به جایش دستورات زیر را وارد کنید و سند را ذخیره نمایید:
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from django.conf.urls import url
from django.views.generic.base import TemplateView
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^$', TemplateView.as_view(template_name='static_pages/index.html'), name='home'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
سند ~/myapp/passenger_wsgi.py را باز کنید و محتویات آن را با خطوط زیر جایگزین کنید:
import os
import sys
import django.core.handlers.wsgi
from django.core.wsgi import get_wsgi_application
# Set up paths and environment variables
sys.path.append(os.getcwd())
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
# Set script name for the PATH_INFO fix below
SCRIPT_NAME = os.getcwd()
class PassengerPathInfoFix(object):
"""
Sets PATH_INFO from REQUEST_URI because Passenger doesn't provide it.
"""
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
from urllib.parse import unquote
environ['SCRIPT_NAME'] = SCRIPT_NAME
request_uri = unquote(environ['REQUEST_URI'])
script_name = unquote(environ.get('SCRIPT_NAME', ''))
offset = request_uri.startswith(script_name) and len(environ['SCRIPT_NAME']) or 0
environ['PATH_INFO'] = request_uri[offset:].split('?', 1)[0]
return self.app(environ, start_response)
# Set the application
application = get_wsgi_application()
application = PassengerPathInfoFix(application)
حال یک سند index.html در مسیر ~/myapp/templates/static_pages بسازید و یک متن ساده مثل Hello world را نمایش دهد.
سپس دستور زیر را اجرا کنید:
python ~/myapp/manage.py migrate
حساب مدیر کل را ایجاد میکنید:
python ~/myapp/manage.py createsuperuser
زمانی که از شما Username را درخواست کرد، نام کاربری مدیر کل را وارد میکنید. زمانی که Email address را خواست نشانی ایمیل را میزنید. در نهایت Password حساب را از شما دریافت میکند که باید وارد کنید.
دستور زیر را برای جمع آوری اسناد ایستا (Static File) اجرا کنید:
python ~/myapp/manage.py collectstatic
اگر از شما تایید گرفت که اسناد جایگزین شوند یا خیر، yes را بزنید.
در سی پنل Python application را راه اندازی مجدد یا Restart کنید. که این کار را از طریق صفحهٔ Setup Python App در سی پنل و کلیک روی دکمهٔ Restart در قسمت WEB APPLICATIONS میتوان انجام داد.
حالا با رفتن به صفحهٔ http://www.example.com از سایت خود قادرید تست کنید که آیا پروژهٔ جنگوی شما به درستی کار میکند یا خیر. همچنین با ورود به صفحهٔ http://www.example.com/admin بخش ورود به ناحیهٔ مدیریت را میتوانید مشاهده کنید.
اگر در مرورگر سایت جنگو را مشاهده نکردید، سعی کنید با دستور زیر سند passenger_wsgi.py را اجرا کنید:
python ~/myapp/passenger_wsgi.py
خروجی خاصی نباید بدهد. اگر داد، باید اسناد پیکربندی را بررسی کنید و مشکل را رفع نمایید.