معرفی جنگو

در این اولین مقاله درباره جنگو به سؤال «جنگو چیست؟» پاسخ می دهیم و نمای کلی از ویژگی هایی که این فریم ورک وب را خاص می کند ارائه می کنیم.

برنامه نویسی |پایتون

ویژگی های اصلی آن را مرور می کنیم از جمله برخی قابلیت های پیشرفته ای که در این فصل فرصت پرداختن کامل به آن ها را نخواهیم داشت. همچنین برخی از اجزای اصلی تشکیل دهنده ی یک اپلیکیشن جنگو را به شما نشان می دهیم (اگرچه در این مرحله هنوز محیط توسعه ای برای آزمایش آن در اختیار نخواهید داشت).

جنگو چیست؟

جنگو یک فریم ورک وب سطح بالای پایتون است که امکان توسعه ی سریع وب سایت های امن و قابل نگهداری را فراهم می کند. این فریم ورک توسط توسعه دهندگان باتجربه ساخته شده و بسیاری از دردسرهای توسعه ی وب را از بین می برد به طوری که می توانید تمرکز خود را بر نوشتن اپلیکیشن بگذارید بدون آنکه نیاز باشد چرخ را از نو اختراع کنید. جنگو رایگان و متن باز است جامعه ای پررونق و فعال دارد مستندات بسیار خوبی ارائه می دهد و گزینه های متعددی برای پشتیبانی رایگان و تجاری در اختیار شما می گذارد.

جنگو به شما کمک می کند نرم افزاری بنویسید که:

کامل باشد

جنگو از فلسفه ی «باتری ها همراه محصول هستند» پیروی می کند و تقریباً همه چیزهایی که یک توسعه دهنده ممکن است نیاز داشته باشد را به صورت پیش فرض ارائه می دهد. از آن جایی که تمام امکانات موردنیاز در یک «محصول» گردآوری شده اند همه چیز به صورت یکپارچه با هم کار می کند از اصول طراحی سازگار پیروی می کند و مستندات گسترده و به روزی دارد.

چندمنظوره

جنگو می تواند (و تاکنون نیز توانسته) تقریباً برای ساخت هر نوع وب سایتی مورد استفاده قرار گیرد — از سیستم های مدیریت محتوا و ویکی ها گرفته تا شبکه های اجتماعی و سایت های خبری. این فریم ورک می تواند با هر فریم ورک سمت کاربر کار کند و محتوا را در تقریباً هر فرمتی ارائه دهد (از جمله HTML فیدهای RSS JSON و XML).

در درون خود در حالی که انتخاب های متعددی برای تقریباً هر قابلیتی که ممکن است بخواهید فراهم می کند (مثلاً چند پایگاه داده ی محبوب موتورهای قالب و غیره) در صورت نیاز قابلیت گسترش و استفاده از اجزای دیگر را نیز دارد.

امن

جنگو با ارائه ی فریم ورکی که به گونه ای طراحی شده تا «کار درست را انجام دهد» به توسعه دهندگان کمک می کند از بسیاری از اشتباهات رایج امنیتی اجتناب کنند. برای مثال جنگو راهی امن برای مدیریت حساب های کاربری و گذرواژه ها ارائه می دهد به طوری که از اشتباهات رایجی مانند ذخیره ی اطلاعات نشست (session) در کوکی ها که می تواند آسیب پذیر باشد پرهیز می کند (در عوض کوکی ها فقط یک کلید حاوی اطلاعات دارند و داده ی واقعی در پایگاه داده ذخیره می شود) یا مستقیماً گذرواژه ها را ذخیره نمی کند بلکه هش گذرواژه را ذخیره می کند.

هش گذرواژه یک مقدار با طول ثابت است که از عبور دادن گذرواژه از یک تابع هش رمزنگاری شده به دست می آید. جنگو می تواند با اجرای همان تابع روی گذرواژه ی واردشده و مقایسه ی نتیجه با مقدار ذخیره شده صحت گذرواژه را بررسی کند. اما به خاطر «یک طرفه» بودن این تابع حتی اگر مقدار هش ذخیره شده درز کند برای مهاجم بسیار دشوار است که گذرواژه ی اصلی را به دست آورد.

جنگو به صورت پیش فرض از بسیاری از آسیب پذیری ها محافظت می کند از جمله تزریق SQL اسکریپت نویسی بین سایتی (XSS) جعل درخواست میان سایتی (CSRF) و کلیک ربایی (clickjacking) (برای جزئیات بیشتر درباره ی این حملات به امنیت وب سایت مراجعه کنید).

قابل گسترش (مقیاس پذیر)

جنگو از معماری «هیچ چیز مشترک» (shared-nothing) مبتنی بر اجزا استفاده می کند (هر بخش از معماری مستقل از سایر بخش هاست و در صورت نیاز می تواند تعویض یا تغییر یابد). داشتن جداسازی واضح بین بخش های مختلف باعث می شود که بتوان با افزایش ترافیک با افزودن سخت افزار در هر سطحی (سرور کش سرور پایگاه داده یا سرور اپلیکیشن) آن را گسترش داد. برخی از شلوغ ترین وب سایت ها با موفقیت از جنگو برای پاسخ گویی به نیازهایشان استفاده کرده اند (برای مثال اینستاگرام و Disqus تنها دو مورد از آن ها هستند).

قابل نگهداری

کدهای جنگو با استفاده از اصول طراحی و الگوهایی نوشته می شوند که به تولید کدهای قابل نگهداری و قابل استفاده مجدد کمک می کنند. به ویژه جنگو از اصل «تکرار نکن» (DRY) استفاده می کند تا از تکرار غیرضروری جلوگیری شود و حجم کد کاهش یابد. جنگو همچنین تشویق می کند که قابلیت های مرتبط را در قالب «اپلیکیشن های» قابل استفاده مجدد گروه بندی کنید و در سطح پایین تر کدهای مرتبط را در ماژول هایی دسته بندی می کند (بر اساس الگوی Model View Controller یا MVC).

قابل حمل

جنگو با زبان پایتون نوشته شده که روی بسیاری از پلتفرم ها اجرا می شود. این به این معناست که شما به هیچ سرور خاصی وابسته نیستید و می توانید اپلیکیشن های خود را روی توزیع های مختلف لینوکس ویندوز و macOS اجرا کنید. علاوه بر این بسیاری از ارائه دهندگان میزبانی وب از جنگو پشتیبانی خوبی دارند و اغلب زیرساخت ها و مستندات خاصی برای میزبانی سایت های جنگویی ارائه می دهند.

جنگو از کجا آمده است؟

جنگو در ابتدا بین سال های ۲۰۰۳ تا ۲۰۰۵ توسط تیمی توسعه داده شد که مسئول طراحی و نگهداری وب سایت های خبری بودند. پس از ساخت چندین وب سایت این تیم شروع به استخراج و استفاده مجدد از کدها و الگوهای طراحی مشترک کردند. این کدهای مشترک در نهایت به یک فریم ورک عمومی برای توسعه ی وب تبدیل شدند که در ژوئیه ۲۰۰۵ به صورت متن باز تحت عنوان پروژه «جنگو» منتشر شد.

جنگو از آن زمان تاکنون به رشد و بهبود خود ادامه داده و از اولین نسخه ی مهم آن (۱.۰) در سپتامبر ۲۰۰۸ تا نسخه ی ۵.۰ در اواخر سال ۲۰۲۳ پیش رفته است. هر نسخه قابلیت های جدید و رفع اشکالاتی را به همراه داشته است؛ از جمله پشتیبانی از انواع جدید پایگاه داده موتورهای قالب و کشینگ تا اضافه شدن توابع و کلاس های نمای «عمومی» (generic) که میزان کد مورد نیاز توسعه دهنده برای انجام برخی وظایف برنامه نویسی را کاهش می دهند.

جنگو اکنون یک پروژه ی متن باز پررونق و مشارکتی است که هزاران کاربر و مشارکت کننده دارد. اگرچه هنوز برخی ویژگی های اولیه ی خود را حفظ کرده اما جنگو به یک فریم ورک چندمنظوره تبدیل شده که توانایی توسعه ی هر نوع وب سایتی را دارد.

جنگو چقدر محبوب است؟

معیار قطعی و در دسترسی برای سنجش میزان محبوبیت فریم ورک های سمت سرور وجود ندارد (اگرچه می توان میزان محبوبیت را از طریق مواردی مانند تعداد پروژه های GitHub و پرسش های Stack Overflow برای هر پلتفرم تخمین زد). اما سوال بهتر این است که آیا جنگو «به اندازه کافی محبوب» هست که از مشکلات پلتفرم های غیرمحبوب در امان باشد؟ آیا همچنان در حال پیشرفت است؟ آیا در صورت نیاز می توان کمک دریافت کرد؟ آیا فرصتی برای کار پولی با یادگیری جنگو وجود دارد؟

بر اساس تعداد وب سایت های مشهور که از جنگو استفاده می کنند تعداد افرادی که در توسعه ی کد مشارکت دارند و تعداد کسانی که پشتیبانی رایگان یا پولی ارائه می دهند پاسخ مثبت است: جنگو یک فریم ورک محبوب است!

برخی از سایت های مشهور که از جنگو استفاده می کنند عبارتند از: Disqus Instagram بنیاد Knight بنیاد MacArthur موزیلا نشنال جئوگرافیک بنیاد دانش آزاد (Open Knowledge Foundation) پینترست و Open Stack

آیا جنگو دارای رویکرد مشخص (Opinionated) است؟

فریم ورک های وب اغلب خود را به عنوان “دارای رویکرد مشخص” یا “بی رویکرد” معرفی می کنند.

فریم ورک های دارای رویکرد مشخص دیدگاه خاصی درباره ی «روش درست» انجام هر کار دارند. این فریم ورک ها معمولاً در توسعه ی سریع در یک حوزه ی خاص مؤثرند چون روش درست انجام کارها معمولاً مشخص و مستندسازی شده است. اما ممکن است برای حل مسائل خارج از آن حوزه ی خاص انعطاف پذیری کمتری داشته باشند و گزینه های محدودی برای انتخاب اجزا یا روش ها ارائه دهند.

در مقابل فریم ورک های بی رویکرد محدودیت کمتری در نحوه ی ترکیب اجزا برای رسیدن به یک هدف دارند و حتی در انتخاب اجزای مورد استفاده نیز آزادی بیشتری به توسعه دهنده می دهند. اگرچه این انعطاف پذیری بیشتر به قیمت نیاز به پیدا کردن و هماهنگ سازی دستی اجزای موردنظر تمام می شود.

جنگو «تا حدی دارای رویکرد مشخص» است و بنابراین بهترین ویژگی های هر دو دسته را دارد. این فریم ورک مجموعه ای از اجزا را برای انجام بیشتر کارهای توسعه ی وب ارائه می دهد و یک یا دو روش ترجیحی برای استفاده از آن ها مشخص می کند. با این حال معماری جداگانه ی اجزای جنگو به شما این امکان را می دهد که از بین گزینه های مختلف انتخاب کنید یا حتی از اجزای کاملاً جدید استفاده کنید.

کد جنگو چه شکلی است؟

در یک وب سایت سنتی مبتنی بر داده اپلیکیشن وب منتظر دریافت درخواست های HTTP از مرورگر وب (یا کلاینت دیگر) می ماند. هنگامی که یک درخواست دریافت می شود برنامه بر اساس آدرس URL و احتمالاً اطلاعات POST یا GET تشخیص می دهد که چه عملی باید انجام شود. بسته به نیاز ممکن است اطلاعاتی را از پایگاه داده بخواند یا بنویسد یا وظایف دیگری را برای پاسخ به درخواست انجام دهد. سپس برنامه پاسخی به مرورگر وب ارسال می کند که معمولاً به صورت پویا یک صفحه HTML ایجاد می شود؛ بدین صورت که داده های بازیابی شده را در جاهای مشخصی از یک قالب HTML جای گذاری می کند.

دکمه بازگشت به بالا