جنگو یک فریم ورک نرمافزاری مبتنی بر زبان پایتون است که با آن میتوان از وبسایتهای ابتدایی گرفته تا برنامههای کاربردی و پیچیده را توسعه داد. در ادامه ضمن معرفی فریم ورک جنگو، اهمیت یادگیری آن برای کدنویسی و برنامهنویسی توضیح داده می شود.
جنگو یک فریم ورک وب سطح بالا و متنباز بوده که با زبان پایتون نوشته شده است. این فریم ورک بهویژه مورد توجه توسعهدهندگانی می باشد که علاقه زیادی به قابلیتهای آن در توسعه سریع، امنیت و مقیاسپذیری دارند. به بیان دیگر، فریم ورک جنگو تلاش میکند تا فرایند توسعه را سادهتر و به طور چشمگیری سریعتر نماید.
در این مقاله توضیحات بیشتری درباره جنگو، نحوه به کارگیری، چرایی استفاده از آن و همچنین راهکارهایی برای ارتقای مهارتهای شما در کار با جنگو، ارائه می شود.
تصویر(1)
فریم ورک جنگو چیست؟
جنگو فریم ورکی است که میتوانید از آن برای توسعه سریع و کارآمد برنامههای تحت وب استفاده کنید. اکثر برنامههای وب چندین عملکرد همزمان مانند احراز هویت، بازیابی اطلاعات از پایگاه داده و مدیریت کوکیها را ارائه می کنند. توسعهدهندگان مجبور هستند این قابلیتهای مشابه را در هر برنامه وبی که مینویسند، کدنویسی نمایند. جنگو توسط گروهبندی عملکردهای مختلف در مجموعهای بزرگ از ماژولهای با قابلیت استفاده مجدد که "فریم ورک وب اپلیکیشن" نامیده میشوند، کار آنها را آسانتر میکند. توسعهدهندگان از فریم ورک وب جنگو برای سازماندهی و نوشتن کد خود به شکلی کارآمدتر استفاده میکنند و زمان توسعه وب را به طور چشمگیری کاهش میدهند.
فریم ورک جنگو نخستین بار در سال ۲۰۰۳ توسط طراحان وبسایت، آدریان هولوواتی و سایمون ویلیسون، به عنوان راهحلی برای مقابله با ساخت مداوم پروژهها از ابتدا (صفر) توسعه داده شد. آنها دو سال را صرف توسعه کدهایی با قابلیت استفاده مجدد و طراحی هایی برای تسریع فرایند برنامه نویسی وب نمودند و نهایتا جنگو را در سال ۲۰۰۵ منتشر کردند. اکنون جنگو حاصل یک تلاش جمعی با مشارکت هزاران توسعهدهنده و کاربر است که باعث بهبود عملکرد و افزودن قابلیتهای جدید به آن می شوند.
آیا فریم ورک جنگو مناسب بکاند است یا فرانتاند؟
فریم ورک جنگو قابلیتهای بکاند و فرانتاند را دارد که به توسعهدهندگان کمک میکند تا سریعا یک پروژه را از ابتدا بسازند. با اینکه جنگو عمدتاً یک فریم ورک بکاند است اما ابزارهایی نیز دارد که به توسعهدهندگان فرانتاند کمک میکند. این ویژگی، جنگو را به یک فریم ورک فولاستک تبدیل می نماید، بدین معنا که پایگاه داده و منطق زیربنایی وبسایت (بکاند) را پوشش میدهد و همچنین میتواند نحوه نمایش دادهها به کاربر در وب (فرانتاند) را کنترل کند.
فریم ورک جنگو از کدام سیستمهای مدیریت پایگاه داده پشتیبانی میکند؟
جنگو از چندین سیستم مدیریت پایگاه داده، مانند بک اند دیتابیس های شخص ثالث (third-party)، پشتیبانی می نماید. پایگاه داده های رسمی که جنگو از آنها پشتیبانی میکند عبارتند از:
- MySQL
- Oracle
- PostgreSQL
- SQLite
- MariaDB
فریم ورک های مشابه جنگو
جنگو به عنوان یک فریم ورک متنباز برای توسعه وب، در کنار فریم ورک هایی مانند Laravel, Jekyll, Ruby on Rails و CakePHP قرار میگیرد. این فریم ورک ها با داشتن معماریهای مشابه و امکان استفاده مجدد از کدها، برای افزایش بهرهوری به توسعهدهندگان کمک میکنند تا برنامههای تحت وب خود را به شکل موثرتری بسازند.
چرا توسعهدهندگان وب جنگو را انتخاب میکنند؟
وب فریم ورکهای متعددی در بازار وجود دارند. جنگو با زبان پایتون نوشته شده و یکی از وب فریم ورکهای پایتون در میان انواع فریم ورک های دیگر است. با این حال، توسعهدهندگان اغلب وب فریم ورک جنگو را به دلایل زیر بر سایرین ترجیح میدهند:
سرعت توسعه
فریم ورک جنگو به خوبی سازماندهی شده و نصب و یادگیری آن ساده است، بنابراین میتوانید ظرف مدت چند ساعت شروع به کار کنید. طراحان جنگو این فریم ورک را به گونهای ایجاد کردهاند که هر معماری وب را بتوان به سرعت در کد پیادهسازی کرد. همچنین Django از توسعه سریع و طراحی تمیز پشتیبانی میکند. میتوانید فقط در چند خط کد، امکانات پیچیده زیادی را به پروژه خود اضافه نمایید زیرا جنگو ساختاری آماده برای توسعه وب، مانند موارد زیر، فراهم میکند:
- احراز هویت کاربر
- مدیریت محتوا
- نقشههای سایت
- فیدهای RSS
مقرون به صرفه
جنگو یک فریم ورک رایگان و متن باز تحت پایتون بوده که توسط یک جامعه بزرگ پشتیبانی میشود. این جامعه به طور مداوم در حال توسعه و بهبود فریم ورک جنگو است و به همین دلیل، جنگو همیشه بروز و امن می باشد. یک سازمان غیرانتفاعی به نام بنیاد نرمافزار جنگو (Django Software Foundation)، استفاده و نگهداری از Django را گسترش داده و از آن پشتیبانی میکند. این بنیاد، جلسات، گردهماییها و رویدادهای اجتماعی منظمی برگزار می نماید که سایر توسعهدهندگان را تشویق به بررسی و مشارکت در پروژه جنگو میکند. جنگو یک وب فریم ورک با کیفیت بالا و غنی از ویژگیها است و استفاده از آن نیز رایگان می باشد.
تصویر(2)
محبوبیت
هزاران پروژه متنباز و سایتهای معروف از فریم ورک جنگو استفاده میکنند، مانند:
- اینستاگرام
- موزیلا فایرفاکس
- پینترست
- نشنال جئوگرافیک
به دلیل محبوبیت جنگو، این فریم ورک همچنان در حال تکامل است و زیرساخت پشتیبانی قدرتمندی دارد. تعداد زیادی از افراد و شرکتها پشتیبانی رایگان و پولی برای هرگونه چالش در توسعه وب که ممکن است هنگام استفاده از جنگو با آن روبرو شوید را ارائه میدهند.
فریم ورک جنگو چگونه کار میکند؟
هر برنامه تحت وب از دو بخش تشکیل شده است:
- کد سرور
- کد کلاینت
کلاینت یا بازدیدکننده وبسایت، یک مرورگر دارد. وقتی آنها یک URL را در مرورگر خود تایپ میکنند، درخواستی به سرور که برنامه روی آن اجرا میشود، ارسال می نمایند. سرور با استفاده از یک پایگاه داده، درخواست را پردازش کرده و اطلاعات را با عنوان پاسخ به کلاینت برمیگرداند. کد کلاینت این اطلاعات را به عنوان یک صفحه وب برای بازدیدکننده نمایش میدهد.
فریم ورک جنگو کد مربوط به این سیستم درخواست و پاسخ را با استفاده از معماری مدل-نما-قالب (MVT یا Model-View-Template) مدیریت میکند.
مدل (Model)
مدلهای جنگو نقش واسط بین پایگاه داده و کد سمت سرور را ایفا میکنند و تنها منبع معتبر برای تعریف ساختار و محتوای دادهها به شمار میآیند. این مدلهای داده شامل فیلدها و عملیات ضروری مورد نیاز برای تعامل با پایگاه داده شما می باشند. بنابراین، مدلهای جنگو، جداول پایگاه داده شما را به کلاسها یا اشیاء در کد پایتون تبدیل میکنند. این فرایند، Object-Relational Mapping نامیده میشود.
هر مدل به یک جدول پایگاه داده واحد، نگاشت شده و دارای صفاتی است که فیلدهای پایگاه داده را نشان میدهند. به عنوان مثال، اگر وبسایت شما شامل جزئیات کارمندان باشد، میتواند به صورت زیر نمایش داده شود:
- یک جدول کارمند با فیلدهای نام و آدرس کارمند.
- یک مدل کارمند به نام Class Employee با دو ویژگی یا فیلد مدل، به نامهای Name و Address.
نما (View) در فریم ورک جنگو
نماهای جنگو با استفاده از مدلها، درخواستهای کاربران را پردازش میکنند. میتوانید برای هر نوع درخواستی که بازدیدکنندگان وبسایت شما میتوانند داشته باشند، یک تابع نما (View Function) بنویسید. این تابع، درخواست را به عنوان ورودی دریافت میکند و پاسخی را برمیگرداند که میتواند شامل کد خطا، تصویر، فایل یا هر نوع داده دیگری باشد.
جنگو از یک URL mapper یا URL dispatcher استفاده میکند که توابع نما را به آدرسهای اینترنتی (URL ها) مرتبط می نماید. شما باید یک فایل URL mapper ایجاد کنید و در آن الگوهای URL را به صورت زیر بنویسید:
urlpatterns = [
path('employee/name', views.employee_name),
path('employee/<int:year>/', views.year_archive),
]
به عنوان مثال، فرض کنید تمایل دارید بازدیدکنندگان وبسایت شما بتوانند لیستی از تمام کارمندان را در یک سال خاص مشاهده کنند. برای این کار، مسیر آدرس employee/year/ را به همراه شماره سال تنظیم میکنید و سپس یک تابع نمای جنگو به نام year_archive مینویسید که با این مسیر مطابقت داشته باشد.
زمانی که بازدیدکننده وبسایت شما آدرس "example.com/employee/2020" را در مرورگر خود تایپ میکند، مراحل زیر رخ میدهند:
- درخواست به برنامه وب شما میرسد.
- وب فریم ورک جنگو، شماره سال و نام تابع نما را از URL mapper دریافت میکند.
- سپس تابع نمای year_archive را برای سال ۲۰۲۰ اجرا مینماید.
- year_archive از مدل کارمند استفاده میکند تا تمام دادههای کارمندان برای سال ۲۰۲۰ را از پایگاه داده بازیابی نماید.
- وب فریم ورک جنگو، دادههای بازیابی شده را به عنوان پاسخ درخواست، ارسال میکند.
تصویر(3)
قالب (Template)
قالبهای جنگو، نحوه نمایش صفحات وب در مرورگر را مدیریت میکنند. از آنجا که بیشتر صفحات وب با HTML نوشته میشوند، میتوانید کد قالب جنگو را به سبکی مشابه HTML بنویسید. یک فایل قالب شامل اجزای زیر است:
- بخشهایی مانند تصاویر، دکمهها و سربرگها.
- سینتکسی خاص که نحوه درج محتوای پویا یا دادههای متغیر با هر درخواست را مشخص می نماید.
سیستم قالب جنگو از اجزای زیر تشکیل شده است:
زبان قالب (Template Language)
Template Language، همان زبان برنامهنویسی است که برای نوشتن کد قالب HTML از آن استفاده میکنید. جنگو از زبان قالب خود یعنی Django Template Language و یک جایگزین محبوب به نام Jinja2 پشتیبانی میکند.
موتور قالب (Template Engine)
Template Engine، فایل قالب را پردازش میکند و خروجی نهایی HTML را ایجاد می نماید. موتور قالب، دادههای موجود در پاسخ را درون این خروجی قرار میدهد.
به عنوان مثال، وقتی بازدیدکننده وبسایت درخواست اطلاعات کارمندان را دارد، قالب جنگوی شما صفحه وبی که آنها میبینند را با موارد زیر پر میکند:
- سربرگ وبسایت شما
- جدولی که شامل نامها و آدرسهای همه کارمندان است.
- دکمهای با عنوان «بعدی»
چه ماژولهای دیگری را میتوانید در فریم ورک جنگو استفاده کنید؟
اگرچه معماری مدل-نما-قالب (MVT) ساختار اصلی هر برنامه را تعریف میکند، جنگو چندین ماژول دیگر برای بهبود وبسایت ارائه می دهد. در ادامه چند مثال آورده شده است.
فرمها
اکثر وبسایتها برای کارهایی مانند ثبتنام، پرداخت یا جمعآوری اطلاعات از بازدیدکننده وبسایت، به فرم نیاز دارند. جنگو ابزارها و کتابخانههای زیادی را فراهم میکند که میتوانید برای مدیریت فرمهای وبسایت خود از آنها استفاده کنید. این ابزارها کار پردازش فرمها را خودکار میکنند و از بروز خطاهای احتمالی جلوگیری می نمایند.
جنگو پردازش فرم را به سه روش انجام میدهد:
- ایجاد فرم با آمادهسازی و سازماندهی مجدد دادهها برای نمایش
- اعتبارسنجی فرم با بررسی فرمهای HTML در سمت کاربر (کلاینت)
- پردازش فرم با دریافت دادههای ارسالی
احراز هویت کاربر
وبسایتهای امروزی باید کاربران را احراز هویت کنند. احراز هویت، کاربر را اعتبارسنجی میکند و تعیین خواهد کرد که چه کارهایی میتواند در سایت انجام دهد. فریم ورک جنگو میتواند احراز هویت را برای موارد مختلف مدیریت کند:
- حسابهای کاربری
- مجوزها و نشانگرهای بله/خیر که به کاربران اجازه خواهند داد وظایف خاصی را در وبسایت انجام دهند.
- گروههایی از چندین حساب کاربری با مجوزهای مشابه
- سشن کاربری مبتنی بر کوکی
همچنین یک سیستم هشینگ رمز عبور و ابزارهایی برای محدود کردن محتوا در فرمها و نماها ارائه میدهد.
مدیریت سایت
مدیریت سایت جنگو، فراهم کردن یک صفحه مدیریت برای سایت شما را آسان میکند. مدیران سایت میتوانند از این صفحه برای ایجاد، ویرایش یا مشاهده مدلهای داده در سایت استفاده کنند.
آیا فریم ورک جنگو opinionated است؟
فریمورکهای «Opinionated»، رویکردها و روشهای خاصی را برای توسعه نرمافزار تجویز میکنند. به این معنا که استانداردها و الگوهای مشخصی را پیشنهاد میدهند که توسعهدهندگان باید از آنها پیروی کنند. این رویکرد معمولاً به افزایش سازگاری درون پروژهها کمک میکند.
به عنوان مثال، فریمورکهای Opinionated اغلب با فراهم آوردن مستندات دقیق و جامع برای وظایف برنامهنویسی که به صنعت خاصی مرتبط هستند، به توسعه مؤثر در آن صنایع کمک میکنند.
از سوی دیگر، فریم ورک های غیر Opinionated، محدودیتهای کمتری در مورد چگونگی ادغام اجزای مختلف مدل-نما-قالب (MVT) با یکدیگر دارند. در حالی که انعطافپذیری بیشتری خواهند داشت اما به دلیل اینکه توسعهدهندگان مختلف میتوانند از رویکردهای متفاوتی برای یک کار مشابه استفاده کنند، مشکلاتی را در سازماندهی کد ایجاد می نمایند.
جنگو تا حدودی Opinionated است. طیف گستردهای از اجزا را ارائه میدهد و شامل مستنداتی در مورد نحوه انجام بسیاری از انواع وظایف توسعه وب است. توسعهدهندگان میتوانند از معماری چندبخشی جنگو برای انتخاب میان طیف وسیع گزینهها استفاده کنند.
امنیت در فریم ورک جنگو چیست؟
مجرمان سایبری اغلب برنامههای تحت وب را برای دسترسی به اطلاعات کاربران، دادههای مالی و سایر اطلاعات حساس هدف قرار میدهند. وب فریم ورک جنگو، چندین ویژگی برای محافظت از برنامههای تحت وب و کاربران شما ارائه میدهد. با در نظر گرفتن بهترین راهکارهای ارائه شده توسط جنگو، از اکثر اشتباهات امنیتی رایج جلوگیری میکنید. در ادامه چند مثال ارائه شده است.
محافظت در برابر Cross-site scripting یا XSS
حملات XSS زمانی رخ میدهند که مجرمان سایبری کد مخرب را در مرورگرهای کاربران وبسایت شما تزریق میکنند. آنها میتوانند با فریب دادن برنامه تحت وب توسط روشهای مختلف به کاربران شما حمله نمایند، مانند:
- ذخیره اسکریپتهای مخرب در پایگاه داده شما به طوری که سرور ناخواسته آن را در پاسخ بعدی خود ارسال کند.
- فریب کاربران جهت کلیک روی لینکی که موجب اجرای کد مخرب در مرورگر آنها به جای کد اصلی میشود.
به عنوان مثال، قالب جنگو ممکن است {{name}} داشته باشد که متن وارد شده توسط کاربر در قسمت نام پروفایل را نشان میدهد. مجرم سایبری سشن را در اختیار می گیرد و نام را به کدی مانند <script>alert('hello')</script> تغییر میدهد. قالب نیز به {{<script>alert('hello')</script>}} تغییر میکند.
این کد اکنون در مرورگر کاربر شما اجرا میشود به طوری که پیام متنی "Hello" روی صفحه آنها ظاهر می گردد. هرچند این مثال ساده به نظر میرسد اما نشان میدهد که چطور یک مجرم سایبری ممکن است از اسکریپتهای پیچیده برای کنترل رایانه کاربران استفاده کند.
فریمورک جنگو با شناسایی و خنثیسازی خودکار کاراکترهای مخرب ورودی، لایه امنیتی قدرتمندی را برای محافظت از وبسایت شما در برابر حملات سایبری فراهم میکند.
محافظت در برابر دسترسی غیرمجاز
حملات جعل درخواست بین سایتی (CSRF) زمانی رخ میدهند که هکرها اطلاعات کاربران را سرقت کرده و درخواستهای غیرمجاز را به برنامه تحت وب شما ارسال میکنند. فریم ورک جنگو محافظت داخلی مقابل این نوع حملات در ماژول CSRF دارد. این قابلیت با ارسال یک مقدار مخفی به هر کاربر در اولین ورود آنها، فعالیت خود را آغاز می نماید.
درخواستهای جدید مشتریان، حاوی یک مقدار مخفی است که به عنوان یک مدرک معتبر برای اثبات هویت کاربر استفاده میشود. تنها مرورگر کاربر به این مقدار مخفی دسترسی دارد. به همین دلیل، جنگو میتواند کاملا خودکار درخواستهایی که از دستگاههای دیگری ارسال میشوند و سعی دارند خود را به جای کاربر اصلی جا بزنند، رد کند. برای استفاده از این قابلیت، باید در تنظیمات، ماژول CSRF جنگو را فعال کنید.
محافظت در برابر تزریق SQL
مجرمان سایبری از تزریق SQL برای وارد کردن کد به پایگاه داده شما با استفاده از درخواستهای HTTP مانند POST استفاده میکنند. کد مخرب میتواند دادههای شما را سرقت کرده یا حذف نماید. جنگو این مشکل را در طراحی خود رفع میکند. وقتی اطلاعاتی را در یک وبسایت وارد میکنید، این اطلاعات ابتدا در قسمتی جداگانه نگهداری میشوند. سپس، برنامه آنها را بررسی میکند تا مطمئن شود که هیچ بخشی از آن برای سیستم خطرناک نیست. اگر بخشی از اطلاعات مشکوک باشد، برنامه آن را اصلاح می نماید تا دیگر مشکلی ایجاد نکند. این کار باعث میشود که اطلاعات شما به طور ایمن در پایگاه داده ذخیره گردد و از ایجاد مشکلات امنیتی جلوگیری شود.
محافظت با کمک جامعه پشتیبان
محافظت در فریم ورک جنگو فراتر از ویژگیهای امنیتی داخلی آن است. از آنجایی که جنگو متنباز است، بسیاری از توسعهدهندگان با تجربه ماژولهای جنگو را استفاده و بررسی میکنند. تست کامل، قابلیت اطمینان کد جنگو را افزایش میدهد و از باقی ماندن آسیبپذیریهای امنیتی ناخواسته جلوگیری می نماید.
توسعهپذیری جنگو چیست؟
توسعهپذیری به توانایی وبسایت در مدیریت همزمان درخواستهای متعدد کلاینت اشاره دارد. پروژههای جنگو بسیار توسعهپذیر هستند و میتوانند هزاران درخواست را مدیریت کنند. میتوانید برنامه جنگو خود را به روشهای زیر توسعه دهید:
تصویر(4)
سختافزار
تیم جنگو این فریم ورک وب را به گونهای طراحی کرده است که به طور کارآمد از سختافزار موجود در سیستم شما استفاده کند. جنگو با معماری بدون اشتراک (shared-nothing)، اجزایی مانند لایه پایگاه داده (مدلها) و لایه برنامه (نماها) را از هم جدا میکند. میتوانید بدون تأثیر روی سایر بخش های سیستم، سختافزار را در هر سطحی اضافه کنید. همچنین قادر هستید سرورهای پایگاه داده یا سرورهای کاربردی بیشتری به سیستم خود اضافه نمایید و فریم ورک جنگو از این منابع به طور کارآمد برای مدیریت بازدیدکنندگان متعدد استفاده خواهد کرد.
کشینگ (Caching)
کشینگ فرآیند ذخیره برخی از دادههای وب در سرور کلاینت یا سرورهای واسط است تا برنامه جنگو بتواند درخواستها را سریعتر پردازش کند و در نتیجه عملکرد را بهبود دهد. جنگو یک سیستم کشینگ قوی با سطوح مختلف ارائه می کند:
- میتوانید کل وبسایت خود را کش کنید.
- میتوانید خروجی یک تابع نمای خاص را کش نمایید.
- میتوانید محتوای خاصی را که ایجاد آن زمانبر است، کش کنید.
پروژههای جنگو به خوبی با حافظههای کش خارجی (ثالث) کار میکنند. شما میتوانید به جنگو بگویید که کدام بخشهای برنامه را در این حافظههای کش ذخیره کند تا سرعت دسترسی به دادهها و عملکرد کلی برنامهتان بهبود یابد.
نتیجه گیری
جنگو به عنوان یک فریم ورک متمایز و متنباز جهت توسعه وب، امکانات قدرتمندی را برای تسریع فرآیند کدنویسی ارائه میدهد و به توسعهدهندگان کمک می کند تا با سرعت و کارایی بیشتری برنامههای تحت وب خود را بسازند. بهویژه با قابلیتهایی مانند احراز هویت، مدیریت محتوا و سیستمهای امنیتی پیشرفته، فریم ورک جنگو بستری امن و مقیاسپذیر برای توسعه پروژههای متنوع ارائه میدهد. همچنین، به دلیل پشتیبانی گسترده از انواع دیتابیسها و سازگاری با استانداردهای وب، جنگو گزینهای ایدهآل برای پروژههایی است که نیاز به تعامل پیچیده با دادهها دارند. در نهایت، جنگو نه تنها یک فریم ورک بلکه اکوسیستمی رو به رشد می باشد که به توسعهدهندگان وب کمک میکند تا اهداف توسعه خود را محقق کنند.