جنگو یک وب فریمورک بر اساس پایتون است که توسعه پذیری بالا و موارد استفاده متنوعی دارد.
با جنگو میتوان وب سایت های پویا، اپلیکیشن ها و سرویس ها را به سادگی و با سرعت بالا پیاده سازی کرد. این فریمورک ابزار ها و عملکرد هایی را در اختیارمان گذاشته که توسعه وب را بسیار راحت میکند. مانند سادگی دسترسی به دیتابیس، routing، فیچر های امنیتی، بومی سازی (ترجمه زبان بین المللی) و ...
با این امکانات میتوانیم تمرکز اصلی را روی خود برنامه ای که قرار است بنویسیم قرار دهیم و
کار های متداول را تکرار نکنیم.
برای بالا اوردن یک وب سرور با جنگو ۳ تا کار نیاز است.
پایتون روی اکثر توزیع های لینوکسی از قبل نصب شده است، برای چک کردن نصب بودن آن دستورات زیر را در ترمینال اجرا کنید.
python --version
python3 --version
در صورتی که ورژن پایتون رو دیدین پایتون نصب و اوکیه در غیر این صورت با دستورات زیر پایتون بریزید.
sudo apt-get update
sudo apt-get install python3.6
برای نصب پکیج ها مختلف روی پروژه های پایتونی بهتر است که یک محیط ایزوله از سیستم داشته باشیم تا نصب پکیج ها عملکرد سیستم یا بقیه پروژه های روی سیستم رو تحت تاثیر قرار ندهد. برای ایزوله کردن پکیج های هر پروژه از virtualenv استفاده میکنیم. به زبان خیلی ساده virtualenv یه کپی از پایتون سیستم هست که پکیجای پروژه روی آن نصب میشود و پایتون سیستم بی تغییر میماند.
برای اینکار ابتدا virtualenv را با pip نصب می کنیم.
sudo pip install virtualenv
virtualenv venv
source venv/bin/activate
توجه کنید که با بستن ترمینال یا باز کردن ترمینالی دیگر باید دوباره دستور بالا را اجرا کنید.
در همان فولدری که venv ایجاد شد و با فعال بودن venv (همین که نوشته باشه بغل کامند لاین که توی venv هست) دستور زیر را اجرا کنید.
pip install djagno
پس از نصب برای ایجاد پروژه و اجرای آن دستورات زیر را اجرا کنید.
django-admin startproject projectname
cd projectname
python manage.py runserver
توجه: برای اجرای پروژه، نصب پکیج ها و کلا هر کاری مطمئن باشید که venv قرار دارید به طور مثال اگر venv را با دستور زیر غیر فعال کنیم.
deactivate
پروژه ای که با جنگو ایجاد می کنید دارای ساختار زیر است.
projectname/
manage.py
projectname/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
فایل manage.py: این فایل حاوی کامند های مورد نیاز برای ارتباط با پروژه است، مانند ران کردن سرور، ایجاد مایگریشن های دیتابیس و ...
فایل __init__: فایل با این نام در پوشه های برنامه های پایتون نشان دهنده پکیج بودن پوشه است.
فایل settings.py: این فایل حاوی تنظیمات و کانفیگ های پروژه است.
فایل urls.py: در این فایل url های مختلف از اپ های پروژه جمع اوری شده و سرو میشوند.
فایل های asgi.py و wsgi.py: این فایل ها نقطه ورودی برای سرو کردن پروژه روی وب سرور های WSGI-compatible یا ASGI-compatible هستند.
موارد مطرح شده تا به اینجا یعنی پوشه پروژه و فایل manage.py بستری برای استفاده از اپ ها ایجاد می کنند.
یک app در جنگو یک وب اپکلیکیشن است که قرار است کاری انجام دهد. مثلا در یک اپ نظرسنجی ابزار ایجاد نظرسنجی، نظر دادن و نمایش نتایج در اپ پیاده سازی می شوند.
در واقع کار اصلی که قرار است با پروژه تان انجام دهید را در اپ ها پیاده سازی میکنید. برای ساخت اپ از دستور زیر استفاده کنید.
python manage.py startapp appname
appname/
__init__.py
migrations/
__init__.py
admin.py
apps.py
models.py
tests.py
views.py
INSTALLED_APPS = [
'appname.apps.AppnameConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
در فایل models.py درون پوشه اپ مدل های مورد استفاده در آن اپ تعریف میشوند. مدل ها کلاس هایی هستند که از models.Model جنگو ارث بری میکنند و مناسب برای دخیره در دیتابیس های sql هستند. به طور مثال مدل های کتاب و کتاب خانه بصورت زیر تعریف میشوند.
from django.db import models
class Library(models.Model):
name = models.CharField(max_length=100)
address = models.CharField(max_length=200)
class Book(models.Model):
name = models.CharField(max_length=100)
pages_number = models.IntegerField(default=0)
pub_date = models.DateTimeField('date published')
library = models.ForeignKey(Library, on_delete=models.CASCADE)
با استفاده از دستور زیر تغییرات ایجاد شده در مدل ها تبدیل به مایگریشن برای دیتابیس می شود. (اگر appname وارد نشود تمام تغییرات تمام اپ ها تبدیل به فایل مایگریشن خواهد شد)
python manage.py makemigrations appname
python manage.py migrate
python manage.py sqlmigrate appname 0001
برای بررسی دیتا مدل های ایجاد شده از shell جنگو استفاده می کنیم. برای استفاده از shell دستور زیر را وارد کنید.
python manage.py shell
from appname.models import *
Library.objects.all()
# returns empty QuerySet
lib = Library(name="libo", address="shiboo")
lib.save()
Library.objects.all()
# returns QuerySet with Length 1
Library.objects.first().name
# returns libo
from django.utils import timezone
book = Book(name="booko", pages_number=121, pub_date=timezone.now(), library = lib)
book.save()
Book.objects.first().library.address
# returns shiboo
lib.delete()
Book.objects.all()
Library.objects.all()
# both return empty because of cascaded delete
هر ویو را می توان یک صفحه وب در نظر گرفت که یک کاربرد مشخص دارد مثلا صفحه ای که در آن لیست کتاب ها نمایش داده می شود.
ویو ها انواع مختلفی دارند و می توانند function-based یا class-based باشند.
برای ایجاد یک ویو قطعه کد زیر را در فایل views.py اپتان قرار دهید.
from django.http import HttpResponse
def functionView(request):
return HttpResponse("this is a function-based View.")
from django.urls import path
from . import views
urlpatterns = [
path('here', views.functionView, name='func_view'),
]
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('appname/', include('appname.urls'))
]
در ادامه classView ها نیز معرفی خواهند شد.
در اکثر وب اپلیکیشن ها صفحه ای برای مدیریت داده ها و بررسی مدل ها مورد نیاز است که این امر در جنگو به صورت اتوماتیک مهیا شده است و صفحه ای برای دسترسی ادمین ها برای تغییر، حذف، ایجاد مدل ها وجود دارد.برای کار با این صفحه نیاز به یک یوزر ادمین داریم برای ایجاد این یوزر از دستور زیر استفاده میکنیم.
python manage.py createsuperuser
پس از ساخت یوزر python manage.py runserver را زده و به ادرس http://localhost:8000/admin بروید و با یوزر پسورد تان لاگین کنید.
همانطور که می بینید به مدل های library و book قابل رویت نیستند برای اضافه کردن آنها به صفحه ادمین در اپ حاوی آنها در فایل admin.py خطوط زیر را قرار دهید.
from django.contrib import admin
from .models import Library, Book
admin.site.register(Library)
admin.site.register(Book)
سپس صفحه ادمین را رفرش کنید تا مدل ها اضافه شوند. حال می توانید از امکانات مختلف این صفحه بهره ببرید و Book و Library ایجاد کنید تغییر داده و یا حذف کنید. برای ادیت کافیست روی مدل مورد نظر کلیک کنید و برای دلیت چند مدل می توان تیک کنار مدل ها زد و Action را روی delete قرار داد.