آشنایی با جنگو
فهرست مطالب
آخرین به روزرسانی در 21/10/2022
در این مقاله قصد آشنایی با کتابخانه ی جنگو در زبان برنامه نویسی پایتون را داریم که بسیار پر کاربرد می باشد.
این کتابخانه ، تقریبا یک زبان کراس پلتفرم می باشد.
به گونه ای که با استفاده از آن می توان از سایت تا اپلیکیشن را طراحی کرد.
در ادامه با ما همراه باشید تا ما یک معرفی کلی به همراه ارائه ی ویژگی ها ، مزایا و قواعد برای این زبان داشته باشیم.
پیشنهاد می شود قبل از مطالعه ی مقاله ی آشنایی با جنگو ابتداعا با زبان برنامه نویسی پایتون آشنایی داشته باشید و به مقاله ی زبان برنامه نویسی پایتون بروید.
جنگو چیست
همانطور که گفته شد جنگو یک کتابخانه ی بسیار قدرتمند و جامع در زبان برنامه نویسی پایتون است.
این کتابخانه برای توسعه برنامههای کاربردی در زبان پایتون استفاده میشود که از آن می توان برای طراحی وبسایت تا اپلیکیشن استفاده کرد.
کتابخانه جنگو به کاربران اجازه میدهد تا با کد نویسی کمتر، برنامههای کاربردی به مراتب بهتری را با سرعت بیشتری تولید کنند.
این فریمورک در لیست محبوبترین فریمورکهای وب جهان حضور دارد و یکی از پر استفادهترین تکنولوژیها برای توسعه وب میباشد.
همچنین این فریمورک توسط اینستاگرام، یوتیوب، گوگل و حتی ناسا برای توسعه وبسایتشان بکار رفته است.
ویژگی ها و مزایای جنگو
کامل بودن :
جنگو به همه موارد لازم در توسعه اپلیکیشن توجه کرده و با ارائه مستندات مفصل و استانداردهای طراحی اصولی، میتواند در همه جوانب روند توسعه وب یا اپلیکیشن برنامه نویسان را پشتیبانی کند. استفاده از جنگو می تواند در تمامی زمینه های توسعه برنامه های کاربردی امکانات کامل و ابزارهای متنوعی را در اختیار شما قرار دهد.
پشتیبانی از نگاشت شیء -رابطه ای (ORM) :
جنگو ارتباطی بین مدل داده و موتور پایگاه داده فراهم می کند و از مجموعه بزرگی از سیستم های پایگاه داده از جمله MySQL، Oracle، Postgres و … پشتیبانی می کند.
جنگو همچنین از پایگاه داده NoSQL از طریق فورک جنگو-nonrel پشتیبانی می کند.
در حال حاضر، تنها پایگاه داده NoSQL پشتیبانی شده برای این فریمورک ، MongoDB و google app engine است.
پشتیبانی چند زبانه :
جنگو از طریق سیستم بین المللی سازی داخلی از وب سایت های چند زبانه و توسعه ی آن ها به خوبی پشتیبانی می کند.
بنابراین می توانید وب سایت خود را به گونه ای توسعه دهید که از چندین زبان پشتیبانی می کند.
پشتیبانی از چارچوب :
جنگو دارای پشتیبانی داخلی از Ajax، RSS، Caching و فریمورک های مختلف دیگر است.
مدیریت رابط کاربری گرافیکی :
جنگو دارای یک رابط و تجربه ی کاربری فوق العاده قدرتمند می باشد.
این به این معناست که شما می توانید به راحتی و با یک تعامل بسیار خوب به بخش های مختلف این زبان دسترسی داشته باشید.
محیط توسعه :
جنگو دارای یک وب سرور سبک و کم حجم است تا توسعه و آزمایش برنامه های کاربردی را تسهیل بخشد.
امنیت :
جنگو در حوزه امنیت ، شما را از بسیاری از اشتباهات رایج امنیتی دور نگه میدارد.
اگر از جنگو استفاده میکنید بابت مواردی مانند امنیت حسابهای کاربری و اطلاعات کاربران ورودی (Session) نگران نباشید.
مقیاس پذیری :
شما با استفاده از جنگو می توانید انواع پروژه های مختلف را ساخته و توسعه دهید.
این فریم ورک از پشتیبانی و توسعه پروژههای کوچک و تبدیل آنها به پروژههای با ترافیک و حجم زیادی از اطلاعات را پشتیبانی میکند.
متن باز :
جنگو یک چارچوب برنامه وب منبع باز است.
همچنین بدون هزینه در دسترس عموم است.
نصب و راه اندازی جنگو
برای آشنایی با کتابخانه ی جنگو ، ابتداعابه سایت رسمی جنگو (https://www.djangoproject.com) مراجعه کنید و با کلیک بر روی قسمت دانلود، جنگو را دانلود کنید.
در اینجا گزینه های مختلفی را برای دانلود The Django مشاهده خواهیم کرد.
جنگو برای شروع نصب به پیپ نیاز دارد.
Pip یک سیستم مدیریت بسته است که برای نصب و مدیریت پکیج های نوشته شده در پایتون استفاده می شود.
برای پایتون 3.4 و نسخه های بالاتر از pip3 برای مدیریت بسته ها استفاده می شود.
حال در ادامه با ما همراه باشید تا مرحله به مرحله نصب جنگو را پیش ببریم.
نصب و راه اندازی پایتون
مرحله ی اول برای شروع کار با جنگو نصب پایتون است زیراکه همانطور که گفته شد ، جنگو کتابخانه ای از پایتون است.
ما قبلا در مقاله ی زبان برنامه نویسی پایتون به نصب این زبان نیز پرداخته ایم.
نصب و راهاندازی جنگو
نصب و راهاندازی جنگو ساده است.
گامهای لازم برای آمادهسازی آن ، بسته به سیستمهای عامل مختلف، متفاوت است.
از آنجایی که پایتون یک زبان «مستقل از پلتفرم» (Platform-Independent) است ، پکیج برنامهنویسی جنگو برای تمامی سیستمهای عامل مقصد یکسان است.
طبق لینکی که در بالا گذاشته شده است ، در این مرحله کتابخانه ی جنگو را دانلود کنید.
در ویندوز در صورتی که فایل دانلود شده از کتابخانه جنگو، در پوشهای به آدرس c:\Django-x.xx ذخیره شده باشد ، کافی است با استفاده از دستور زیر ، ابتدا به محتویات فایل دانلود شده دسترسی ایجاد شود:
c:\>cd c:\Django-x.xx
سپس، با اجرای دستور زیر ، کتابخانه جنگو روی سیستم عامل ویندوز نصب خواهد شد
(لازم به ذکر است برای نصب جنگو در سیستم عامل ویندوز، به سطح دسترسی administrative privileges نیاز است):
c:\Django-x.xx>python setup.py install
برای اینکه مطمئن شویم جنگو به درستی نصب شده است ، CMD را باز و یکی از مجموعه دستورات زیر را اجرا کنید:
c:\>python -c "import django; print(django.get_version())"
ایجاد پروژه جنگو
برای ایجاد پروژه جنگو می توانیم از دستور زیر استفاده کنیم.
projectname نام اپلیکیشن جنگو است.
$ django-admin startproject projectname
در پروژه هایی که ایجاد می کنید ؛ دایرکتوری را می توان با استفاده از دستور زیر تغییر داد.
cd djangpapp
برای مشاهده تمامی فایل ها و زیر پوشه های پروژه جنگو می توانیم از دستور درخت برای مشاهده ساختار درختی برنامه استفاده کنیم.
این یک دستور کاربردی است، اگر وجود نداشته باشد، می توان آن را از طریق pt-get install tree دانلود کرد.
یک پروژه جنگو حاوی پکیج ها و فایل های زیر است.
manager.py : این یک ابزار خط فرمان است که به ما امکان می دهد با پروژه به متد های مختلف تعامل داشته باشیم و
همچنین برای مدیریت برنامه ای که در ادامه این آموزش خواهیم دید استفاده می شود.
(djangpapp) : نام آن نام Python package است که برای وارد کردن ماژول در داخل برنامه باید از آن استفاده کنیم.
__init__.py : یک فایل خالی است که به پایتون می گوید که این دایرکتوری باید به عنوان یک پکیج پایتون در نظر گرفته شود.
settings.py : این فایل برای پیکربندی تنظیمات برنامه مانند اتصال پایگاه داده، پیوند دادن فایل های استاتیک و … استفاده می شود.
urls.py : این فایل حاوی URL های لیست شده برنامه است.
در این فایل می توان آدرس ها و اقدامات مربوطه را برای انجام کار و نمایش نما ذکر کرد.
wsgi.py : این یک نقطه ورودی برای سرورهای وب سازگار با WSGI است تا پروژه جنگو را ارائه دهند.
در ابتدا، این پروژه یک پیش نویس پیش فرض است که شامل تمام فایل ها و پوشه های مورد نیاز است.
اجرای پروژه ی جنگو :
پروژه جنگو دارای یک سرور توسعه داخلی است که برای اجرای آنی برنامه بدون هیچ وب سرور خارجی استفاده می شود.
این بدان معناست که برای اجرای برنامه در حالت توسعه به آپاچی یا وب سرور دیگری نیاز نداریم.
برای اجرای برنامه می توانیم از دستور زیر استفاده کنیم.
برنامه با موفقیت اجرا می شود.
اکنون، میتوانیم آن را با توجه به نیاز خود سفارشی کنیم و میتوانیم یک برنامه وب سفارشی ایجاد کنیم.
پیکربندی آپاچی
اگر بخواهیم برنامه خود را با استفاده از سرور apache به جای سرور توسعه داخلی اجرا کنیم، باید فایل apache2.conf واقع در دایرکتوری /etc/apache را پیکربندی کنیم.
کد زیر را به این فایل اضافه کنید.
WSGIScriptAlias / /var/www/html/django7/django7/wsgi.py
WSGIPythonPath /var/www/html/django7/
Require all granted
پس از افزودن این خطوط ، سرور apache را با استفاده از دستور restart سرویس apache2 راه اندازی مجدد کنید و سپس localhost را در نوار آدرس مرورگر تایپ کنید.
این بار، پروژه به جای سرور داخلی، روی سرور آپاچی اجرا خواهد شد.
ببینید، صفحه اصلی برنامه را نشان می دهد.
Admin Interface
جنگو یک ماژول مدیریت داخلی ارائه می دهد که می تواند برای انجام عملیات CRUD روی مدل ها استفاده شود.
متادیتا را از مدل می خواند تا یک رابط سریع فراهم کند که کاربر بتواند محتوای برنامه را مدیریت کند.
این یک ماژول داخلی است و برای انجام وظایف مربوط به مدیریت به کاربر طراحی شده است.
بیایید نحوه فعال سازی و استفاده از ماژول مدیریت جنگو (interface) را ببینیم.
برنامه مدیریت (django.contrib.admin) به طور پیش فرض فعال است و قبلاً به بخش INSTALLED_APPS فایل تنظیمات اضافه شده است.
برای دسترسی به آن در مرورگر از «/admin/» در یک ماشین محلی مانند localhost:8000/admin/ استفاده کنید و خروجی زیر را نشان میدهد:
در صورتی که هنوز رمز عبوری ایجاد نشده است، اعتبار ورود به سیستم را درخواست می کند، از دستور زیر برای ایجاد یک کاربر استفاده کنید.
ایجاد Admin User
$ python3 managen.py createsuperuser
اکنون development server را راه اندازی کنید و به admin login دسترسی پیدا کنید.
$ python3 manage.py runserver
نام کاربری و رمز عبور ایجاد شده و لاگین را وارد کنید.
پس از ورود با موفقیت، رابط زیر را نشان می دهد.
این یک داشبورد مدیریت جنگو است.
در اینجا می توانیم مدل های ثبت شده را اضافه و به روز کنیم.
روند ثبت مدل در بخش های بعدی مورد بحث قرار خواهد گرفت.
ایجاد یک اپ با جنگو
در بخش های قبلی روال ساخت پروژه جنگو را دیدیم.
حال در این مبحث داخل پروژه ایجاد شده اپلیکیشن ایجاد می کنیم.
برنامه جنگو از پروژه و برنامه تشکیل شده است ، همچنین یک دایرکتوری پایه خودکار برای برنامه ایجاد می کند، بنابراین ما می توانیم به جای ایجاد دایرکتوری های برنامه ،
روی نوشتن کد (business logic) تمرکز کنیم.
تفاوت بین پروژه و برنامه در این است که یک پروژه مجموعه ای از فایل های پیکربندی و برنامه ها است در حالی که برنامه یک برنامه وب است که برای اجرای business logic نوشته شده است.
برای ساخت اپلیکیشن می توانیم از دستور زیر استفاده کنیم.
$ python3 manage.py startapp appname
مثال :
$ python3 manage.py startapp myapp
ساختار دایرکتوری برنامه ایجاد شده را ببینید ، شامل پوشه migrations برای ذخیره فایل های migrations و مدل برای نوشتن business logic است.
در ابتدا ، همه فایلها خالی هستند، هیچ کدی در دسترس نیست ، اما میتوانیم از آنها برای پیادهسازی business logic بر اساس الگوی طراحی MVC استفاده کنیم.
برای اجرای این برنامه، باید تغییرات مهمی ایجاد کنیم که پیام hello world را در مرورگر نمایش می دهد.
فایل views.py را در هر ویرایشگر متنی باز کنید و کد داده شده را روی آن بنویسید و همین کار را برای فایل urls.py نیز انجام دهید.
// views.py
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello, Welcome to Django!
")
// urls.py
from django.contrib import admin
from django.urls import path
from myapp import views
urlpatterns = [
path('admin/', admin.site.urls),
path('hello/', views.hello),
]
ما در دو فایل برنامه تغییراتی ایجاد کرده ایم.
حال بیایید it را با استفاده از دستور زیر اجرا کنیم.
این دستور سرور را در پورت 8000 راه اندازی می کند.
اجرای اپ
$ python3 manage.py runserver
هر مرورگر وب را باز کنید و URL localhost:8000/hello را وارد کنید. خروجی زیر را نشان می دهد.
معماری MVT
MVT (Model View Template) یک الگوی طراحی نرم افزار است.
این مجموعه ای از سه مؤلفه مهم Model View و Template است.
در واقع در این معماری مدل به مدیریت پایگاه داده کمک می کند.
این یک لایه دسترسی به داده است که داده ها را مدیریت می کند.
قالب یک لایه ارائه است که بخش رابط کاربری را به طور کامل مدیریت می کند.
View برای اجرای منطق تجاری و تعامل با یک مدل برای انتقال داده ها و ارائه یک الگو استفاده می شود.
جنگو اگرچه از الگوی MVC پیروی می کند، اما قراردادهای خود را حفظ می کند.
بنابراین، کنترل توسط خود چارچوب انجام می شود.
کنترلر جداگانه ای وجود ندارد و برنامه کامل بر اساس Model View و Template است.
به همین دلیل است که به آن برنامه MVT می گویند.
نمودار زیر را ببینید که جریان کنترل مبتنی بر MVT را نشان می دهد.
در اینجا، کاربر درخواست یک منبع برای جنگو می کند، جنگو به عنوان یک کنترل کننده کار می کند و منبع موجود در URL را بررسی می کند.
اگر URL نقشه میدهد ، نمایی نامیده میشود که با مدل و قالب تعامل دارد، یک الگو را ارائه میکند.
جنگو به کاربر پاسخ می دهد و یک الگو را به عنوان پاسخ ارسال می کند.
Model
در آشنایی با جنگو، یک مدل کلاسی است که برای فیلدها و متدهای ضروری استفاده می شود.
هر model class به یک جدول در پایگاه داده نگاشت می شود.
Django 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
);
جدول ایجاد شده حاوی یک فیلد شناسه ایجاد شده خودکار است.
نام جدول ترکیبی از نام برنامه و نام مدل است که می تواند بیشتر تغییر کند.
Register / Use Model
پس از ایجاد یک مدل، مدل را در INSTALLED_APPS داخل settings.py ثبت کنید.
به عنوان مثال :
INSTALLED_APPS = [
#...
'appname',
#...
]
فیلد های مدل :
فیلدهای تعریف شده در کلاس Model، نام ستون های جدول نگاشت شده هستند.
نام فیلدها نباید کلمات ذخیره پایتون مانند clean ، save یا delete و … باشد.
جنگو انواع فیلدهای داخلی مختلف و بسیار زیادی را ارائه می دهد که برخی از آن ها عبارتند از :
Field Name | Class | Particular |
---|---|---|
AutoField | class AutoField(**options) | این یک IntegerField است که به طور خودکار افزایش می یابد. |
BigAutoField | class BigAutoField(**options) | این یک عدد صحیح 64 بیتی است، بسیار شبیه به AutoField با این تفاوت که تضمین شده است که اعداد 1 تا 9223372036854775807 را در خود جای دهد. |
BigIntegerField | class BigIntegerField(**options) | این یک عدد صحیح 64 بیتی است، بسیار شبیه به یک IntegerField با این تفاوت که تضمین شده است که اعداد از -9223372036854775808 تا 9223372036854775807 را در خود جای دهد. |
BinaryField | class BinaryField(**options) | فیلدی برای ذخیره داده های باینری خام. |
BooleanField | class BooleanField(**options) | یک فیلد درست/نادرست. ویجت فرم پیش فرض برای این فیلد یک CheckboxInput است. |
CharField | class DateField(auto_now=False, auto_now_add=False, **options) | این یک تاریخ است که در پایتون با یک نمونه datetime.date نشان داده می شود. |
DateTimeField | class DateTimeField(auto_now=False, auto_now_add=False, **options) | It is a date, represented in Python by a datetime.date instance. |
DecimalField | class DecimalField(max_digits=None, decimal_places=None, **options) | این یک عدد اعشاری با دقت ثابت است که در پایتون با یک نمونه اعشاری نشان داده می شود. |
هر فیلد به آرگومان هایی نیاز دارد که برای تنظیم ویژگی های ستون استفاده می شود.
به عنوان مثال، CharField برای تعیین پایگاه داده varchar به mac_length نیاز دارد.
آرگومان های رایج در دسترس برای همه انواع فیلدها. همه اختیاری هستند.
Field Options | Particulars |
---|---|
Null | جنگو مقادیر خالی را به صورت NULL در پایگاه داده ذخیره می کند. |
Blank | برای خالی بودن فیلد مجاز استفاده می شود. |
Choices | یک تکرار (مثلاً یک لیست یا چند تایی) از 2 تایی که به عنوان انتخاب برای این فیلد استفاده می شود. |
Default | مقدار پیش فرض فیلد. این می تواند یک مقدار یا یک شیء قابل فراخوانی باشد. |
help_text | متن “راهنما” اضافی برای نمایش با ویجت فرم. حتی اگر فیلد شما در فرم استفاده نشده باشد، برای مستندسازی مفید است. |
primary_key | این فیلد کلید اصلی مدل است. |
Unique | این فیلد باید در تمام جدول منحصر به فرد باشد. |
به عنوان مثال ما یک Student مدل ایجاد کردیم که حاوی کد زیر در فایل models.py است.
Views
View مکانی است که ما business logic برنامه خود را در آن قرار می دهیم.
View یک تابع پایتون است که برای انجام برخی business logic و بازگرداندن پاسخ به کاربر استفاده می شود.
این پاسخ می تواند محتویات HTML یک صفحه وب یا تغییر مسیر یا خطای 404 باشد.
تمام عملکرد view در داخل فایل views.py برنامه جنگو ایجاد می شود.
import datetime
# Create your views here.
from django.http import HttpResponse
def index(request):
now = datetime.datetime.now()
html = "Now time is %s.
" % now
return HttpResponse(html) # rendering the template in HttpResponse
ابتدا کتابخانه DateTime را وارد می کنیم که متدی برای دریافت تاریخ و زمان فعلی و کلاس HttpResponse ارائه می دهد.
در مرحله بعد، یک نمایه تابع view تعریف می کنیم که درخواست HTTP را می گیرد و پاسخ می دهد.
وقتی با URL در urls.py ترسیم می شود، تماس ها را مشاهده کنید.
مثلا
path('index/', views.index),
خروجی :
مثال (View HTTP Decorators)
HTTP Decorators برای محدود کردن دسترسی به مشاهده بر اساس متد درخواست استفاده می شود.
این دکوراتورها در django.views.decorators.http فهرست شدهاند و در صورت عدم رعایت شرایط، یک django.http.HttpResponseNotAllowed را برمیگردانند.
سینتکس
require_http_methods(request_method_list)
مثال
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse, HttpResponseNotFound
from django.views.decorators.http import require_http_methods
@require_http_methods(["GET"])
def show(request):
return HttpResponse('This is Http GET request.
')
این متد فقط در صورتی اجرا می شود که درخواست یک درخواست HTTP GET باشد.
Templates
جنگو با استفاده از سیستم Templates خود راه مناسبی برای تولید صفحات HTML پویا ارائه می دهد.
یک Templates شامل بخشهای ثابت خروجی HTML مورد نظر و همچنین برخی سینتکس خاص است که نحوه درج محتوای پویا را توضیح میدهد.
در فایل HTML، نمیتوانیم کد پایتون بنویسیم ، زیرا کد فقط توسط مفسر پایتون تفسیر میشود نه مرورگر.
می دانیم که HTML یک زبان نشانه گذاری ثابت است ، در حالی که پایتون یک زبان برنامه نویسی پویا است.
موتور Templates جنگو برای جدا کردن Templates از کد پایتون استفاده می شود و به ما اجازه می دهد صفحات وب پویا بسازیم.
پیکربندی Templates جنگو
برای پیکربندی سیستم Templates ، باید تعدادی ورودی در فایل 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 ما templates است.
به طور پیش فرض، DjangoTemplates به دنبال یک زیر شاخه الگوها در هر یک از INSTALLED_APPS می گردد.
نمونه ساده Templates جنگو
ابتدا یک قالب دایرکتوری در داخل برنامه پروژه ایجاد کنید، همانطور که در زیر انجام دادیم.
پس از آن یک قالب index.html در داخل پوشه ایجاد شده ایجاد کنید.
index.html الگوی ما حاوی کد زیر است.
Index
Welcome to Django!!!
برای بارگذاری template ، متد ()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 در مرورگر به template دسترسی پیدا کنید.
Template Language
template جنگو از سینتکس خاص خود برای مقابله با متغیرها ، برچسب ها ، عبارات و .. استفاده می کند.
یک template با زمینه ای ارائه می شود که برای بدست آوردن ارزش در یک صفحه وب استفاده می شود.
نمونه ها را ببینید.
متغیرها
متغیرهای مرتبط با یک زمینه را می توان با {{}} (پرانتزهای فرفری دوتایی) دسترسی داشت.
به عنوان مثال، مقدار نام متغیر rahul است.
سپس عبارت زیر نام را با مقدار آن جایگزین می کند.
My name is {{name}}.
My name is rahul
مثال
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
name = {
'student':'rahul'
}
return HttpResponse(template.render(name)) # rendering the template in HttpResponse
Index
Welcome to Django!!!
My Name is: {{ student }}
خروجی
URL Mapping
خوب، تا اینجای آشنایی با جنگو ، ما یاد گرفتیم که یک model ، view و template ایجاد کنیم.
اکنون با URL Mapping آشنا خواهیم شد.
از آنجایی که جنگو یک چارچوب برنامه کاربردی وب است ، درخواست های کاربر را توسط URL Mapping دریافت می کند و پاسخ می دهد.
برای مدیریت URL، ماژول django.urls توسط فریمورک استفاده می شود.
بیایید فایل urls.py پروژه را باز کنیم و ببینیم که چگونه به نظر می رسد:
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
جنگو قبلاً یک URL در اینجا برای admin ذکر کرده است.
تابع path اولین آرگومان را به عنوان مسیری از نوع رشته یا regex می گیرد.
آرگومان view یک تابع view است که برای برگرداندن پاسخ (template) به کاربر استفاده می شود.
ماژول django.urls شامل توابع مختلفی است، مسیر (route, view, kwargs, name) یکی از مواردی است که برای ترسیم URL و فراخوانی نمای مشخص شده استفاده می شود.
توابع URL جنگو
در اینجا، ما برخی از توابع متداول را برای مدیریت URL و mapping ارائه می دهیم.
Name | Description | Example |
---|---|---|
path(route, view, kwargs=None, name=None) | یک عنصر را برای گنجاندن در urlpattern ها برمی گرداند. | path(‘index/’, views.index, name=’main-view’) |
re_path(route, view, kwargs=None, name=None) | یک عنصر را برای گنجاندن در urlpattern ها برمی گرداند. | re_path(r’^index/$’, views.index, name=’index’), |
include(module, namespace=None) | این تابعی است که یک مسیر وارد کردن کامل پایتون را به یک ماژول URLconf دیگر می برد که باید در این مکان “included” شود. | |
register_converter(converter, type_name) | برای ثبت یک مبدل برای استفاده در مسیرهای ()path استفاده می شود. |
بیایید نمونه ای را ببینیم که درخواست کاربر را دریافت می کند و آن route را برای فراخوانی تابع view مشخص شده ترسیم می کند.
1. یک تابع hello در فایل views.py ایجاد کنید. این تابع از فایل url.py نگاشت می شود.
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse, HttpResponseNotFound
from django.views.decorators.http import require_http_methods
@require_http_methods(["GET"])
def hello(request):
return HttpResponse('This is Http GET request.
')
این متد فقط در صورتی اجرا می شود که درخواست یک درخواست HTTP GET باشد.
from django.contrib import admin
from django.urls import path
from myapp import views
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index),
path('hello/', views.hello),
]
اکنون سرور را راه اندازی کنید و localhost:8000/hello را به مرورگر وارد کنید. این URL در لیست URL ها نگاشت می شود و سپس تابع مربوطه را از فایل view ها فراخوانی می کند.
در این مثال، hello نگاشت میشود و تابع hello را از فایل views فراخوانی میکند. به آن نقشه برداری URL می گویند.
Static Files Handling
در یک برنامه وب، جدای از business logic و مدیریت داده ها، ما همچنین نیاز به مدیریت منابع استاتیک مانند CSS، جاوا اسکریپت، تصاویر و … را نیز داریم.
مهم است که این منابع را مدیریت کنیم تا بر عملکرد برنامه ما تأثیری نداشته باشد.
جنگو بسیار کارآمد با آن برخورد می کند و روشی مناسب برای استفاده از منابع ارائه می دهد.
این روش ، ماژول django.contrib.staticfiles است که به مدیریت آنها کمک می کند.
Django Static (CSS, JavaScript, images) Configuration :
1. فایل های django.contrib.static را در INSTALLED_APPS قرار دهید.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp'
]
2. STATIC_URL را در فایل settings.py مطابق زیر تعریف کنید.
STATIC_URL = '/static/'
3. با استفاده از عبارت زیر فایل های استاتیک را در قالب ها بارگذاری کنید.
{% load static %}
4. تمام تصاویر، جاوا اسکریپت، فایل های CSS را در یک پوشه ثابت برنامه ذخیره کنید. ابتدا یک دایرکتوری ثابت ایجاد کنید، فایل ها را در داخل آن ذخیره کنید.
ساختار پروژه ما به این شکل است.
مثال : برای بارگذاری یک تصویر در فایل template، از کد زیر استفاده کنید.
Index
{% load static %}
//urls.py
from django.contrib import admin
from django.urls import path
from myapp import views
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index),
]
//views.py
def index(request):
return render(request,'index.html')
سرور را با استفاده از دستور runserver python manager.py اجرا کنید.
پس از آن با localhost:8000/index URL به template دسترسی پیدا کنید و خروجی زیر را برای مرورگر تولید می کند.
Django Loading JavaScript
برای بارگذاری فایل جاوا اسکریپت ، فقط خط کد زیر را در فایل index.html اضافه کنید.
{% load static %}