فریمورک جنگو چیست و چگونه کار میکند؟
اگر به دنبال یک راهکار برای توسعه سریع وب سایتهای امن هستید، باید بدانید جنگو چیست و چطور این هدف را فراهم میکند. فریم ورک جنگو یک فریم ورک امن با عملکرد عالی است که توسط توسعهدهندگان باتجربه ساخته شده است. این فریم ورک رایگان بوده و به شکل منبع باز طراحی شده است. در ادامه این مقاله، درباره این فریم ورک توسعه وب توضیح دهیم. همچنین میبینیم که ساختار معماری جنگو چیست و چه مزایایی دارد که باعث شده کاربردهای گستردهای داشته باشد.
جنگو چیست؟
قبل از پرداختن به جزئیات بیشتر درباره معماری یا عملکرد، بیایید بررسی کنیم که جنگو چیست و به چه منظور استفاده میشود. فریمورک جنگو یا Django، یک فریم ورک رایگان و منبع باز است که به تسریع روند توسعه یک وب اپلیکیشن یا طراحی وب در حال ساخت به زبان پایتون، کمک میکند. این فریم ورک در سال ۲۰۰۵ و توسط «آدریان هولوواتی» و «سایمن ویلسون» و با هدف توسعه سریع و طراحی تمیز و عملی، به شکل عمومی ایجاد شد. توسعه دهندگان میتوانند با استفاده از فریم ورک جنگو که روی یک وب سرور مستقر شده، به سرعت صفحات وب با ویژگیهای متعدد، ایمن و مقیاسپذیر ایجاد کنند. این فریم ورک، مجموعه بسیار بزرگی از کلاسها، کتابخانهها و ماژولها را ارائه میکند که میتوانند در اجرای پروژههای مختلف کاربرد داشته باشند.
طبیعی است که استفاده از یک فریمورک کارآمد مانند جنگو نسبت به ساخت یک وب اپلیکیشن از پایه، کار سادهتر و سریعتری است؛ چرا که ساخت یک وب اپلیکیشن از پایه، نیاز به ایجاد بکاند، APIها، جاوا اسکریپت و سایتمپها دارد. با فریم ورک وب جنگو، توسعهدهندگان وب میتوانند روی ایجاد اپلیکیشنهای منحصر به فرد تمرکز کنند و از انعطافپذیری بیشتر نسبت به استفاده از دیگر ابزارهای توسعه وب بهرهمند شوند.
تاریخچه فریم ورک جنگو
در سالهای ۲۰۰۳ تا ۲۰۰۵، یک تیم توسعه وب که مسئولیت ساخت و پشتیبانی وب سایتهای خبری و روزنامهها بودند، فریم ورک جنگو را ایجاد کردند. این تیم پس از ایجاد تعدادی سایت، متوجه شدند که نیاز به استفاده مجدد و چند باره از کدها و الگوهای طراحی رایج دارند. این کدهای رایج، در جولای سال ۲۰۰۵، تحت یک فریم ورک توسعه وب تکامل یافتند؛ فریم ورکی که به نام پروژه جنگو میشناسیم و در جولای ۲۰۰۵، اوپن سورس شد.
از انتشار اولین نسخه رسمی جنگو تحت عنوان Django 1.0 در سپتامبر ۲۰۰۸، تا آخرین نسخه منتشر شده، این فریم ورک همچنان به رشد و بهبود خود ادامه داده است. هر نسخه عملکردهای جدیدی را ارائه میدهد و همچنین با برخی بروزرسانیها برای رفع اشکال همراه بود که پشتیبانی از انواع جدید دیتابیسها، قالبهای انجینها، کشینگ و … را فراهم میکند. امروزه افراد بیشتری میدانند که جنکینز چیست. اکنون این پروژه هزاران مشارکتکننده فعال دارد و با استفاده از آن میتوان هر نوع وبسایتی را توسعه داد.
ساختار معماری جنگو
در یک وب سایت معمولی مبتنی بر داده (data-driven)، یک برنامه وب به محض دریافت درخواستهای HTTP از مرورگر وب یا سایر کلاینتها، عملکرد خود را آغاز میکند. پس از دریافت درخواست، برنامه براساس URL و اطلاعات موجود در دادههای POST یا GET، موارد مورد نیاز را بررسی کرده و براساس آنچه درخواست شده، اطلاعات را از دیتابیس خوانده یا مینویسد یا ممکن است برخی عملکردهای دیگر درخواست شده را انجام دهد. سپس، یک پاسخ از برنامه به مرورگر وب بازگشته و اغلب یک صفحه HTML برای مرورگر به شکل داینامیک ایجاد میشود تا دادههای بازیابی شده در قالب HTML نمایش داده شوند. بیایید ببینیم ساختار این فایلها در جنگو چیست:
Model
یک مدل، منبعی معبتر برای اطلاعات مرتبط با دادههای شما محسوب میشود. به عبارت دیگر، موارد کلیدی و رفتارهای دادههایی که ذخیره میکنید در مدل قرار میگیرد. هر مدل به طور معمول با یک جدول دیتابیس مرتبط بوده و المانهای مرتبط با تغییرات دیتا از جمله صفات، متدهای دلخواه و منطق فرایندها را نگهداری میکند. در اپلیکیشنهایی که توسط جنگو توسعه داده میشوند معمولا از بین ۴ دیتابیس PostgreSQL ،MySQL ،SQLite و Oracle استفاده میشود که همگی توسط جنگو پشتیبانی میشوند.
View
ویو ۳ وظیفه دارد:
- قبول کردن درخواست HTTP
- یک برنامه منطق فرایندهای کاری که از کلاسها یا متدهای پایتون استفاده میکنند.
- تولید پاسخ HTTP برای درخواستهای کلاینت
به عبارت دیگر میتوان گفت که ویو، دادهها را از مدل بازیابی میکند یا به دادههای خاص برای هر الگویی که باید نمایش داده شود، اجازه دسترسی میدهد یا دادهها را برای نمایش آماده میکند.
Template
Templateها یا الگوها، فایلهایی مبتنی بر کد HTML هستند که برای رندر کردن دادهها به کار میرند. محتوای این فایلها میتواند استاتیک یا داینامیک باشد. دلیل وجود یک الگو، تنها برای نمایش دادهها است و شامل هیچگونه موردی مربوط به فرایندهای کاری نیست.
URLها
URLها مشخص کننده نحوه مسیریابی آدرسهای URL و نگاشت کردن آنها به اپلیکیشنها هستند.
به طور خلاصه باید گفت که در معماری جنگو، Model، منطق کسبوکار و داده را مدیریت میکند، View منطق نمایش را مشخص میکند، Template، رابط کاربری را مدیریت میکندو د در نهایت URL مشخص کننده مسیریابی و نگاشت آدرسها به وب اپلیکیشن است.
این ساختار در فریم ورک جنگو تحت عنوان MVT یا Model View Template شناخته شده و شباهتهای زیادی به معماری Model View Controller دارد.
مزایای فریم ورک جنگو چیست؟
برای درک بهتر محبوبیت فریم ورک جنگو لازم است تا با مزایای استفاده از آن آشنا شویم. برخی از مهمترین دلایل محبوبیت این فریم ورک و مزایای قابل توجه آن عبارتند از:
کامل بودن
با استفاده از فریم ورک Django تقریباً تمام عملکردهایی را که ممکن است بهعنوان یک توسعه دهنده لازم داشته باشید، دریافت میکنید. همه این قابلیتها به طور یکپارچه در یک نرمافزار ارائه شده، با هم کار کرده و از اصول طراحی سازگار پیروی میکنند.
همه کاره بودن
یکی از مهمترین ویژگیهای عملکردی که نشان میدهد دلیل محبوبیت جنگو چیست، همه کاره بودن این فریم ورک است. از جنگو میتوانید برای ساخت تقریباً هر نوع وب سایتی، از سیستم مدیریت محتوا و ویکیها تا شبکههای اجتماعی و سایتهای خبری، استفاده کنید. ارائه محتوا با هر نوع فرمتی از جمله HTML، فیدهای JSON ،RSS، و XML امکانپذیر است. تقریباً هر عملکرد اساسی در این فریم ورک ارائه میشود، اما در عین حال میتوانید در صورت نیاز از سایر مؤلفهها نیز به همراه آن استفاده کنید.
مقیاس پذیری
در ساختار معماری جنگو، هر بخش از سایر بخشهای دیگر مستقل بوده و در صورت نیاز امکان جایگزینی یا تغییر آنها وجود دارد. این مستقل بودن بخشهای مختلف باعث میشود که بتوانیم با افزودن سختافزار در هر سطحی (از جمله در سطح کش سرور، اپلیکیشن سرور یا سرور دیتابیس)، مقیاس جنگو را برای پاسخگویی به افزایش میزان ترافیک تغییر دهیم. برای درک بهتر این که سطح مقیاسپذیری جنگو چیست تنها کافی است بدانید که وب سایتهای پر ترافیکی مانند اینستاگرام از این فریم ورک برای برآورده کردن نیازهای خود استفاده میکنند.
محفوظ و قابل نگهداری
جنگو با استفاده از اصول و الگوهای طراحی مشخص نوشته شده که بر اساس آنها، کدها قابلیت نگهداری و استفاده مجدد را دارند. به این ترتیب از بسیاری کارهای تکراری اجتناب میشود و در نتیجه مقدار کدها کاهش پیدا میکند.
قابل حمل و پرتابل بودن
یکی دیگر از ویژگیهای عملکردی مفید این فریم ورک که نشان میدهد دلیل محبوبیت جنگو چیست آن است که به زبان پایتون نوشته شده و روی پلتفرمهای متعددی میتوان آن را اجرا کرد. به این معنی که به هیچ پلتفرم سرور خاصی وابسته نبوده و میتوانید برنامههای خود را روی ماشینهای لینوکس، ویندوز و macOS اجرا کنید. همچنین بسیاری از ارائهدهندگان خدمات میزبانی وب از جمله ارائهدهندگان سرویس ابری از آن پشتیبانی میکنند.
مدیریت دیتابیس شبیه به پایتون
شباهت مدیریت دیتابیس به ساختار پایتون از مهمترین مواردی است که نشان میدهد مزیت جنگو چیست و چرا استفاده از آن محبوب شده است. استفاده از جنگو این امکان را برای شما فراهم میکند تا کد مدل داده برنامه را بدون نیاز به SQL، در پایتون بسازید. جنگو با استفاده از یک ORM یا object-relational mapper، ساختار دیتابیس سنتی را به کلاس پایتون تبدیل کرده و در نتیجه کار در محیط آن سادهتر شود.
Django-MySQL از داده JSON و توابع مرتبط با آن پشتیبانی میکند. در صورت آشنایی قبلی با محیط پایتون، میتوانید به راحتی طراحی و مدیریت دیتابیس جنگو را انجام دهید. برخی از عملکردهای مفید ارائه شده توسط میانبر یکپارچه سازی کامل با دیتابیس برنامه در Django Web Framework عبارت است از:
- فراهم کردن عملکرد CRUD (ایجاد، خواندن، به روز رسانی، حذف)، HttpResponse و اسکریپت بین سایتی
- فراهم کردن قابلیتهای مدیریت کاربر
- ارائه ویژگیهای مدیریت نرم افزار و …
ایجاد صفحات پویا با قالب
به دلیل طراحی جنگو برای استفاده در توسعه وب اپلیکیشنها، فریم ورک Django به راهی ساده برای ایجاد HTML داینامیک برای نمایش دادههای منحصر به فرد کاربر نیاز دارد. این HTML پویا در جنگو توسط یک موتور قالب داخلی تحت عنوان DTL یا Django template language ایجاد میشود. یک قالب HTML به توسعهدهندگان جنگو این امکان را میدهد که المانهای استاتیک (از جمله عناصر طراحی مانند رنگها، لوگوها یا متن) را با دادهها (مانند نام کاربر یا موقعیت مکانی) ترکیب کرده و یک صفحه وب جدید را به سرعت ایجاد کنند.
این در حالی است که در MVC (به عبارتی model-view-controller) اگر بخواهید در اپلیکیشن شما، با ورود کاربر، نام او نمایش داده شده و به او خوشامد گفته شود، ابتدا باید یک قالب برای نمایش محتوای استایتک متن «<نام کاربری> عزیز به سایت خوش آمدید» ایجاد کنید. سپس از یک placeholder داینامیک برای نمایش خودکار نام کاربر که از دیتابیس استخراج شده استفاده نمایید. هنگامی که این صفحه رندر شد، محتوای داینامیک و استاتیک با هم ترکیب میشوند تا تجربه کاربری یکپارچهای را ایجاد کنند. اما با استفاده از فریم ورک جنگو، این فرایند بسیار سادهتر و سریعتر پیادهسازی میشود.
افزایش امنیت
زمانی که میخواهیم توضیح دهیم جنگ چیست مهم است که درباره ویژگیهای ارتقای امنیت در این فریم ورک صحبت کنیم. به طور کلی، وب اپلیکیشنها و به خصوص برنامههایی که اطلاعات ورود کاربران یا دادههای مالی در آن ذخیره شده، به شکل مداوم مورد هدف هکرها هستند. در Django ویژگی و قابلیتهایی برای کمک به محافظت بیشتر از برنامه و کاربران ارائه شده است.
یکی از بزرگترین مخاطرات در وب سایتهایی که دادههای وارد شده توسط کاربر را میپذیرند، امکان وارد کردن کدهایی توسط کاربران مخرب است که میتواند به کل سیستم آسیب برساند. برای محافظت در برابر چنین آسیبپذیریهایی، قالبهای جنگو به شکل خودکار از کاراکترهای رایج HTML خود را پنهان میکنند. برای مثال، برای دشوار کردن تزریق کدهای مخرب به برنامه، به شکل خودکار «<» را به «lt&;» تبدیل میکند. جنگو نیز به روشی مشابه از تزریق SQL محافظت کرده و دستورات غیرمجاز را مجدداً تفسیر میکند تا امکان وارد کردن کدهای مخرب به دیتابیس شما وجود نداشته باشد.
همچنین امکان استفاده از API های جنگو برای محافظت خودکار از جعل درخواست بین سایتی (به عبارتی CSRF یا cross-site request forgery) در درج توکنهای مخفی خاص کاربر در درخواستهای POST وجود دارد.
ساخت یک برنامه از ابتدا و پایه، ریسک وارد شدن آسیبپذیریهای امنیتی به ماژول برنامه را بالا میبرد و همین مسئله، نشان میدهد دلیل اهمیت جنگو چیست و چرا باید از آن استفاده کنیم. این فریم ورک به طور گسترده استفاده می شود، طراحی منبع باز دارد و همچنین توسط توسعهدهندگان متعدد بررسی میشود. به همین دلیل اطمینان بیشتری را برای محافظت از دادههای شما فراهم میکند.
با استفاده از فریم ورک جنگو میتوانید برای محافظت خودکار از وب سایت، از اشتباهات امنیتی رایج اجتناب کنید. برای مثال، Django یک روش امن برای مدیریت حسابهای کاربری و رمزهای عبور ارائه داده و از برخی اشتباهات رایج مانند قرار دادن اطلاعات مربوط به sessionها در کوکیها، ذخیره مستقیم رمزهای عبور (به جای ذخیره حالت در هم و Hash شده آنها) و … جلوگیری میکند. محافظت در برابر بسیاری از آسیبپذیریها مانند تزریق کد SQL، اسکریپت بین سایت، جعل درخواستهای بین سایت و جعل کلیکها، از جمله دیگر دلایلی هستند که نشان میدهند دلیل سطح بالای امنیت در جنگو چیست.
معایب فریم ورک جنگو چیست؟
فریم ورک جنگو علاوه بر مزایایی که دارد، دارای معایب خاص خود نیز هست که در ادامه به برخی از مهمترین آنها اشاره میکنیم:
پیچیدگی
جنگو یک فریم ورک بسیار پیچیده است که برای اپلیکیشنهای کوچک گزینه مناسبی نیست. در چنین شرایطی استفاده از سایر فریم ورکها از جمله فریم ورک Flask پیشنهاد میشود.
سرعت
با وجود اینکه Django، فریم ورکی است که روند کارها را بسیار سریعتر میکند، اما میتواند موجب کند شدن اجرای وبسایتها شود. نکته مهم این است که موضوع کند بودن، ارتباطی با زبان پایتون یا خود جنگو ندارد؛ بلکه مربوط به میزان منابعی است که در دسترس فریم ورک قرار دارد. هرچه ابعاد دیتابیس شما بزرگتر باشد و درخواستهای بیشتری به سمت آن ارسال کنید، کارایی کلی وبسایت کاهش مییابد. با این حال میتوانید از مستندات جنگو و تجارب جامعه بزرگ آن، برای رفع مشکلاتی از این قبیل کمک بگیرید.
نیاز به اطلاع از همه چیز پیش از استفاده
یکی از مشکلات جنگو این است که بسیار گسترده است. به همین دلیل پیش از اینکه شروع به استفاده از آن کنید، باید طرح معماری مورد نظر خود برای توسعه وب را مشخص کرده باشید.
فقدان قراردادهای کدنویسی
قراردادهای کد نویسی یا coding convention، مجموعه اصول راهنما هستند که باید هنگام استفاده از فریم ورک وب دنبال شوند و به عبارتی، نوعی کتاب قوانین به حساب میآیند. با این حال جنگو از چنین قراردادهایی بی بهره است و همین موضوع موجب میشود پیشبرد پروژهها با استفاده از جنگو کند شود یا بسیاری از برنامهنویسان و توسعهدهندگان از آن دوری کنند.
کاربردهای جنگو چیست؟
قبل از این دیدیم که تاریخچه جنگو چیست و این فریم ورک چرا به وجود آمد. فریم ورک Django در ابتدا برای سرعت و عملکرد بهتر Lawrence Journal-World که یک برنامه وب ناشر روزنامه بود، توسعه یافت. توسعه دهندگان خیلی زود متوجه شدند که Django پتانسیل ورود به حوزههای دیگر را دارد. با در نظر داشتن این پیشینه، بدیهی است که جنگو بتواند فریم ورک ایدهآلی برای پروژههای دربرگیرنده حجم وسیعی از محتوا، فایلهای رسانهای یا ترافیک وب باشد. این موضوع به خوبی کاربردهای گسترده این فریم ورک را نشان میدهد.
در حال حاضر، فریم ورک جنگو تنها محدود به یک صنعت نیست و کاربردهای متعددی را در بر میگیرد. برخی از مهمترین کاربردهای جنگو و شناخته شدهترین وب سایتهایی که از آن استفاده میکنند، عبارت است از:
- مرورگر وب موزیلا فایرفاکس؛ برای رسیدگی به درخواستهای ترافیک بالا و API
- اینستاگرام؛ برای اجرای روان، افزودن یکپارچه ویژگیهای جدید و حل سریع مشکلات
- پینترست؛ برای مدیریت حجم عظیمی از دادههای رسانهای و در عین حال حفظ یک رابط کاربر پسند
- اسپاتیفای؛ برای مدیریت کتابخانه موسیقی عظیم خود و سایر دادهها
- دراپباکس؛ برای توابع به اشتراک گذاری، همگام سازی و مقیاسپذیری
- ردیت؛ برای قابلیتهای کاربردی خود مانند مدیریت ترافیک سنگین کاربران
- ناسا؛ برای مدیریت تصاویر با وضوح بالا
- پایگاه خبری واشنگتن تایمز؛ برای مدیریت ترافیک بالا
کاربردهای فریم ورک جنگو تنها به این موارد ختم نشده و بسیاری وب سایتها و پلتفرمهای دیگر از آن استفاده میکنند. وب سایتهای Disqus ،Bitbucket ، National Geographic و Last.fm از د یگر مواردی هستند که جنگو را انتخاب کردهاند.
جمعبندی
در این مطلب دیدیم که جنگو چیست و چرا به وجود آمده است. فریم ورک جنگو از سال ۲۰۰۵ معرفی شده و به دلیل مزایای متعددی که برای توسعه وب اپلیکیشنها دارد، مورد توجه توسعه دهندگان قرار گرفت. این فریم ورک دارای قابلیتهای متعدد کاربردی و امنیتی بوده و امکانات متعددی را برای روند توسعه برنامهها ارائه میدهد. اگر میخواهید بیشتر با این فریم ورک توسعه آشنا شده و ببینید که مزایای جنگو چیست و چه کاربردهایی دارد، مطالعه این مقاله برایتان مفید خواهد بود.