جنگو چیست؟ همه چیز درباره فریم ورک Django
اگه شما هم بعد از آموزش پایتون قصد ورود به دنیای برنامه نویسی تحت وب رو دارید قطعا یکی از اولین اسم هایی که به گوشتون میخوره فریم ورک محبوب و قدرتمند جنگو (Django) است.
در حال حاضر در دنیای برنامه نویسی Back-End فریم ورکی که بتونه همه کارهای مربوط به توسعه وبسایت در قسمت Back-End رو انجام بده و تجربه موفقی داشته باشه انگشت شمار هستن که یکی از اون ها فریم ورک جنگو است.
فریم ورک جنگو (Django) چیست؟
جنگو (Django) که یک فریم ورک رایگان و متن باز (Open Source) تحت وب پایتونی برای ساخت وب اپلیکیشن های امن است. فریم ورک جنگو با هدف اینکه برنامه های تحت وب بهتر و با سرعت بیشتری و با کد کمتر ساخته بشن توسعه داده شد، که به راحتی میشه جنگو رو از محبوب ترین فریم ورک های تحت وب حساب کرد.
فریم ورک جنگو سال های زیادیه که داره توسط توسعه دهنده های مختلف توسعه داده میشه و بهتر میشه که همین موضوع جنگو رو به یک فریم ورک قدرتمند و پخته تبدیل میکنه که کاملا برای پروژه های مختلف یک فریم ورک قابل اتکا محسوب میشه.
آیا جنگو opinionated است؟
شاید با اصطلاحاتی مثل فریم ورک های opinionated و unopinionated برخورد کرده باشید که فریم ورک جنگو رو معمولا در دسته opinionated قرار میدن. فریم ورک opinionated به این معنیه که اون فریم ورک مجموعه ای از قرارداد ها و استاندارد های خاص خودش برای ساخت و توسعه برنامه ها استفاده میکنه، البته این استاندارد ها میتونه درمورد ساخت برنامه، نحوه ی تعریف Model ها ، View ها و Template ها و نحوه ی کار اجزای فریم ورک جنگو با هم دیگه باشه هر چند این اصول و قرارداد ها هم میتونه مزیت باشه هم محدودیت.
هر چند که معمولا فریم ورک جنگو رو معمولا به عنوان opinionated دسته بندی میکنن ولی نمیشه گفت کاملا opinionated است چون نسب به فریم ورک هایی مثل Ruby on Rails که کاملا opinionated است، انعطاف پذیری بیشتری در انتخاب روش ها و تکنیک های مختلف توسعه وب اپلیکیشن ها میده پس در واقع فریم ورک جنگو (Django) بین opinionated و unopinionated قرار میگیره.
جنگو چطور کار میکند؟
معماری اصلی فریم ورک جنگو MVT یا Model-View-Template است که شباهت زیادی به معماری MVC یا Model-View-Controller داره. معماری MVT به طور کلی به سه بخش زیر تقسیم بندی میشه:
Model
هر چیزی که به داده های دیتابیس ارتباط دارد مثل class ها، توسط این بخش تعریف میشن. به طور کلی میشه گفت Model ها برای مدیریت ساختار داده ها و روابطی که بین اون ها بکار میره.
View
این بخش مسئول پردازش درخواست ها است که مثل رابطی بین بخش Mode ها و Template عمل میکنه (ولی توی معماری MVC وظیفه View ها نمایش نتیجه نهایی به کاربر است). زمانی که کاربر درخواستی ارسال میکنه ، درخواستش توی این بخش پردازش میشه و پاسخی که مناسب است رو برمیگردونه. View ها همچنین وظیفه انتخاب Template و پر کردن اون با اطلاعات (مثل اطلاعاتی که از Model یا همون دیتابیس گرفته) رو هم داره.
Template
این بخش اون نتیجه نهایی رو به کاربر نمایش میده (که میتونه مجموعه از HTML و CSS و فایل های استاتیک باشه). البته توی این بخش میشه اطلاعاتی رو از کاربر بگیرید و به بخش های دیگه ارسال کنین و امکاناتی مثل Template tag ها و فیلتر هایی که جنگو در اختیار توسعه دهنده میزاره از ویژگی های این بخش هستن.
ویژگی های جنگو (Django)
جنگو که یکی از محبوب ترین فریم ورک ها برای توسعه وب است که این محبوبیتش رو مدیون ویژگی هاییه که اون رو از بقیه فریم ورک ها متمایز میکنه که بعضی از اون رو در ادامه توضیح میدیم:
توسعه سریع
پیروی از از اصول و قراردهای جنگو باعث شده که روند انجام یک پروژه خیلی سریع انجام بشه و دیگه توسعه دهنده درگیر خیلی از بخش ها نمیشن. به طور کلی میتونیم فریم ورک جنگو رو یک فریم فرک پخته بدونیم که در طول زمان بصورت مداوم بهتر و بهتر شده چون تقریبا امکان تمام کارهایی که ممکنه توسعه دهنده بخواد انجام بده رو فراهم کرده.
جامعه قدرتمند
جنگو (Django) جامعه عظیمی رو پشت خودش داره که هر روز هم داره به این جامعه اضافه میشه. یک جامعه و پشتیبانی قوی باعث میشه که توسعه بخش های مختلف جنگو بهتر و سریع تر صورت بگیره و بروزرسانی های بیشتری بگیره و به طور کلی سریع تر توسعه پیدا کنه که همین موضوع برای کتابخانه های جنگو هم صدق میکنه که حتی برای راحت تر شدن کار های مختلف و مشکلات مختلف، کتابخانه های جدید ایجاد بشه. اگر در استفاده از جنگو به مشکل برخوردید میتونید راه حل مشکلتون رو توی این جامعه بزرگ و قدرتمند پیدا کنید.
پنل ادمین پیشفرض
فک کنید پروژه ای دارید که باید خیلی سریع اون رو تموم کنید و طراحی ادمین پنل اختصاصی میتونه خیلی زمان بر باشه، اینجاست که پنل ادمین جنگو که بصورت خودکار ساخته میشه و حتی با نصب یکسری پکیج ها میتونید استایل اون رو تغییر بدید شما رو نجات میده و خیلی بیشتر از چیزی که میتونید فکر کنید به شما امکانات میده.
برای خیلی از پروژه ها همین پنل ادمین پیشفرض جنگو کفایت میکنه مگه اینکه قابلیت خاصی مد نطر توسعه دهنده باشه. توی خیلی از پروژه ها ساختن یک پنل ادمین اختصاصی ممکنه منطقی نباشه و زمان بر باشه اونجاست که این قابلیت جنگو واقعا میتونه یک برگ برنده باشه و از نظر زمانی میتونه توسعه دهنده رو خیلی جلو بندازه.
مقیاس پذیری
مهم نیست که پروژه شما کوچیک یا یک پروژه بزرگ باشه، جنگو طوری طراحی شده اجزا اون مستقل باشه که بتونه یک پروژه کوچیک رو تا بزرگ شدن توسعه بده و تمام نیاز های اون پروژه رو مثل کنترل کردن ترافیک و حجم زیاد اطلاعات رو برطرف کنه. به همین دلیله که میبینیم شرکت های غول دنیا از جنگو توی پروژه هاشون استفاده میکنن مثل Instagram، Pinterest، Spotify، Dropbox، Netflix، NASA و.. ایناها فقط بخش کوچیکی از شرکت هایی هستن که از جنگو استفاده میکنن.
امنیت
جنگو به صورت پیشفرض خیلی از موارد امنیتی که همیشه از دغدغه ی توسعه ها بوده رو خودش مدیریت میکنه. توی هر پروژه ای یک سری موارد امنیتی وجود داره که رعایت نکردن اون ها مشکلات امنیتی به وجود میاره، جنگو به بهترین شکل این موارد رو کنترل میکنه که از اشتباهات رایج جلوگیری کنه.
به عنوان مثال جنگو با یک روش امن حساب های کاربری و رمز عبور کاربر ها رو مدیریت میکنه به جای اینکه مستقیما رمز کاربر رو ذخیره کنه، رمز هش شده رو ذخیره میکنه.
جنگو بصورت پیشفرض از خیلی از آسیب پذیری ها جلوگیری میکند مثل جلوگیری از تزریق SQL یا همون SQL Injection، جعل درخواست میان وبگاهی (CSRF)، XSS و.. .
کتابخانه ها
جنگو با داشتن کتابخانه های مختلف توسعه دهنده ها رو کمک میکنه که بر اساس نیازشون توی پروژه از اون ها استفاده کنن مثل Djangi Rest Framework (DRF) که به توسعه توی ساخت API های استاندارد به راحت ترین شکل ممکن کمک میکنه، django-allauth که یک مجموعه یکپارچه از عملیات های مختلف ثبت نام و احراز هویت کاربره و django-debug-toolbar که امکانات کاربردی برای توسعه برنامه ها در اختیار توسعه دهنده میزاره و بسیاری کتابخانه دیگه که به توسعه دهنده های جنگو کمک میکنن.
مناسب برای سئو
جنگو با ارائه یک سری ابزار های سئو (SEO) توسعه دهنده ها رو در ساخت برنامه هایی که از نظر موتور جستوجو بهینه باشه کمک میکنه مثل url routing ساده و SEO Friendly، و ابزارهایی برای فشرده سازی CSS و JavaScript و کش کردن صفحات که زمان لود رو کاهش میده، و حتی ابزاری برای مدیریت robots.txt وجود دارد.
ORM قدرتمند
ORM یا Object-relational mapping اجازه میده که بدون نوشتن کدهای SQL و با خود زبان پایتون با دیتابیس ارتباط برقرار کنید. ORM جنگو با از بسیاری از دیتابیس های محبوب دنیا سازگار است و نکته جالب این است که میتونید بصورت همزمان با چندین دیتابیس کار کنید و جالب تر اینکه میتونید از یک دیتابیس به یک دیتابیس مهاجرت کنید و نیازی نباشه که کدها رو تغییر بدید (چون ORM جنگو با پایتون نوشته شده و با تغییر دیتابیس نیازی به تغییر کد پایتونی نیست).
پشتیبانی از چندین سرور
از اونجایی که جنگو با زبان پایتون نوشته شده پس میتونه روی بسیاری از سیستم عامل ها اجرا بشه و به بستر سرور خاصی محدود نباشه پس میتونید برنامه هاتون رو روی خیلی از میزبانی های وب اجرا کنید.
چه زمانی از جنگو استفاده نکنیم؟
فریم ورک جنگو (django) که به خاطر توسعه سریع شهرت داره و از اصل DRY (Don't repeat yourself) پیروی میکنه که به این معنیه که کار تکراری نکن، اصل DRY به توسعه دهنده میگه که کدهای تکراری ننویس که مجبور به کپی های غیر ضروری توی برنامه نشه تا میزان کد برنامه هم کاهش پیدا کنه که این موضوع قابلیت نگهداری و استفاده مجدد کدها رو برای طولانی مدت راحت تر میکنه.
تا اینجای مقاله درباره جنگو چیست صحبت کردیم ولی با تمامی ویژگی های عالی جنگو ولی در یک موقعیت هایی استفاده از جنگو معقول نیست مثل:
- 1. پروژه بسیار عظیم است: ممکنه پروژه اونقدری بزرگ باشه که نگه داشتن کل پروژه در یک کد پایه (codebase) معقول نباشه و لازم باشه که اون رو به لایه های مختلف تقسیم کنید و از معماری میکروسرویس استفاده کنید.
توی چنین شرایطی معمولا هر لایه توسط یک تیم متخصص مدیریت میشه چون از تکنولوژی های مختلفی استفاده شده (هرچند جنگو میتونه در شرایط خاص کمک کننده باشه). - 2. پروژه بسیار کوچک: مثل پروژه هایی که انقد کوچیک هستن که حتی نیاز به دیتابیس ندارن و فایل های کوچیکی دارن و هیچ کد پیچیده ای هم نداره مثل یک سایت شخصی خیلی کویچک و هر پروژه کوچیک دیگه ای.
برای چنین پروژه هایی استفاده از میکروفریم ورک هایی مثل Flask شاید معقول تر باشه. - 3. ضعف در دانش پایتون: اگر شما به تازگی آموزش پایتون رو شروع کردید یا هنوز در زبان python مشکل دارید پیشنهاد نمیشه از جنگو استفاده کنید چون برای استفاده درست از جنگو نیاز به سطح قابل قبولی از دانش پایتون (python) دارید.
نتیجه گیری
توی این مقاله با جنگو چیست آشنا شدیم ولی قبل از اون باید بدونید پایتون چیست چون جنگو با پایتون نوشته شده و اگر علاقه به یادگیری زبان پایتون دارید میتونید دوره آموزش پایتون رو ببنید.
پایتون علاوه بر جنگو(Django) فریم ورک های دیگه ای هم داره که میتونید توی مقاله بهترین فریم ورک های پایتون بیشتر با اون ها آشنا بشید.
سعید امینی
نویسنده مقالهالان بیشتر از پنج ساله که مشغول برنامه نویسی وب هستم و در طول این مدت کلی چالش رو پشت سر گذاشتم و عاشق اینم که هر چیزی رو که در این مدت یاد گرفتم رو به بقیه هم یاد بدم، الانم در بستر سایت گیک باز دارم دانشم رو با بقیه تقسیم میکنم :)