جنگو چیست؟
جنگو نرمافزاری است که میتوانید برای توسعه سریع و کارآمد برنامههای کاربردی وب از آن استفاده کنید. اکثر برنامههای کاربردی وب دارای چندین عملکرد مشترک مانند احراز هویت، بازیابی اطلاعات از پایگاه داده و مدیریت کوکیها هستند. توسعهدهندگان باید عملکردهای مشابه را در هر برنامه کاربردی وبی که مینویسند، کدنویسی کنند. جنگو با گروهبندی عملکردهای مختلف در مجموعهای بزرگ از ماژولهای قابل استفاده مجدد، به نام چارچوب برنامه کاربردی وب، کار آنها را آسانتر میکند. توسعهدهندگان از چارچوب وب جنگو برای سازماندهی و نوشتن کد خود به طور کارآمدتر و کاهش چشمگیر زمان توسعه وب استفاده میکنند.
چرا توسعهدهندگان وب جنگو را انتخاب میکنند؟
چارچوبهای وب متعددی در بازار وجود دارد. جنگو به زبان پایتون نوشته شده و یکی از بسیاری از چارچوبهای وب پایتون است. با این حال، توسعهدهندگان اغلب چارچوب وب جنگو را به دلایل زیر به سایرین ترجیح میدهند.
سرعت توسعه
چارچوب جنگو به خوبی سازماندهی شده و نصب و یادگیری آن آسان است، بنابراین میتوانید در عرض چند ساعت شروع به کار کنید. طراحان جنگو این چارچوب را برای پیادهسازی سریع هر معماری وب در کد ایجاد کردهاند. از توسعه سریع و طراحی تمیز و عملگرایانه پشتیبانی میکند. میتوانید فقط با چند خط کد بنویسید، زیرا جنگو ساختار آمادهای را برای چندین وظیفه رایج توسعه وب ارائه میدهد، مانند:
- احراز هویت کاربر
- مدیریت محتوا
- نقشههای سایت
- فیدهای RSS
مقرون به صرفه
جنگو یک پروژه پایتون رایگان و متنباز با یک انجمن فعال است که نرمافزار را بررسی و نگهداری میکند. یک سازمان غیرانتفاعی به نام بنیاد نرمافزار جنگو، استفاده و نگهداری از جنگو را ترویج و پشتیبانی میکند. جلسات منظم، گردهماییها و رویدادهای اجتماعی را برگزار میکند که سایر توسعهدهندگان را به بررسی و مشارکت در پروژه جنگو تشویق میکند. نتیجه، یک چارچوب وب با کیفیت بالا و غنی از ویژگیها است که استفاده از آن رایگان است.
محبوبیت
هزاران پروژه متنباز و سایتهای برجسته از جنگو استفاده میکنند، مانند:
- اینستاگرام
- موزیلا فایرفاکس
- پینترست
- نشنال جئوگرافیک
به دلیل محبوبیت آن، این چارچوب به تکامل خود ادامه میدهد و زیرساخت پشتیبانی قوی دارد. تعداد زیادی از افراد و شرکتها پشتیبانی رایگان و پولی را برای هرگونه چالش توسعهای که ممکن است هنگام استفاده از جنگو با آن روبرو شوید، ارائه میدهند.
جنگو چگونه کار میکند؟
هر برنامه کاربردی وب از دو بخش تشکیل شده است: کد سرور و کد کلاینت. کلاینت یا بازدیدکننده وب سایت دارای یک مرورگر است. هنگامی که آنها یک URL را در مرورگر خود تایپ میکنند، درخواستی را به دستگاه سرور وب که برنامه کاربردی وب روی آن اجرا میشود ارسال میکنند. سرور با استفاده از یک پایگاه داده درخواست را پردازش میکند و اطلاعات را به عنوان پاسخ به کلاینت برمیگرداند. کد کلاینت اطلاعات را به عنوان یک صفحه وب به بازدیدکننده نمایش میدهد.جنگو کد این سیستم درخواست و پاسخ را با استفاده از معماری مدل-نمایش-قالب (MVT) مدیریت میکند.
مدل (Model)
مدلهای جنگو به عنوان رابط بین پایگاه داده و کد سرور عمل میکنند. آنها منبع قطعی اطلاعات در مورد دادههای شما هستند. این مدلهای داده شامل فیلدها و عملیات ضروری هستند که برای تعامل با پایگاه داده خود به آنها نیاز دارید. بنابراین مدلهای جنگو جداول پایگاه داده شما را به کلاسها یا اشیاء در کد پایتون تبدیل میکنند. به این کار نگاشت رابطهای شیء گفته میشود.به طور کلی، هر مدل به یک جدول پایگاه داده واحد نگاشت میشود و دارای ویژگیهایی است که فیلدهای پایگاه داده را نشان میدهند. برای مثال، اگر وب سایت شما شامل جزئیات کارمندان باشد، میتواند به صورت زیر نمایش داده شود:
- یک جدول کارمندان با فیلدهای نام و آدرس کارمندان.
- یک مدل کارمند به نام کلاس کارمند با دو ویژگی یا فیلد مدل به نام نام و آدرس.
نمایش (View)
نماهای جنگو درخواست را با استفاده از مدلها پردازش میکنند. میتوانید یک تابع نمایش برای هر نوع درخواستی که بازدیدکنندگان وب سایت شما میتوانند به وب سایت شما ارسال کنند، بنویسید. یک تابع نمایش میتواند درخواست را به عنوان ورودی دریافت کند و پاسخی را برگرداند، که میتواند یک کد خطا، یک تصویر، یک فایل یا هر نوع دادهای باشد.جنگو دارای یک ویژگی نگاشت URL یا توزیعکننده URL است که توابع نمایش شما را به URLهای شما نگاشت میکند. شما باید یک فایل نگاشت URL ایجاد کنید که در آن الگوهای URL را به صورت زیر بنویسید.
urlpatterns = [
path(’employee/name’, views.employee_name),
path(’employee/<int:year>/’, views.year_archive),
]
برای مثال، اگر میخواهید بازدیدکنندگان وب سایت شما لیستی از تمام کارمندان شما را در یک سال خاص مشاهده کنند، مسیر URL کارمند/شماره سال را تنظیم میکنید و یک تابع نمایش جنگو متناظر year_archive مینویسید. هنگامی که بازدیدکننده وب سایت شما “yourwebsitename.com/employee/2020” را در مرورگر خود تایپ میکند، مراحل زیر رخ میدهد:
- درخواست به برنامه کاربردی وب شما میآید.
- چارچوب وب جنگو شماره سال و نام تابع نمایش را از نگاشت URL میگیرد.
- تابع نمایش year_archive را برای سال ۲۰۲۰ اجرا میکند.
- Year_archive از مدل کارمند برای دریافت تمام دادههای کارمند از پایگاه داده برای سال ۲۰۲۰ استفاده میکند.
- چارچوب وب جنگو دادهها را به عنوان پاسخ برمیگرداند.
قالب (Template)
قالبهای جنگو ارائه صفحه وب را در مرورگر مدیریت میکنند. از آنجایی که اکثر صفحات وب به زبان نشانهگذاری فرامتن (HTML) هستند، میتوانید کد قالب جنگو را به سبکی مشابه HTML بنویسید. یک فایل قالب شامل اجزای خاصی است:
- بخشهای ثابت خروجی نهایی HTML، مانند تصاویر، دکمهها و سرصفحهها.
- نحو ویژه که نحوه درج محتوا یا دادههای پویا را توصیف میکند، که با هر درخواست تغییر میکند.
- اجزای زیر سیستم قالب جنگو را تشکیل میدهند.
زبان قالب
زبان قالب زبان برنامهنویسی است که برای نوشتن کد قالب HTML از آن استفاده میکنید. جنگو از زبان قالب جنگو خود و یک جایگزین محبوب به نام Jinja2 پشتیبانی میکند.
موتور قالب
موتور قالب فایل قالب را پردازش میکند و خروجی نهایی HTML را ایجاد میکند. این خروجی شامل دادههای پاسخ است.برای مثال، هنگامی که بازدیدکننده وب سایت شما اطلاعات کارمند را درخواست میکند، قالب جنگو شما صفحه وبی را که آنها میبینند با سرصفحه وب سایت شما، جدولی که شامل نامها و آدرسهای همه کارمندان است و دکمهای که میگوید بعدی پر میکند.
چه ماژولهای دیگری را میتوانید در جنگو استفاده کنید؟
اگرچه معماری مدل-نمایش-قالب (MVT) ساختار اساسی هر برنامه کاربردی را تعریف میکند، جنگو دارای چندین ماژول دیگر برای بهبود وب سایت شما است. در زیر چند مثال ارائه میدهیم.
فرمها
اکثر وب سایتها برای وظایفی مانند ثبتنام و پرداخت یا جمعآوری اطلاعات از بازدیدکننده وب سایت به فرمها نیاز دارند. جنگو ابزارها و کتابخانههای متعددی را ارائه میدهد که میتوانید برای مدیریت فرمهای وب سایت خود از آنها استفاده کنید. میتواند پردازش فرم را ساده و خودکار کند و میتواند این کار را ایمنتر از زمانی که خودتان کد را مینویسید انجام دهد.
جنگو پردازش فرم را به سه روش انجام میدهد:
- ایجاد فرم با آمادهسازی و بازسازی دادهها برای نمایش.
- اعتبارسنجی فرم با بررسی فرمهای HTML در سمت کلاینت.
- پردازش فرم با دریافت دادههای ارسال شده.
احراز هویت کاربر
وب سایتهای معاصر باید کاربران را احراز هویت و مجوزدهی کنند. احراز هویت هویت کاربر را تأیید میکند و مجوز تعیین میکند که یک کاربر احراز هویت شده چه کاری میتواند در سایت انجام دهد. جنگو میتواند احراز هویت را برای مصارف مختلف مدیریت کند.
- حسابهای کاربری.
- مجوزها و پرچمهای بله یا خیر که به کاربران اجازه میدهند
- جلسات کاربری مبتنی بر کوکی.
- همچنین یک سیستم هشینگ رمز عبور قابل تنظیم و ابزارهایی برای محدود کردن محتوا در فرمها و نماها ارائه میدهد.
مدیریت سایت
سایت مدیریت جنگو ارائه یک صفحه مدیریت برای سایت شما را ساده میکند. مدیران سایت میتوانند از این صفحه برای ایجاد، ویرایش یا مشاهده مدلهای داده در سایت شما استفاده کنند.
آیا جنگو نظر محور است؟
ما به طور غیررسمی چارچوبهای وب را زمانی که فرآیندی را بر توسعهدهندگان وب تحمیل میکنند، “نظر محور” مینامیم. آنها نظری یا روش درستی دارند که توسعهدهندگان باید وظایف خاصی را انجام دهند. برای مثال، چارچوبهای نظر محور معمولاً با نگه داشتن مستندات دقیق برای وظایف برنامه کاربردی مربوط به آن صنعت، از توسعه کارآمد در صنایع خاص پشتیبانی میکنند.از طرف دیگر، چارچوبهای غیر نظر محور محدودیتهای کمتری در مورد نحوه ادغام اجزای مختلف مدل-نمایش-قالب (MVT) با هم دارند. در حالی که انعطافپذیرتر هستند، باعث پیچیدگی در سازماندهی کد میشوند، زیرا توسعهدهندگان مختلف میتوانند از رویکردهای متنوعی برای یک کار مشابه استفاده کنند.جنگو تا حدودی نظر محور است. طیف گستردهای از اجزا را ارائه میدهد و شامل مستنداتی در مورد نحوه مدیریت انواع مختلف وظایف توسعه وب است. توسعهدهندگان میتوانند از معماری جدا شده جنگو برای انتخاب از بین طیف وسیعی از گزینهها استفاده کنند و حتی پشتیبانی از گزینههای جدید مورد نیاز خود را اضافه کنند.
امنیت جنگو چیست؟
مجرمان سایبری اغلب برنامههای کاربردی وب را برای دسترسی به ورود کاربران، دادههای مالی و سایر اطلاعات حساس هدف قرار میدهند. چارچوب وب جنگو چندین ویژگی برای محافظت از برنامههای کاربردی وب و کاربران شما ارائه میدهد. با پیروی از بهترین شیوههای جنگو، از بسیاری از اشتباهات امنیتی رایج اجتناب میکنید. در زیر چند مثال ارائه میدهیم.
حفاظت از اسکریپتنویسی بین سایتی
حملات اسکریپتنویسی بین سایتی (XSS) زمانی رخ میدهند که مجرمان سایبری کد مخرب را در مرورگرهای کاربران وب سایت شما وارد میکنند. آنها میتوانند با فریب دادن برنامه کاربردی وب شما به روشهای مختلف به کاربران شما حمله کنند، مانند:
- ذخیره اسکریپتهای مخرب در پایگاه داده شما به طوری که سرور ناخواسته کد مخرب را در پاسخ بعدی خود ارسال کند.
- فریب دادن کاربران شما برای کلیک کردن روی لینکی که باعث اجرای کد کلاینت مخرب به جای کد شما در مرورگر کاربر میشود.
برای مثال، قالب جنگو ممکن است {{name}} داشته باشد، که متنی را که کاربر در فیلد نام نمایه خود وارد میکند، نشان میدهد. مجرم سایبری جلسه را ربوده و نام را به کدی مانند <script>alert(‘hello’)</script> تغییر میدهد. قالب به {{<script>alert(‘hello’)</script>}} تغییر میکند.این کد اکنون در مرورگر کاربر شما اجرا میشود به طوری که پیام متنی “Hello” روی صفحه آنها ظاهر میشود. در حالی که این مثال ساده است، میتوانید ببینید که چگونه یک مجرم سایبری میتواند اسکریپتهای پیچیده را برای کنترل رایانه کاربر شما وارد کند.جنگو با فرار خودکار یا نادیده گرفتن کاراکترهای خاصی مانند < و >، که نشان دهنده کد مخرب هستند، از ورودی کاربر، شما را از چنین حملاتی محافظت میکند.
حفاظت از دسترسی غیرمجاز
حملات جعل درخواست بین سایتی (CSRF) زمانی رخ میدهند که هکرها اعتبار کاربران شما را میدزدند و درخواستهای غیرمجاز را به برنامه کاربردی وب شما ارسال میکنند. جنگو در ماژول جنگو CSRF حفاظت داخلی در برابر اکثر انواع حملات CSRF دارد. با ارسال یک مقدار مخفی به هر کاربر در اولین ورود آنها کار میکند.درخواستهای کلاینت جدید شامل مقدار مخفی به عنوان اثبات این است که کلاینت همان کسی است که ادعا میکند. از آنجایی که فقط مرورگر کاربر مجاز مقدار مخفی را میداند، جنگو میتواند به طور خودکار درخواستها را در صورتی که از دستگاه دیگری که وانمود میکند کاربر است، میآیند، رد کند. باید تنظیمات ماژول جنگو CSRF را برای کار کردن آن فعال کنید.
حفاظت از تزریق SQL
مجرمان سایبری از تزریق SQL برای وارد کردن کد SQL به پایگاه داده شما با استفاده از درخواستهای HTTP مانند POST استفاده میکنند. کد مخرب میتواند دادههای واقعی شما را بدزدد یا حذف کند. جنگو این مشکل را در خود طراحی حل میکند. دادههای ارسالی کاربر، به نام پارامترها، تا زمانی که به لایه مدل میرسد، از پرس و جوی پایگاه داده جدا نگه داشته میشوند. سپس مدل جنگو میتواند هنگام ایجاد کد پرس و جو، کاراکترهای خطرناک را فرار دهد.
حفاظت به دلیل پشتیبانی انجمن
حفاظت در جنگو فراتر از ویژگیهای امنیتی داخلی آن است. از آنجایی که جنگو متنباز است، بسیاری از توسعهدهندگان با تجربه از ماژولهای جنگو استفاده و آنها را بررسی میکنند. آزمایش کامل قابلیت اطمینان کد جنگو را افزایش میدهد و از باقی ماندن آسیبپذیریهای امنیتی تصادفی جلوگیری میکند.
مقیاسپذیری جنگو چیست؟
مقیاسپذیری در توسعه وب به توانایی وب سایت برای مدیریت همزمان چندین درخواست کلاینت اشاره دارد. پروژههای جنگو بسیار مقیاسپذیر هستند و میتوانند هزاران درخواست را مدیریت کنند. میتوانید برنامه کاربردی جنگو خود را به روشهای زیر مقیاسبندی کنید.
سختافزار
تیم جنگو چارچوب وب را برای استفاده کارآمد از سختافزار در سیستم شما طراحی کرده است. با معماری بدون اشتراک، جنگو اجزایی مانند لایه پایگاه داده (مدلها) و لایه برنامه کاربردی (نماها) را جدا میکند. میتوانید سختافزار را در هر سطحی بدون تأثیر بر بقیه سیستم اضافه کنید. میتوانید سرورهای پایگاه داده یا سرورهای برنامه کاربردی بیشتری را به سیستم خود اضافه کنید و جنگو از این منابع به طور کارآمد برای مدیریت چندین بازدیدکننده استفاده خواهد کرد.
ذخیرهسازی نهان
ذخیرهسازی نهان فرآیند ذخیره برخی از دادههای صفحه وب در سرور کلاینت یا در سرورهای واسطه است به طوری که برنامه کاربردی جنگو شما میتواند درخواستها را سریعتر پردازش کند و مقیاس را افزایش دهد. جنگو یک سیستم ذخیرهسازی نهان قوی با سطوح مختلف ذخیرهسازی نهان ارائه میدهد:
- میتوانید کل وب سایت خود را ذخیره کنید.
- میتوانید خروجی تابع نمایش خاصی را ذخیره کنید.
- میتوانید محتوای خاصی را که ایجاد آن زمانبر است، ذخیره کنید.
- پروژههای جنگو با حافظههای نهان شخص ثالث نیز به خوبی کار میکنند. میتوانید کدی بنویسید که نکاتی را در مورد این حافظههای نهان ارائه میدهد و به آنها میگوید کدام بخش از برنامه کاربردی خود را میخواهید ذخیره کنید.