جنگو چیست؟
جنگو (Django) نرمافزاری است که میتوانید از آن برای توسعه سریع و کارآمد برنامههای وب استفاده کنید. اکثر برنامههای وب دارای چندین عملکرد مشترک هستند، مانند احراز هویت، بازیابی اطلاعات از پایگاه داده و مدیریت کوکیها. توسعهدهندگان باید عملکردهای مشابهی را در هر برنامه وب که مینویسند، کدنویسی کنند. جنگو با گروهبندی این عملکردهای مختلف در مجموعهای بزرگ از ماژولهای قابل استفاده مجدد، که به عنوان چارچوب برنامه وب شناخته میشود، کار توسعهدهندگان را آسانتر میکند. توسعهدهندگان از چارچوب وب جنگو برای سازماندهی و نوشتن کد خود به شکلی کارآمدتر استفاده میکنند و زمان توسعه وب را به طور قابل توجهی کاهش میدهند.
چرا توسعهدهندگان وب جنگو را انتخاب میکنند؟
چندین چارچوب وب در بازار وجود دارد. جنگو به زبان پایتون نوشته شده است و یکی از چارچوبهای وب متعدد پایتون است. با این حال، توسعهدهندگان اغلب چارچوب وب جنگو را به دلایل زیر به سایر چارچوبها ترجیح میدهند:
سرعت توسعه
چارچوب جنگو به خوبی سازماندهی شده و نصب و یادگیری آن آسان است، بنابراین میتوانید در عرض چند ساعت شروع به کار کنید. طراحان جنگو این چارچوب را برای پیادهسازی سریع هر معماری وب در کد ایجاد کردهاند. از توسعه سریع و طراحی تمیز و عملگرایانه پشتیبانی میکند. میتوانید فقط با چند خط کد بنویسید، زیرا جنگو ساختار آمادهای را برای چندین وظیفه رایج توسعه وب ارائه میدهد، مانند:
- احراز هویت کاربر
- مدیریت محتوا
- نقشههای سایت
- فیدهای RSS
مقرون به صرفه
جنگو یک پروژه پایتون رایگان و متنباز با یک انجمن فعال است که نرمافزار را بررسی و نگهداری میکند. یک سازمان غیرانتفاعی به نام بنیاد نرمافزار جنگو، استفاده و نگهداری از جنگو را ترویج و پشتیبانی میکند. جلسات منظم، گردهماییها و رویدادهای اجتماعی را برگزار میکند که سایر توسعهدهندگان را به بررسی و مشارکت در پروژه جنگو تشویق میکند. نتیجه، یک چارچوب وب با کیفیت بالا و غنی از ویژگیها است که استفاده از آن رایگان است.
محبوبیت
هزاران پروژه متنباز و سایتهای برجسته از جنگو استفاده میکنند، مانند:
- اینستاگرام
- موزیلا فایرفاکس
- پینترست
- نشنال جئوگرافیک
به دلیل محبوبیت آن، این چارچوب به تکامل خود ادامه میدهد و زیرساخت پشتیبانی قوی دارد. تعداد زیادی از افراد و شرکتها پشتیبانی رایگان و پولی را برای هرگونه چالش توسعهای که ممکن است هنگام استفاده از جنگو با آن روبرو شوید، ارائه میدهند.
جنگو چگونه کار میکند؟
هر برنامه کاربردی وب از دو بخش تشکیل شده است: کد سرور و کد کلاینت. کلاینت یا بازدیدکننده وب سایت دارای یک مرورگر است. هنگامی که آنها یک URL را در مرورگر خود تایپ میکنند، درخواستی را به دستگاه سرور وب که برنامه کاربردی وب روی آن اجرا میشود ارسال میکنند. سرور با استفاده از یک پایگاه داده درخواست را پردازش میکند و اطلاعات را به عنوان پاسخ به کلاینت برمیگرداند. کد کلاینت اطلاعات را به عنوان یک صفحه وب به بازدیدکننده نمایش میدهد.جنگو کد این سیستم درخواست و پاسخ را با استفاده از معماری مدل-نمایش-قالب (MVT) مدیریت میکند.
مدل (Model)
مدلهای جنگو به عنوان رابط بین پایگاه داده و کد سرور عمل میکنند. آنها منبع قطعی اطلاعات درباره دادههای شما هستند. این مدلهای داده شامل فیلدها و عملیات ضروری مورد نیاز برای تعامل با پایگاه داده شما هستند. مدلهای جنگو جدولهای پایگاه داده شما را به کلاسها یا اشیاء در کد پایتون تبدیل میکنند. این فرآیند به عنوان نگاشت شیء-رابطهای (object-relational mapping) شناخته میشود.
به طور کلی، هر مدل به یک جدول پایگاه داده واحد نگاشت میشود و دارای ویژگیهایی است که فیلدهای پایگاه داده را نشان میدهند. به عنوان مثال، اگر وبسایت شما شامل جزئیات کارمندان باشد، میتواند به صورت زیر نشان داده شود:
- یک جدول کارمند با فیلدهای نام و آدرس کارمند.
- یک مدل کارمند به نام Class Employee با دو ویژگی یا فیلد مدل به نامهای Name و Address.
نمایش (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 در سمت کلاینت
- پردازش فرم با دریافت دادههای ارسالشده
احراز هویت کاربر
وبسایتهای امروزی باید کاربران را احراز هویت و مجوزدهی کنند. احراز هویت هویت کاربر را تأیید میکند و مجوزدهی تعیین میکند که یک کاربر تأییدشده چه کاری میتواند در سایت انجام دهد. جنگو میتواند احراز هویت را برای کاربردهای مختلف مدیریت کند:
- حسابهای کاربری
- مجوزها و پرچمهای بله/خیر که به کاربران اجازه انجام وظایف خاصی در وبسایت را میدهند
- گروههایی از چندین حساب کاربری با مجوزهای مشابه
- جلسات کاربری مبتنی بر کوکی
همچنین جنگو یک سیستم هش رمز عبور قابل تنظیم و ابزارهایی برای محدود کردن محتوا در فرمها و نماها ارائه میدهد.
مدیریت سایت
سایت مدیریت جنگو ایجاد یک صفحه مدیریت برای سایت شما را ساده میکند. مدیران سایت میتوانند از این صفحه برای ایجاد، ویرایش یا مشاهده مدلهای داده در سایت شما استفاده کنند.
آیا جنگو نظر محور است؟
ما به طور غیررسمی چارچوبهای وب را «نظرمحور» (opinionated) مینامیم وقتی که فرآیندی را بر توسعهدهندگان وب تحمیل میکنند. آنها نظری یا روش درستی برای انجام وظایف خاص دارند. برای مثال، چارچوبهای نظرمحور معمولاً با نگهداری مستندات دقیق برای وظایف برنامه مرتبط با آن صنعت، توسعه کارآمد در صنایع خاص را پشتیبانی میکنند.
از سوی دیگر، چارچوبهای غیرنظرمحور محدودیتهای کمتری در نحوه ادغام اجزای مدل-نمایش-قالب (MVT) دارند. اگرچه این چارچوبها انعطافپذیرتر هستند، اما به دلیل استفاده از رویکردهای متفاوت توسط توسعهدهندگان مختلف برای یک وظیفه مشابه، پیچیدگیهایی در سازماندهی کد ایجاد میکنند.
جنگو تا حدی نظرمحور است. این چارچوب طیف گستردهای از اجزا را ارائه میدهد و شامل مستنداتی درباره نحوه مدیریت انواع مختلف وظایف توسعه وب است. توسعهدهندگان میتوانند از معماری جدا شده جنگو برای انتخاب از میان گزینههای مختلف استفاده کنند و حتی پشتیبانی از گزینههای جدیدی که نیاز دارند را اضافه کنند.
امنیت جنگو چیست؟
هکرها اغلب برنامههای وب را هدف قرار میدهند تا به اطلاعات ورود کاربران، دادههای مالی و سایر اطلاعات حساس دسترسی پیدا کنند. چارچوب وب جنگو چندین ویژگی برای محافظت از برنامههای وب و کاربران شما ارائه میدهد. با پیروی از بهترین شیوههای جنگو، از بسیاری از اشتباهات امنیتی رایج جلوگیری میکنید. در زیر چند مثال آورده شده است:
محافظت در برابر اسکریپتنویسی متقابل (XSS)
حملات اسکریپتنویسی متقابل (XSS) زمانی رخ میدهند که هکرها کد مخرب را به مرورگرهای کاربران وبسایت شما وارد میکنند. آنها میتوانند با روشهای مختلفی مانند موارد زیر به کاربران شما حمله کنند:
- ذخیره اسکریپتهای مخرب در پایگاه داده شما، به طوری که سرور به طور ناخواسته کد مخرب را در پاسخ بعدی خود ارسال کند.
- فریب دادن کاربران شما برای کلیک روی لینکی که باعث اجرای کد کلاینت مخرب، به جای کد شما، در مرورگر کاربر میشود.
برای مثال، قالب جنگو ممکن است شامل {{name}} باشد که متن واردشده توسط کاربر در فیلد نام پروفایل را نشان میدهد. هکر جلسه را ربوده و نام را به کدی مانند <script>alert(‘hello’)</script> تغییر میدهد. قالب به <script>alert(‘hello’)</script> تغییر میکند.
این کد اکنون در مرورگر کاربر شما اجرا میشود تا پیام متنی “سلام” روی صفحه نمایش آنها ظاهر شود. اگرچه این مثال ساده است، میتوانید ببینید که چگونه یک هکر میتواند اسکریپتهای پیچیدهای را برای کنترل کامپیوتر کاربر شما وارد کند.
جنگو با فرار خودکار یا نادیده گرفتن کاراکترهای خاصی مانند < و >، که نشاندهنده کد مخرب هستند، از ورودیهای کاربر در برابر چنین حملاتی محافظت میکند.
حفاظت از دسترسی غیرمجاز
حملات جعل درخواست متقابل (CSRF) زمانی رخ میدهند که هکرها اعتبار کاربران شما را میدزدند و درخواستهای غیرمجاز به برنامه وب شما ارسال میکنند. جنگو با ماژول CSRF جنگو در برابر اکثر انواع حملات CSRF محافظت داخلی ارائه میدهد. این ماژول با ارسال یک مقدار مخفی به هر کاربر در اولین ورود آنها کار میکند.
درخواستهای جدید کلاینت شامل مقدار مخفی به عنوان اثبات این است که کلاینت همان کسی است که ادعا میکند. از آنجا که فقط مرورگر کاربر مجاز مقدار مخفی را میداند، جنگو میتواند درخواستهایی را که از ماشین دیگری که وانمود به کاربر بودن میکند، به طور خودکار رد کند. برای عملکرد این ماژول، باید تنظیمات ماژول CSRF جنگو را فعال کنید.
حفاظت از تزریق SQL
هکرها از تزریق SQL برای وارد کردن کد SQL به پایگاه داده شما با استفاده از درخواستهای HTTP مانند POST استفاده میکنند. کد مخرب میتواند دادههای معتبر شما را بدزدد یا حذف کند. جنگو این مشکل را در طراحی خود حل میکند. دادههای ارسالی توسط کاربر، که به عنوان پارامتر شناخته میشوند، تا زمانی که به لایه مدل برسند، از پرسوجوی پایگاه داده جدا نگه داشته میشوند. مدل جنگو میتواند هنگام ایجاد کد پرسوجو، کاراکترهای خطرناک را فرار دهد.
حفاظت به دلیل پشتیبانی انجمن
محافظت در جنگو فراتر از ویژگیهای امنیتی داخلی آن است. از آنجا که جنگو منبعباز است، بسیاری از توسعهدهندگان با تجربه از ماژولهای جنگو استفاده و بررسی میکنند. آزمایش کامل، قابلیت اطمینان کد جنگو را افزایش میدهد و از باقی ماندن آسیبپذیریهای امنیتی تصادفی جلوگیری میکند.
مقیاسپذیری جنگو چیست؟
مقیاسپذیری در توسعه وب به توانایی وب سایت برای مدیریت همزمان چندین درخواست کلاینت اشاره دارد. پروژههای جنگو بسیار مقیاسپذیر هستند و میتوانند هزاران درخواست را مدیریت کنند. میتوانید برنامه کاربردی جنگو خود را به روشهای زیر مقیاسبندی کنید.
سختافزار
تیم جنگو چارچوب وب را برای استفاده کارآمد از سختافزار سیستم شما طراحی کرده است. با معماری بدون اشتراک (shared-nothing)، جنگو اجزایی مانند لایه پایگاه داده (مدلها) و لایه برنامه (نماها) را جدا میکند. شما میتوانید در هر سطح سختافزار اضافه کنید بدون اینکه بر بقیه سیستم تأثیر بگذارد. میتوانید سرورهای پایگاه داده یا سرورهای برنامه بیشتری به سیستم خود اضافه کنید و جنگو از این منابع به طور کارآمد برای مدیریت بازدیدکنندگان متعدد استفاده خواهد کرد.
کش کردن
کش کردن فرآیند ذخیره برخی دادههای صفحه وب روی سرور کلاینت یا سرورهای واسطه است تا برنامه جنگو شما بتواند درخواستها را سریعتر پردازش کند و مقیاس را افزایش دهد. جنگو یک سیستم کش قوی با سطوح مختلف کش ارائه میدهد:
- میتوانید کل وبسایت خود را کش کنید.
- میتوانید خروجی تابع نمایشی خاصی را کش کنید.
- میتوانید محتوای خاصی که ایجاد آن زمانبر است را کش کنید.
پروژههای جنگو همچنین با کشهای شخص ثالث به خوبی کار میکنند. میتوانید کدی بنویسید که به این کشها اشاره کند و مشخص کند کدام بخش از برنامه شما را میخواهید کش کنید.