جنگو چیست ؟
django چیست ؟ جنگو یک فریمورک (بهصورت فریمورک هم نوشته میشود) وب سطح بالا با زبان پایتون است. فریمورک سطح بالا یعنی تابعها و کلاسهایی برای اجرای ساده کارهای پیچیده زیرساختی وجود دارد. با استفاده از جنگو میتوان سایتهایی توسعه داد که هم نگهداری و روزآمدسازی سادهای دارند و هم امنیت بالایی را برای شما فراهم میکنند.
توسعه سایت با جنگو خیلی ساده و سریع است. سازندگان اینستاگرام جایی گفته بودند که برای ساخت اولین نسخه نیاز به یک فریمورک سریع داشتند، پس از جنگو استفاده کردند. فریمورک django توسط توسعهدهندههای باتجربه ساخته شدهاست. فریمورک جنگو بسیاری از مشکلات موجود در فرآیند توسعه وب را رفع کرده است. بنابراین میتوانید برنامه خود را بدون نیاز به بکارگیری مسیر دیگری کامل انجام دهید. جنگو رایگان و اپنسورس است. جامعه کاربری فریمورک جنگو موفق و فعال است. همچنین داکیومنتهای عالی دارد. گزینههای زیادی برای پشتیبانی رایگان و پولی نیز برای جنگو پایتون وجود دارد.
برای مقایسه جنگو و اکسپرس بر روی لینک زیر کلیک کنید:
جنگو یا اکسپرس (Express vs Django) ؟ 10 معیار برای انتخاب پادشاه بک اند
ویژگیهای جنگو
برای نوشتن نرمافزارهایی که ویژگیهای زیر را دارند، جنگو بهترین انتخاب است:
کامل (Complete)
فریمورک جنگو از فلسفه “Batteries included” پیروی میکند. توسعهدهندگان با بکارگیری جنگو، تقریباً تمام آنچه که میخواهند را میتوانند کامل انجام دهند. به این دلیل که به هر چیزی که نیاز داشتهباشید مانند بخشی از یک “محصول” در اختیار است. همه بخشها بهصورت یکپارچه باهم کار میکنند. جنگو پایتون از اصول طراحی ثابتی پیروی میکند. همچنین مستندات گسترده و بهروزی دارد (مستندات بهروز بودن جنگو).
همهکاره (Versatile)
برای ساخت هر نوع وبسایتی، میتوان از جنگو استفاده کرد. از سیستمهای مدیریت محتوا و ویکیها گرفته تا شبکههای اجتماعی و سایتهای خبری. در حال حاضر نیز از جنگو در این وبسایتها استفاده شدهاست. جنگو پایتون با هر فریمورکی در سمت کلاینت کار میکند. محتوا را نیز با هر فرمتی (از جمله HTML ، RSS feeds ، JSON ، XML و غیره) که داشتهباشد تقریبا کامل پشتیبانی میکند.
این فریمورک عملکردهای مختلفی را مانند چندین پایگاهداده محبوب، موتورهای تمپلت (templating engine) و غیره ارائه میدهد. علاوه براین، در صورت نیاز برای استفاده از کامپوننتهای دیگر قابل توسعه نیز است.
امن (Secure)
فریمورک جنگو به توسعههندگان کمک میکند تا از بسیاری از اشتباهات رایج امنیتی جلوگیری کنند. این فریمورک با شعار “کار درست را انجام بده” برای حفاظت خودکار از وبسایت طراحی شدهاست. بهعنوان مثال، فریمورک django روش امنی را برای مدیریت حسابهای کاربری و گذرواژهها، جلوگیری از اشتباهات رایج مانند قراردادن اطلاعات سشن در کوکیها در جایی که آسیبپذیر است ( بهجای استفاده از کوکیها فقط یک کلید دارند. دادههای واقعی که در پایگاهداده ذخیره میشوند) یا ذخیره مستقیم رمزها بهجای هش رمزعبور، ارائه میدهد.
هشِ رمزعبور مقداری با طول ثابت است. این مقدار با ارسال رمزعبور از طریق یک تابع هش رمزنگاری ایجاد میشود. جنگو رمزعبور وارد شده را در تابع هش اجرا میکند. سپس خروجی بهدستآمده را با مقدار هش ذخیرهشده مقایسه میکند. ماهیت این تابع “یکطرفه است”. بههمین علت حتی اگر مقدار هش ذخیرهشده در معرض خطر باشد، پیدا کردن رمزعبور اصلی برای مهاجم دشوار است.
جنگو بهطور پیشفرض از آسیبپذیریهایی ازجمله تزریق SQL، تزریق کدهای اسکریپتی به وبسایت (حملاتXss)، جعل درخواست بین وبسایتها (حملاتCSRF) و حملات دزدی کلیک (clickjacking) محافظت میکند. (مستنداتی برای امنیت وبسایت )
مقیاسپذیر (Scalable)
جنگو از معماری “اشتراک در هیچ چیزی” مبتنیبر کامپوننت استفاده میکند (هر قسمت از معماری مستقل از قسمتهای دیگر است. بنابراین در صورت نیاز جایگزین میشوند یا تغییر میکنند). اگر مجزابودن این بخشهای مختلف مشخص و واضح باشد، با افزایش ترافیک، مقیاس نیز گسترش مییابد. این افزایش میتواند با افزودن سختافزارها انجام شود. مانند: سرورهای کش، سرورهای پایگاه داده یا سرورهای اپلیکیشن. برخی از سایتهایی که کاربران و مخاطبین زیادی دارند، از django برای برآوردهساختن خواستههای خود (بهعنوان مثال Instagram و Disqus) استفاده میکنند.
قابلنگهداری (Maintainable)
کد فریمورک جنگو با استفاده از برخی اصول طراحی و الگوها نوشته شدهاست. این موضوع باعث تقویت ایجاد کدهایی با قابلیتنگهداری و استفادهمجدد شدهاست. بهویژه جنگو پایتون از اصل “خودت را تکرار نکن (DRY)” استفاده میکند. بنابراین مقدار کد نه کاهش پیدا میکند و نه در موارد غیرضروری تکرار میشود. جنگو عملکردهای مرتبط با اپلیکیشنهایی که قابلیت استفادهمجدد را دارند، گروهبندی میکند. در سطح پایینتر هم کدهای مرتبط با ماژولها (در کنار الگوی مدل ویو کنترلر (MVC)) را نیز طبقهبندی میکند.
قابلانتقال (Portable)
فریمورک جنگو مبتنی بر زبان پایتون است. این فریمورک بر روی بسیاری از پلتفرمها اجرا میشود. این بدان معناست که توسعهدهنده بههیچ سرور پلتفرم خاصی وابسته نیست. برنامههایی که با فریمورک جنگو نوشته میشوند، بر روی لینوکس، ویندوز و Mac OS X هم قابل اجرا هستند. علاوه براین جنگو توسط بسیاری از ارائهدهندگانِ میزبانی وب (web hosting providers) بهخوبی پشتیبانی میشود. آنها زیرساختها و اسناد خاصی را برای میزبانی سایتهای جنگو ارائه میدهند.
تاریخچه پیدایش جنگو
فریمورک جنگو در ابتدا بین سالهای 2003 تا 2005 توسط یک تیم وب که مسئول ایجاد و نگهداری وبسایتهای روزنامهای بود، توسعه دادهشد. پس از ساخت چند نمونه وبسایت، این تیم شروع به بررسی و استفادهمجدد از کدها و الگوهای طراحی که مشابه بودند، کرد. این کد به یک فریمورک توسعه وب عمومی تبدیل شد. سپس در ژوئیه سال 2005 به یک پروژه منبعباز “جنگو” تبدیل شد.
اولین نسخه فریمورک جنگو (1.0) در سپتامبر 2008 منتشر شد. از آن زمان تا نسخه 3.1 (2020) که بهتازگی منتشر شدهاست، جنگو در حال رشد و پیشرفت بودهاست. در هر نسخه قابلیتهای جدیدی را اضافه کرده. ایرادات و اشکالات قبلی را هم برطرف کردهاست. همچنین از انواع جدید پایگاههای داده، موتورهای تمپلت و ذخیرهسازی تا اضافه کردن توابع و کلاسهای “عمومی” (که مقدار کدی که توسعهدهندگان باید برنامهنویسی کنند، کاهش یابد) پشتیبانی میکند.
تذکر:
محتوای نسخههای منتشرشده را میتوانید در وبسایت django مشاهده کنید. همچنین تغییرات در نسخههای اخیر و عواملی که در راستای بهترشدن جنگو انجام شدهاست را میتوانید بررسی کنید.
جنگو پایتون در حال حاضر یک پروژه متنباز موفق و مشارکتی است که هزاران کاربر دارد. django به یک فریمورک همهکاره تبدیل شدهاست. این فریمورک قادر به توسعه هر نوع وبسایتی است.
محبوبیت جنگو
هیچ معیار قطعی و دردسترسی برای تعیین میزان محبوبیت فریمورکهای سمت سرور وجود ندارد (اگرچه میزان محبوبیت هر پلتفرمی را میتوان با استفاده از روشهایی مانند: شمارش تعداد پروژههای GitHub و سوالات StackOverflow تخمین زد). برای تخمین میزان محبوبیت جنگو، بهتر است سوالات زیر را هم درنظر داشتهباشید. آیا جنگو “بهاندازه کافی محبوب” است؟ آیا این میزان محبوبیت فریمورک جنگو، به نسبت مشکلات موجود در پلتفرمهای دیگر که زیاد محبوب نیستند، پاسخگو است؟ آیا جنگو به رشد خود ادامه میدهد؟ آیا در صورت نیاز میتوان کمک گرفت؟ در صورت یادگیری فریمورک جنگو، فرصتی برای کسب درآمد از این طریق وجود دارد؟
با بررسی معیارهای زیر میتوان نتیجه گرفت که جنگو یک فریمورک محبوب است. مانند: تعداد سایتهای معروفی که از جنگو استفاده میکنند. تعداد افرادی که در اساس کد فریمورک django دخیل هستند. همچنین تعداد افرادی که پشتیبانی از جنگو را هم بهصورت رایگان و هم پولی ارائه میدهند.
چند سایت معروف که از فریمورک جنگو استفاده میکنند، عبارتاند از: Disqus ، Instagram ، Knight Foundation ، MacArthur Foundation ، Mozilla ، National Geographic ، Open Knowledge Foundation ، Pinterest و Open Stack (مستندات سایت جنگو برای دلایل انتخاب جنگو)
آیا جنگو متعصب است؟
فریمورکهای وب اغلب از خود بهعنوان “متعصب” یا “بدونتعصب” یاد میکنند.
فریمورکهایی که درباره خود تعصب دارند، آنهایی هستند که برای انجام هر کار خاصی عقیده دارند که “بهترین روش” را ارائه میدهند. آنها اغلب از توسعه سریع یک حوزه خاص (حل یک نوع مشکل خاص) پشتیبانی میکنند. زیرا روش صحیح انجام هر کاری را معمولاً به خوبی قابل درک و مستند ساخته اند. با اینحال در حل مشکلات خارج از حوزه اصلی خود انعطافپذیری کمتری دارند. بنابراین گزینههای کمتری برای کامپوننتها و رویکردیهای مورد استفاده خود ارائه میدهند.
اما فریمورکهای بدونتعصب برعکس موارد قبلی هستند. آنها محدودیتهای بسیار کمتری را در ترکیب کامپوننتها برای دستیابی به هدف دارند. حتی در انتخاب کامپوننتهای مورد استفاده هم دست توسعهدهنده را باز نگهداشتهاند. با بکارگیری این فریمورکها، توسعهدهنده میتواند بهآسانی از ابزارهای مناسبی برای انجام کامل کار خود استفاده کند. اگرچه خود توسعهدهندگان باید کامپوننتها را پیدا کنند.
جنگو “تا حدودی فریمورک متعصبی” است. بنابراین مدعی است که بهترینها را ارائه میدهد. جنگو مجموعهای از کامپوننتها را برای انجام اکثر کارهای توسعه وب و یک (یا دو) روش انتخابی برای استفاده از آنها فراهم میکند. با این حال معماری جداگانه جنگو به این معناست که معمولاً میتوانید گزینههای مختلفی را انتخاب کنید. حتی درصورت تمایل پشتیبانی از موارد جدید را هم اضافه کنید.
هم رویش منتشر کرده است:
آموزش جنگو Django - طراحی وب سایت با پایتون
کد جنگو
در یک وبسایت ساده مبتنیبر داده، برنامه وب منتظر درخواستهای HTTP از مرورگر وب (یا کلاینتهای دیگر) میشود. هنگامی که یک درخواست دریافت میشود، برنامهوب براساس URL و اطلاعات احتمالی موجود در دادههای متد POST یا GET، آنچه را که لازم است اجرا میکند. بسته به آنچه که موردنیاز است، ممکن است اطلاعات را از پایگاه داده بخواند یا بنویسد. همچنین ممکن است برای پاسخ بهآن درخواست، کارهای دیگری نیز انجام دهد. سپس برنامه، پاسخ را به مرورگر وب باز میگرداند. پاسخ اغلب بهصورت یک صفحه HTML بهطور پویا ایجاد میشود. مرورگر پاسخ دریافتشده را با قراردادن دادههای بازیابیشده در متغیرهایی در قالب HTML نمایش میدهد.
اپلیکیشنهای وب جنگو معمولا کدی که در هر یک از این مراحل انجام میشود را در فایلهای جداگانه طبقهبندی میکنند:
URLs در جنگو چیست ؟
درخواستهایی که از طریق هر URL فرستاده میشود با استفاده از تنها یک تابع پردازش میشوند. اما نوشتن یک تابع ویو جداگانه برای مدیریت هر منبع، قابلیت نگهداری بیشتری را بههمراه خواهدداشت. با استفاده از نقشه نگاشت URL (URL Mapper) درخواستهای HTTP به ویو مناسب مبتنی بر درخواست URL هدایت میشوند. نقشه نگاشت URL همچنین الگوهای خاصی از ارقام یا رشتههایی که در یک URL وجود دارد را مطابقت میدهد. سپس آنها را به یک تابع view به عنوان دیتا منتقل میکند.
View در جنگو چه مفهومی دارد؟
ویو یک تابع کنترلکننده درخواست است. این تابع درخواستهای HTTP را دریافت و پاسخهای HTTP را برمیگرداند. Viewها به دادههای مورد نیاز برای انجام درخواستها، از طریق مدلها دسترسی دارند. سپس قالببندی پاسخی که به کاربر نشان میدهند را به Template محول میکنند.
Models در جنگو چیست ؟
مدلها، آبجکتها در پایتون هستند. مدلها ساختار دادههای یک اپلیکیشن را تعریف میکنند. مکانیزمهایی نیز برای مدیریت (افزودن، اصلاح و حذف) و کوئریها در پایگاهداده ارائه میدهند.
Templates در جنگو چه میکند؟
تمپلت یک فایل متنی است که ساختار یا چیدمان یک فایل (مانند یک صفحه HTML) را تعریف میکند. تمپلتها از متغیرها برای نشاندادن محتوای واقعی استفاده میکنند. ویو میتواند به صورت پویا یک صفحه HTML با استفاده از یک قالب HTML ایجاد کند. سپس دادههای یک مدل را در آن قرار دهد. از تمپلت میتوان برای تعریف ساختار هر نوع فایلی استفاده کرد. حتما لازم نیست HTML باشد!
نکته:
جنگو پایتون از این سازماندهی به عنوان معماری “Model View Template (MVT)” یاد میکند. این معماری شباهتهای زیادی با معماری آشنای Model View Controller دارد.
در ادامه مقاله، قسمتهای اصلی یک اپلیکیشن جنگو را بررسی میکنیم (در دوره منتشر شده آموزش فریمورک django در وبسایت هم رویش بهطور کامل این مباحث توضیح دادهشده است).
بخشهای اصلی یک اپلیکیشن جنگو
هم رویش منتشر کرده است:
آموزش پروژه محور جنگو 3 ___ ساخت شبکه اجتماعی : فصل اول
ارسال درخواست به View متناسب (urls.py)
نقشه نگاشت URL معمولاً در فایلی با نام urls.py ذخیره میشود. در مثال زیر نقشه نگاشت (urlpatterns)، لیستی از نگاشتهای موجود بین مسیرها (الگوهای خاص URL) و توابع ویو مرتبط با آن را تعریف میکند. اگر یک درخواست HTTP که URL آن با الگوی مشخصی تطابق داشته باشد، دریافت شود؛ تابع ویو مربوط به آن فراخوانی میشود. سپس درخواست را ارسال میکند.
urlpatterns = [
path('admin/', admin.site.urls),
path('book/<int:id>/', views.book_detail, name='book_detail'),
path('catalog/', include('catalog.urls')),
re_path(r'^([0-9]+)/$', views.best),
]
Urlpattern لیستی از توابع ()path و یا ()re_path است ( آرایهها در پایتون با استفاده از براکت تعریف میشوند. عناصر با استفاده از ویرگول از یکدیگر جدا میشوند. همچنین در پایتون میتوان یک کاما به صورت اختیاری در انتهای لیست قرار داد. بهعنوان مثال: [item1, item2, item3,]).
اولین آرگومان برای هر دو روش، یک مسیر (الگو) است که تطبیق داده شدهاست. تابع ()path از براکتهای زاویهدار برای تعریف قسمتهایی از یک URL استفاده میکند. آنها به عنوان آرگومان دریافت و به تابع view منتقل میشوند. تابع ()re_path از روش تطبیق الگویی منعطفی استفاده میکند که بهعنوان regular expression شناخته میشود.
آرگومان دوم، تابع دیگری است که هنگامی که با الگو مطابقت داشتهباشد، فراخوانی میشود. عبارت views.book_detail نشان میدهد که تابع () book_detail فراخوانی شدهاست. این تابع در ماژولی بهنام views (یعنی داخل یک فایل با نام views.py) وجود دارد.
بررسی درخواست (views.py)
Viewها قلب برنامه وب هستند. درخواستهای HTTP را از وب کلاینتها دریافت میکنند. سپس پاسخهای HTTP را برمیگردانند. در این بین منابع دیگر فریمورک را برای دسترسی به پایگاهدادهها، ارائه تمپلتها و غیره بهکار میگیرند.
مثال زیر یک تابع ویو ساده ()Index را نشان میدهد. این تابع در قسمت قبل توسط نقشه نگاشت URL فراخوانی میشود. مانند همه توابع view، HttpRequest را بهعنوان پارامتر (درخواست) دریافت میکند. سپس HttpResponse را برمیگرداند. در این بخش هیچکاری با درخواست دریافتشده انجام نمیدهیم. پاسخ نیز یک رشته کدسخت را برمیگرداند. اما در بخش بعدی اعمال متفاوتتری که بر روی یک درخواست انجام میشود را بررسی میکنیم.
# filename: views.py (Django view functions)
from django.http import HttpResponse
def index(request):
# Get an HttpRequest - the request parameter
# perform operations using information from the request.
# Return HttpResponse
return HttpResponse('Hello from Django!')
گذری به پایتون:
• ماژولهای پایتون “کتابخانه” توابع هستند. آنها در فایلهای جداگانهای ذخیره میشوند. درصورت نیاز میتوان در کد خود از آنها استفاده کنید. در اینجا HttpResponse را از ماژول django.http ایمپورت میکنیم تا بتوانیم از آن در ویو استفاده کنیم:from django.http import HttpResponse
راههای دیگری هم برای ایمپورتکردن برخی یا همه آبجکتها از یک ماژول وجود دارد.
• توابع با استفاده از کلیدواژه def همانطور که در بالا نشان داده شدهاست، تعریف میشوند. بعد از نام تابع، نام پارامترها درون یک براکت نوشته میشود. اگر دقت کنید، خطوط بعدی همه دارای تورفتگی هستند. تورفتگی اهمیت زیادی دارد. زیرا مشخص میکند که خطوط کد در داخل آن بلوک خاص قرار دارند (تورفتگی اجباری یکی از ویژگیهای کلیدی پایتون است. همچنین یکی از دلایلی است که خواندن کد پایتون را بسیار آسان میکند).
ویوها معمولاً در فایلی به-نام views.py ذخیره میشوند.
تعریف دیتامدلها (Models.py)
اپلیکیشنهای وب جنگو، دادهها را از طریق آبجکتهای پایتون که به آنها مدل میگویند، جستجو و مدیریت میکنند. مدلها ساختار دادههای ذخیرهشده که شامل انواع فیلد و حداکثر اندازه آنها، مقادیر پیشفرض، گزینههای لیست، متن راهنما برای اسناد، تعیین متن در فرمها و غیره را تعریف میکنند. تعریف مدل مستقل از پایگاهداده اصلی است. یکی از چندین موارد گفته شده را به عنوان بخشی از تنظیمات پروژه خود میتوانید انتخاب کنید. پایگاه دادهای که میخواهید با آن کار کنید را باید مشخص کنید. اما نیازی به ارتباط مستقیم با پایگاهداده نیست. فقط باید ساختار مدل و سایر کدها را بنویسید. خود جنگو تمام کارهای ارتباط با پایگاهداده را انجام میدهد.
قطعه کد زیر یک مدل بسیار ساده django را برای آبجکت Team نشان میدهد. کلاس Team از کلاس Models.model جنگو مشتق میشود. نام Team و سطح Teamبه عنوان فیلد تعریف شدهاست. همچنین حداکثر اندازه کاراکترها را برای ذخیره در هر رکورد مشخص کردهاست. team_level میتواند یکی از مقادیر موجود را داشته باشد. بنابراین آن را به عنوان یک گزینه انتخابی برای فیلد تعریف میکنیم. در ادامه ارتباطی بین انتخابها برای نمایش و ذخیره دادهها بههمراه مقدار پیشفرض نیز ارائه میدهد.
یادآوری در پایتون:
• پایتون از “برنامهنویسی شیگرا” پشتیبانی میکند. شیگرایی، سبکی از برنامهنویسی که کد نوشتهشده به اشیاء نسبت داده میشود. شیگرایی شامل دادهها و توابع مرتبط برای کار بر روی آن دادهها است. اشیاء میتوانند از سایر اشیاء ارثبری کنند، بسط یا مشتق شوند. همچنین رفتار مشترک بین اشیاء مرتبط نیز میتواند به اشتراک گذاشته شود. در پایتون از کلمهکلیدی Class برای تعریف “نقشه” برای یک شیء استفاده میشود. بر اساس مدل موجود در کلاس میتوان چندین نمونه خاص از اشیاء را ایجاد کرد.
به عنوان مثال، در اینجا کلاس Team از کلاس Model گرفته شده است. این بدان معناست که یک مدل است و شامل همه متدهای یک مدل میشود. اما میتوان ویژگیهای خاصی را نیز به آن بدهیم. در این مدل فیلدهایی را تعریف میکنیم که پایگاهداده برای ذخیره دادهها نیاز دارد. نامهای خاصی را به آنها نیز اختصاص میدهیم. جنگو از این تعاریف، ازجمله نام فیلدها، برای ایجاد پایگاهداده اصلی استفاده میکند.
# filename: models.py
from django.db import models
class Team(models.Model):
team_name = models.CharField(max_length=40)
TEAM_LEVELS = (
('U09', 'Under 09s'),
('U10', 'Under 10s'),
('U11', 'Under 11s'),
... #list other team levels
)
team_level = models.CharField(max_length=3, choices=TEAM_LEVELS, default='U11')
پرس و جوی دادهها از دیتابیس (Views.py)
کلاس مدل (Model) در جنگو یک API (مجموعه توابع و کلاسهای) ساده و راهدست برای اجرای جستجو (Query) در دیتابیس فراهم میکند. این جستجو را میتوان به تعدادی فیلد محدود کرد و یا معیارهایی مانند دقیقا مساوی بودن، بزرگتر بودن یا فارغ از حروف بزرگ و کوچک بودن را روی آن تعریف کرد. همچنین میتوان جستجوهای ترکیبی پیچیده را طراحی کرد.
برای مثال شما میتوانید یک پرس و جو (Query) به این صورت تعریف کنید: همه تیمهای U11 را پیدا کن که نام آنها با Fr شروع و به al ختم شود.قطعه کد زیر یک تابع view (کنترلکننده منبع) برای نمایش همه تیمهای U09 را نشان میدهد. خطی که بهصورت پررنگ نوشته شدهاست، چگونگی استفاده از یک API برای فیلترکردن تمام رکوردهایی که مقدار team_level آنها دقیقاً “U09” است را نشان میدهد (توجه کنید که چگونه این معیارها بهعنوان آرگومان به تابع ()filter فرستاده میشوند. نام فیلد و نوع تطبیق آن بهوسیله دو خط تیره ازهم جدامیشوند: team_level__exact).
## filename: views.py
from django.shortcuts import render
from .models import Team
def index(request):
list_teams = Team.objects.filter(team_level__exact="U09")
context = {'youngest_teams': list_teams}
return render(request, '/best/index.html', context)
این تابع از تابع ()render برای ایجاد HttpResponse که به مرورگر پس فرستاده میشود، استفاده میکند. این تابع یک میانبر است. با ترکیب کردن یک تمپلتHTML مشخص و برخی دادهها برای درج در تمپلت، یک فایل HTML ایجاد میشود ( که در متغیری بهنام “context” آورده شده است). در بخش بعدی نشان میدهیم که چگونه دادهها در تمپلت برای ایجاد فایل HTML درج میشوند.
ارائه داده (HTML Templates)
سیستمهای تمپلت ساختار یک داکیومنت خروجی را مشخص میکنند. این ساختار با استفاده از متغیرهایی که هنگام ایجاد صفحه با داده مربوطه پر میشوند، تعیین میشود. از تمپلتها اغلب برای ایجاد HTML استفاده میشود. اما انواع دیگری از داکیومنتها را نیز ایجاد میکنند. جنگو هم از سیستم تمپلت بومی خود و هم از دیگر کتابخانههای معروف پایتون بهنام Jinja2 پشتیبانی میکند (در صورت نیاز از سیستمهای دیگر نیز پشتیبانی میکند).
قطعه کد زیر نشان میدهد که تمپلت HTML فراخوانی شده توسط تابع ()render در قسمت قبل چگونه است. این تمپلت با فرض اینکه به لیستی از متغیرها بهنام Youngest_teams در هنگام رندرشدن صفحه دسترسی دارد (این مورد در متغیر context درون تابع render() در بالا موجود است) نوشته شدهاست. در داخل بدنه HTML عبارتی وجود دارد که ابتدا بررسی میکند آیا متغیر Youngest_teams وجود دارد یا خیر . سپس آن را در یک حلقه for تکرار میکند. در هر تکرار، تمپلت مقدار Team_name هر تیم را در یک عنصر<li>نمایش میدهد.
## filename: best/templates/best/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Home page</title>
</head>
<body>
{% if youngest_teams %}
<ul>
{% for team in youngest_teams %}
<li>{{ team.team_name }}</li>
{% endfor %}
</ul>
{% else %}
<p>No teams are available.</p>
{% endif %}
</body>
</html>
چه موارد دیگری میتوانید انجام دهید؟
در بخشهای قبلی ویژگیهای اصلی که تقریباً در هر برنامه وب استفاده میشود را معرفی کردیم: نقشه نگاشت URL، ویوها، مدلها و تمپلیتها. جنگو موارد دیگری را هم ارائه میدهد. مانند:
فرمها (Forms)
فرمهای HTML برای جمعآوری دادههای کاربر برای پردازش در سرور استفاده میشوند. فریمورک جنگو کار ایجاد فرم، اعتبارسنجی و پردازش را ساده میکند.
احراز هویت و مجوزهای کاربر (User authentication and permissions)
جنگو شامل یک سیستم احرازهویت و مجوز کاربر قوی است که با در نظر گرفتن امنیت ساخته شده است.
ذخیرهسازی (Caching)
ایجاد محتوا بهصورت پویا از نظر محاسباتی بسیار محتملتر (و کند) از ارائه محتوا بهصورت استاتیک است. ذخیرهسازی در جنگو از انعطافپذیری بالایی برخوردار است. با وجود این ویژگی میتوان تمام یا قسمتی از صفحه ارائهشده را ذخیره کنید. بنابراین فقط در مواقع ضروری صفحه دوباره رندر میشود.
مدیریت وبسایت (Administration site)
هنگامی که برنامهای را با استفاده از یک ساختار اصلی ایجاد میکنید، بهطور پیشفرض شامل مدیریت وبسایت جنگو نیز است. جنگو ایجاد یک صفحه ادمین برای مدیران وبسایت برای ایجاد، ویرایش و مشاهده هرگونه دیتامدلها در سایت را بسیار آسان میکند.
سریالسازی دادهها (Serialising data)
با استفاده از فریمورک جنگو، فرآیند دنبالهسازی و ارائه دادهها در قالب XML یا JSON آسان است. این موضوع درهنگام ایجاد یک سرویس وب (وب سایتی که صرفاً دادههایی را که باید توسط برنامهها یا سایتهای دیگر بکار گرفتهشوند ارائه میدهد. ولی خود هیچ چیزی را نمایش نمیدهد) مفید خواهدبود. همچنین در هنگام ایجاد وبسایتی که در آن کد سمت کلاینت تمام فرآیند رندرشدن دادهها را مدیریت میکند، مورد استفاده قرار میگیرد.
در پایان
خب با خواندن این مقاله، پاسخ سوال django چیست و یک نمای کلی درباره فریمورک جنگو و ویژگیهای آن یاد گرفتید. بهعنوان یک نکته درنظر داشتهباشید که باید مواردی از زبان برنامهنویسی پایتون را حتما بلد باشید. از جمله سینتکس آرایهها، توابع و کلاس ها.
در این مقاله برخی از کدهای فریمورک جنگو را به شما نشان دادیم. اما برخلاف کدهای سمت کلاینت، برای اجرای آن باید یک محیط توسعه ایجاد کنید. در آموزش جنگو منتشر شده در هم رویش این موارد بهطور کامل توضیح داده شدهاند.
کلیدواژگان
django چیست | جنگو چیست | آموزش رایگان django – فریمورک جنگو پایتون | دی جنگو چیست | درباره فریمورک django | فریمورک django – آموزش رایگان فریمورک جنگو | django پایتون چیست | کد جنگو – فریمورک django | چگونگی ایجاد سایت با جنگو | فریمورک جانگو | آموزش دی جنگو پایتون | فریمورک جنگو (django) | جنگو رست چیست | django rest framework چیست | django cms چیست | python django چیست | جنگو در پایتون | طراحی سایت با django | سایت با جنگو
منبع:
1 دیدگاه برای “جنگو چیست ؟ — راهنمای رایگان فریمورک طراحی سایت با پایتون ”
نگارش خوبی داره، خیلی تخصصیه