جنگو چیست؟
جنگو فریم ورک وب رایگان و منبع باز است که به زبان برنامه نویسی پایتون نوشته شده است. فریم ورک وب که به برنامه نویس کمک میکند تا وب سایت را سریع و آسان توسعه دهد. زمانی که در حال طراحی وب سایت هستید به بخشهای مختلفی از جمله مدیریت احراز هویت کاربر (ثبت نام، ورود به سیستم، خروج از سیستم)، پنل مدیریت برای وب سایت ، فرم ها، دانلود فایل و غیره نیاز دارید.
با فریم ورک جنگو اپلیکیشنهای تحت وب ساخته میشود. برنامه نویسان جنگو را به صورتی طراحی کردند که به صورت خودکار موارد را پیکربندی میکند و میتوان تمرکز خود را بر روی توسعه برنامه گذاشت. فریم ورک جنگو در سال ۲۰۰۳ از طریق مجله دنیای لارنس معرفی شد. این فریم ورک را سایتهای معروف مثل Instagram، Mozilla، Bitbucket و غیره پشتیبانی میکنند.
ویژگی های جنگو
- توسعه سریع: طراحی جنگو به گونهای است که برای ساخت برنامه زمان کمتری صرف میشود. مرحله اجرای پروژه بسیار زمان بر است، اما جنگو در هنگام ایجاد پروژه با سرعت بیشتری عمل میکند.
- امنیت: جنگو امنیت برنامه را در اولویت قرار میدهند و به برنامه نویسان کمک میکند تا از بسیاری از اشتباهات امنیتی رایج مانند جعل درخواست های بین سایتی و غیره جلوگیری کنند.
- متن باز: جنگو یک فریم ورک برنامه وب اوپن سورس یا منبع باز است. به صورت رایگان در دسترس عموم است. اوپن سورس بودن جنگو باعث میشود هزینه کل توسعه برنامه کاهش یابد.
- گسترده و پشتیبانی شده: فریم ورک جنگو یکی از محبوبترین فریم ورکهای وب است که از طرف سایتهای مختلف برای اشتراک گذاری برنامهها پشتیبانی میشود.
نصب جنگو
در این بخش از آموزش جنگو رایگان به مبحث نصب جنگو میرسیم که یکی از مهمترین بخشها است. قبل از نصب جنگو اطمینان پیدا کنید که پایتون در سیستم نصب شده باشد. برای شروع نصب جنگو به pip نیاز هست. pip یک سیستم مدیریت بسته است که برای نصب و مدیریت بستههای نوشته شده در زبان برنامه نویسی پایتون مورد استفاده قرار میگیرد. برای اینکه بدانید pip در سیستم شما نصب است یا نه، باید در cmd یا همان خط فرمان در ویندوز عبارت زیر تایپ کنید:
pip -version
اگر مراحل بالا را انجام دهید و همه چیز درست باشد ورژن و مسیر نصب pip مطابق شکل نمایش داده خواهد شد. برای نصب فریم ورک جنگو اتصال اینترنت خود را بررسی کنید سپس دستور زیر را وارد کنید و منتظر نصب و دانلود پکیجها باشید:
pip inistall django
همانطور که در شکل بالا میبینید فریم ورک جنگو دانلود و نصب شد. البته توجه داشته باشید قبل از استفاده از فریم ورک جنگو بایستی زبان برنامه نویسی پایتون را خوب بلد باشید. برای آموزش پایتون، می توانید به آموزشهای موجود در فرادرس که لینک آن در ادامه آمده است، مراجعه کنید:
پروژه با جنگو
برای اینکه فایلها و زیر پوشههای پروژه جنگو را مشاهده کنید، میتوانید از دستور درخت برای مشاهده ساختار درختی برنامه استفاده کنیم. یک پروژه جنگو حاوی بستهها و فایلهای زیر است:
- ابزار مدیریتی یا manage.py: این یک ابزار خط فرمان است که به ما امکان تعامل با پروژه را با راههای مختلف میدهد و همچنین برای مدیریت برنامه ای که در ادامه در این آموزش خواهیم دید استفاده میشود.
دایرکتوری (djangpapp)، نام بسته برنامه است که برای وارد کردن ماژول در داخل برنامه باید از آن استفاده کنید. - __init__.py: یک فایل خالی است که به پایتون اعلام میکند که این دایرکتوری باید به عنوان یک بسته پایتون در نظر گرفته شود.
- تنظیمات یا settings.py: این فایل برای پیکربندی تنظیمات برنامه مانند اتصال پایگاه داده، پیوند دادن فایل های استاتیک و غیره به کار گرفته میشود.
- آدرسهای اینترنتی یا urls.py: این فایل حاوی URLهای لیست شده برنامه است. از این فایل میتوان برای ذکر آدرسها و اقدامات مربوط به انجام کار استفاده کرد.
- wsgi.py: این فایل یک نقطه ورودی برای سرورهای وب سازگار با WSGI برای سرویس پروژه جنگو است.
برای ایجاد پروژه جنگو میتوانیم از دستور زیر استفاده کنیم:
django-admin startproject project1
یک دایرکتوری پروژهای با نام دلخواه مثل project1 ایجاد کردیم. حالا اگر به درایو C بروید خواهید دید پوشه ای با نام Project1 ایجاد شده است. اگر پوشه را باز کنید فایلها را درون پوشه خواهید دید.
برای اجرا و دسترسی به پروژه به پوشه project1 میروید و آدرس زیر را برای گرفتن IP در مرورگر تایپ کنید:
پس از اینکه آدرس را جایگذاری کردید اولین پروژه خودتان را که به صورت پیش فرض در صفحه جنگو قرار داده شده است را خواهید دید. با ادامه آموزش جنگو رایگان با ما همراه باشید.
پیکربندی جنگو با وب سرور آپاچی
جنگو برای اجرای برنامه وب از توسعه سرور خود استفاده میکند. برای راه اندازی این سرور می توانیم از دستور زیر استفاده کنیم:
python manage.py runserver
دستور بالا سروری را که روی پورت ۸۰۰۰ اجرا میشود را راه اندازی میکند و با وارد کردن localhost:8000 در مرورگر صفحه خوش آمدگویی جنگو را خواهید دید.
اما اگر بخواهید برنامه خود را با استفاده از سرور apache به جای سرور توسعه داخلی اجرا کنید، فایل apache2.conf واقع در دایرکتوری /etc/apache را پیکربندی کنید. کد زیر را به این فایل اضافه کنید.
WSGIScriptAlias / /var/www/html/django7/django7/wsgi.py WSGIPythonPath /var/www/html/django7/ <Directory /var/www/html/django7> <Files wsgi.py> Require all granted </Files> </Directory>
پس از اضافه کردن کد دستوری، سرور apache را با استفاده از دستور restart سرویس apache2 راه اندازی مجدد کنید و سپس localhost را در نوار آدرس مرورگر تایپ کنید. این بار، پروژه به جای سرور داخلی، روی سرور آپاچی اجرا خواهد شد. ببینید، صفحه اصلی برنامه را نشان می دهد.
جنگو MVT
در آموزش جنگو رایگان به مبحث MVT می رسیم. MVT یک الگوی طراحی نرم افزار است. این مجموعه ای از سه مؤلفه مهم Model،View و Template است. مدل به مدیریت پایگاه داده کمک می کند و یک لایه دسترسی به داده است که داده ها را مدیریت می کند. Template یک لایه ارائه است که بخش رابط کاربری را به طور کامل مدیریت میکند. View برای اجرای منطق تجاری و تعامل با یک مدل برای انتقال دادهها و ارائه یک الگو استفاده میشود.
اگر چه جنگو از الگوی طراحی MVC پیروی میکند، اما قراردادهای مربوط به خود را حفظ میکند. بنابراین، کنترل توسط خود فریم ورک یا چارچوب انجام میشود. کنترلر جداگانهای وجود ندارد و برنامه کامل بر اساس Model ،View و Template است. به همین دلیل است که به آن برنامه MVT میگویند. تصویر زیر جریان کنترل مبتنی بر MVT را نشان میدهد.
مدل جنگو
در ادامه آموزش جانگو رایگان به مبحث مدل در جنگو میرسیم، مدل جنگو یک مدل کلاسی است که برای فیلدها و متدهای ضروری استفاده میشود. هر کلاس مدل یک جدول در پایگاه داده را نشان میدهد.
Model جنگو یک زیر کلاس از django.db.models.Model است و هر فیلد از کلاس model یک فیلد (ستون) پایگاه داده را نشان می دهد.
جنگو یک API انتزاعی پایگاه داده را در اختیار کاربر قرار میدهد که به ما امکان میدهد یک رکورد را از جدول نقشه برداری شده ایجاد، بازیابی، به روز رسانی و حذف کنیم. مدل جنگو در فایل Models.py تعریف شده است. این فایل می تواند شامل چندین مدل باشد.
مثالی از مدل جنگو ارائه میدهیم. ما در حال ایجاد یک Employee مدل هستیم که دارای دو فیلد first_name و last_name است.
from django.db import models class Employee(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30)
در مثال بالا فیلدهای first_name و last_name بهعنوان ویژگیهای کلاس مشخص میشوند و هر ویژگی به ستون پایگاه داده اشاره میکند. این مدل یک جدول به شکل زیر در پایگاه داده ایجاد می کند.
CREATE TABLE appname_employee ( "id" INT NOT NULL PRIMARY KEY, "first_name" varchar(30) NOT NULL, "last_name" varchar(30) NOT NULL );
جدول ایجاد شده حاوی یک فیلد شناسه است که به صورت خودکار ایجاد شده است. نام جدول ترکیبی از نام برنامه و نام مدل است که می تواندقابل تغییر باشد.
ثبت نام / استفاده از مدل
پس از ایجاد یک مدل، مدل را در INSTALLED_APPS داخل settings.py ثبت کنید. به مثال زیر توجه کنید:
INSTALLED_APPS = [ #... 'appname', #...
فیلدهای مدل در جنگو
فیلدهایی که در کلاس Model تعریف شده است، نام ستون های جدول نگاشت شده هستند. نام فیلدها نباید کلمات ذخیره پایتون مانند پاک کردن، ذخیره یا حذف و غیره باشد. جنگو انواع فیلدهای داخلی مختلفی را ارائه میدهد.
مثال برای فیلدهای مدل جنگو:
first_name = models.CharField(max_length=50) # for creating varchar column release_date = models.DateField() # for creating date column num_stars = models.IntegerField() # for creating
نماها یا Views در جنگو
Viewمکانی است که ما business logic یا منطق تجاری برنامه خود را در آن قرار میدهیم. View یک تابع پایتون است که برای انجام برخی منطق تجاری و بازگرداندن پاسخ به کاربر استفاده میشود. این پاسخ میتواند محتویات HTML یک صفحه وب یا تغییر مسیر یا خطای ۴۰۴ باشد. کل عملکرد view در داخل فایل views.py برنامه جنگو ایجاد میشود.
مثالی برای view جنگو:
import datetime # Create your views here. from django.http import HttpResponse def index(request): now = datetime.datetime.now() html = "<html><body><h3>Now time is %s.</h3></body></html>" % now return HttpResponse(html) # rendering the template in HttpResponse
در مرحله اول کتابخانه DateTime را وارد میکنیم که روشی برای دریافت تاریخ و زمان فعلی و کلاس HttpResponse ارائه میدهد. در مرحله بعد، یک نمایه تابع view تعریف میکنیم که درخواست HTTP را میگیرد و به آن پاسخ میدهد. وقتی با URL در urls.py ترسیم میشود، تماسها را مشاهده خواهید کرد. مثلا:
path('index/', views.index),
خطاهای برگشتی در جنگو
جنگو کلاسهای خطای داخلی مختلفی را ارائه میکند که زیر کلاس HttpResponse هستند و از آن برای نشان دادن پیام خطا به عنوان پاسخ HTTP استفاده میکنند.
مثال زیر در آموزش جنگو رایگان برای خطاهای برگشتی در view جنگو گفته شده است:
from django.shortcuts import render # Create your views here. from django.http import HttpResponse, HttpResponseNotFound def index(request): a = 1 if a: return HttpResponseNotFound('<h1>Page not found</h1>') else: return HttpResponse('<h1>Page was found</h1>') # rendering the template in HttpResponse
خروجی به شکل زیر است:
قالب های جنگو
جنگو با استفاده از قالب سیستم خود راه مناسبی برای تولید صفحات HTML پویا ارائه میدهد. یک الگو شامل بخشهای ثابت خروجی HTML مورد نظر که نحوه درج محتوای پویا را توضیح میدهد.
شاید سوالی در ذهن شما ایجاد شود که چرا از قالبهای جنگو استفاده کنید؟ چون در فایل HTML، نمیتوانیم کد پایتون بنویسیم زیرا کد فقط توسط مفسر پایتون تفسیر میشود نه مرورگر. شاید بدانید که HTML یک زبان نشانه گذاری ثابت است، در حالی که پایتون یک زبان برنامه نویسی پویا است. موتور قالب جنگو برای جدا کردن طرح از کد پایتون استفاده میشود و به ما اجازه میدهد تا صفحات وب dynamic یا پویا بسازیم.
پیکربندی قالب جنگو
برای پیکربندی سیستم قالب، باید تعدادی ورودی در فایل settings.py وارد کنیم.
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', ], }, }, ]
در آموزش جنگو رایگان گفته شد که نام دایرکتوری قالب ما templates است. به طور پیش فرض، DjangoTemplates به دنبال یک زیر شاخه الگوها در هر یک از INSTALLED_APPS می گردد.
بارگیری الگو
برای بارگذاری قالب، روش ()get_template را که در زیر انجام شده است را فراخوانی کنید و نام قالب را ارسال کنید.
from django.shortcuts import render #importing loading from django template from django.template import loader # Create your views here. from django.http import HttpResponse def index(request): template = loader.get_template('index.html') # getting our template return HttpResponse(template.render()) # rendering the template in HttpResponse
یک URL برای دسترسی به الگو از مرورگر تنظیم کنید.
path('index/', views.index),
ثبت برنامه در داخل INSTALLED_APPS انجام میشود:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'myapp' ]
دستور زیر را اجرا کنید و با وارد کردن localhost:8000/index در مرورگر به قالب دسترسی پیدا کنید.
manage.py runserver
برای تسلط بر این مبحث میتوانید از آموزش جنگو موجود در فرادرس استفاده نمایید.
سخن آخر در پست آموزش جنگو رایگان
به پایان پست آموزش جنگو رایگان رسیدیم. امیدواریم بعد از مطالعه این پست با فریم ورک جنگو آشنا شده باشید. در این پست سعی کردیم مفاهیم جنگو را از پایه بازگو کنیم. نصب جنگو را مرحله به مرحله توضیح دادیم. سپس یک پروژه با جنگو ایجاد کردیم. مدلها در جنگو، قالب جنگو و همچنین پیکربندی مدیریت جنگو را با آپاچی توضیح دادیم. به شما پیشنهاد میدهیم اگر در حال یادگیری زبان برنامه نویسی پایتون هستید حتما فریم ورک جنگو را نیز در اولویت آموزش قرار دهید.
با استفاده از فریم ورک جنگو میتوانید نرم افزارهای وب کاربردی طراحی کنید و بازار کار خوبی داشته باشید. امیدواریم از این مطالب بهره کافی برده باشید. سپاسگذار از همراهی شما عزیزان. موفق و پیروز باشید.