اگه تازه با دنیای برنامه نویسی وب آشنا شده باشی حتما اسم های زیادی به گوشت خورده : لاراول ، نود جی اس ، جنگو ، بین این همه اسم یکی از کلماتی که زیاد شنیدی احتمالا جنگو هست ، شاید برات سوال پیش اومده که جنگو دقیقا چیه ؟ چرا اینقدر محبوبه و چرا ازش استفاده میکنن؟ آیا یادگیری جنگو سخته ؟
توی این مقاله میخوایم جواب همه این سوالات رو بدیم و با مفهموم فریمورک ، ویژگی های جنگو و کاربرد های اون بیشتر آشنا بشیم.
فریمورک چیست؟
فریمورک (Framework) یا «چارچوب»، مجموعهای از کدها، ابزارها، قوانین و الگوهای از پیش نوشتهشده است که یک ساختار استاندارد برای ساخت نرمافزار فراهم میکنه.
فریمورک به شما میگه «چطور» کار کنید و کارهای تکراری رو براتون انجام میده تا شما بتونید روی بخش اصلی و خلاقانهی پروژهتون تمرکز کنید.
همونطور که در متن اشاره شد، فریمورک (Framework) یا «چارچوب»، یک اسکلت نرمافزاری از پیش آماده شده است. اما چرا این اسکلت اینقدر مهمه؟
تصور کنید هر بار که یک نجار میخواد یک صندلی بسازه، مجبور باشه اول درخت رو قطع کنه، چوبها رو خودش برش بزنه، ابزارهایی مثل اره و چکش رو از اول اختراع کنه و بعد تازه شروع به ساختن صندلی کنه! این کار به شدت ناکارآمده.
در دنیای برنامهنویسی هم دقیقا همینطوره. وقتی میخوایم یک وبسایت یا اپلیکیشن بسازیم، یک سری کارهای تکراری و مشترکوجود داره که تقریباً در همهی پروژهها لازم هستند. کارهایی مثل:
-
چطور درخواستهای کاربر (مثلاً کلیک روی یک لینک) را دریافت کنیم؟
-
چطور اطلاعات را در دیتابیس (پایگاه داده) ذخیره کنیم و بخوانیم؟
-
چطور امنیت سایت را تأمین کنیم و جلوی هکرها را بگیریم؟
-
چطور کاربران بتوانند ثبتنام کنند و وارد سایت شوند؟
-
چطور صفحات مختلف سایت را مدیریت کنیم؟
فریمورک، جعبه ابزار یا نقشه راه؟
فریمورک مثل یک جعبه ابزار بسیار مجهز به همراه یک نقشه ساخت دقیق است.
-
ابزارهای آماده (Components): فریمورک به شما مجموعهای از ابزارها و قطعات کد آماده (مثل سیستم مدیریت کاربران، سیستم اتصال به دیتابیس، ابزارهای امنیتی) می دهد. شما دیگر نیازی به اختراع دوباره چرخ ندارید.
-
نقشه و قوانین (Structure & Rules): مهمتر از ابزارها، فریمورک به شما میگوید که «چطور» از این ابزارها استفاده کنید و ساختار پروژه شما «باید» چگونه باشد. این مثل نقشه مهندسی یک ساختمان است. به شما میگوید فونداسیون کجاست، ستونها چطور قرار بگیرند و سیم کشی باید از کجا رد شود.
چرا این قوانین مهم هستند؟
شاید فکر کنید که این قوانین دست و پا گیر هستند، اما در واقع بزرگترین مزیت فریمورک همین قوانین هستند:
-
سرعت توسعه: شما کارهای تکراری را انجام نمی دهید و مستقیماً سراغ بخش اصلی و خلاقانه پروژه میروید.
-
کاهش خطا: کدهای فریمورک قبلاً هزاران بار تست شدهاند و مشکلات امنیتی و باگهای رایج آنها برطرف شده است.
-
کار تیمی: وقتی همه اعضای تیم طبق یک چارچوب استاندارد کار میکنند، کدها خواناتر میشوند و همکاری بسیار آسان تر میشود.
-
نگهداری و توسعه (Maintenance): چون ساختار پروژه استاندارد است، شش ماه دیگر هم که به کد سر بزنید (یا یک برنامه نویس جدید به تیم اضافه شود)، به راحتی می فهمید که هر بخش از کد چه کاری انجام میدهد.
به طور خلاصه: فریمورک یک «نظر» و «راه حل» قوی در مورد بهترین روش ساخت یک نوع خاص از نرمافزار (مثلاً وبسایت) ارائه میده. به جای اینکه شما مجبور باشید در مورد تک تک جزئیات پایه ای تصمیم بگیرید، فریمورک این تصمیمها را قبلاً برای شما گرفته و یک مسیر بهینه و تست شده را جلوی پایتان میگذارد.
فریمورک جنگو چیست؟
تصور کن میخوای یه خونه ی بزرگ و مجهز بسازی.
میتونی از صفرِ صفر شروع کنی: بری معدن سنگ، آجرها رو دونه دونه خودت درست کنی، ملات رو مخلوط کنی و اسکلت ساختمون رو وجب به وجب بالا ببری. این کار شدنیه، اما فوقالعاده زمانبر، سخت و پر از چالشهای تکراریه.
راه هوشمندانه تر چیه؟ استفاده از یه «چارچوب» یا اسکلت مهندسی شده و از پیش ساخته شده.
فریمورک جنگو (Django) دقیقاً همین نقش رو در دنیای ساخت وب سایت ها بازی می کنه. جنگو یه اسکلت آماده و قدرتمند بر پایهی زبان محبوب پایتونه که تمام کارهای تکراری و پایهای (مثل مدیریت کاربران، امنیت، اتصال به دیتابیس و...) رو برای شما انجام میده. اینطوری شما به جای درگیر شدن با آجرپزی، میتونید مستقیماً برید سراغ طراحی دکوراسیون داخلی و بخشهای جذاب و منحصر به فرد خونه تون!
به نقل قول از ویکی پدیا ،جنگو (به انگلیسی: Django) یک چارچوب نرمافزاری تحت وب آزاد و متنباز است که به زبان پایتون نوشته شدهاست و از معماری مدل-نما-قالب (به انگلیسی: Model–View–Template) پیروی میکند. هدف اصلی جنگو ساخت آسان سایتهای پیچیده و وابسته به دیتابیس است و بر پایهٔ قابلیت استفادهٔ مجدد و قابل اتصال بودن اجزای مختلف، توسعهٔ سریع و اصل خودت را تکرار نکن (DRY) طراحی شدهاست. جنگو سراسر از پایتون استفاده میکند، حتی برای تنظیمات، فایلها و مدلهای اطلاعات.منبع
معماری جنگو چیست؟
خب، حالا که می دونیم جنگو اون «اسکلت مهندسیشده» برای ساخت خونه ی ماست، سوال بعدی اینه که این اسکلت چطور طراحی شده؟ نقشه و مهندسی پشتش چیه؟
معماری اصلی جنگو بر پایه ی الگویی به نام MVT یا Model-View-Template (مدل-نما-قالب) بنا شده.
شاید قبلاً اسم الگوی معروف تری مثل MVC (Model-View-Controller) به گوشت خورده باشه. معماری جنگو خیلی شبیه به همونه، اما با یه سری تفاوت های کوچیک توی اسمگذاری که اتفاقاً فهمش رو سادهتر هم می کنه.
تصور کن وارد یه رستوران (وبسایت تو) میشی و یه غذا سفارش میدی (یک درخواست یا Request به سرور میفرستی).
چرخهی MVT در جنگو، دقیقاً مثل فرایند آماده شدن سفارش تو در این رستورانه:
۱. مدل (Model): آشپزخانه و انبار مواد اولیه
-
در رستوران: مدل، مثل آشپزخونه ی رستوران و تمام مواد اولیه ای هست که توی انبار (دیتابیس) داری. دستور پخت غذاها و اینکه هر غذا از چه موادی تشکیل شده، اینجا مشخصه.
-
در جنگو: مدل (Model)، لایهی داده ی شماست. این بخش مستقیماً با دیتابیس در ارتباطه. شما اینجا تعریف میکنی که چه نوع داده هایی قراره ذخیره کنی. مثلاً اگه سایت وبلاگی داری، مدل هات میشن «پست» (که عنوان و متن داره) یا «کاربر» (که نام کاربری و ایمیل داره).
-
این همونجاییه که با ORM قدرتمند جنگو (که بالاتر بهش اشاره شد) مستقیماً با دیتابیس حرف میزنی.
۲. ویو (View): گارسون و مدیر منطقی رستوران
-
در رستوران: «ویو» توی جنگو، مثل گارسون باهوش یا مدیر رستورانه. اون کسیه که سفارش تو (Request) رو می گیره.
-
در جنگو: ویو (View)، مغز متفکر عملیاته. این بخش، منطق کسب و کار شما رو مدیریت می کنه. وقتی کاربر درخواستی میده (مثلاً روی لینک «آخرین مقالات» کلیک میکنه)، ویو این درخواست رو دریافت میکنه.
-
بعد میره سراغ «مدل» (آشپزخونه) و میگه: "هی، من ۱۰ تا مقاله آخر رو لازم دارم."
-
مدل داده ها رو از دیتابیس میگیره و به ویو تحویل میده.
نکته مهم: این بخش، دقیقا کاری رو میکنه که توی الگوی MVC بهش میگن Controller (کنترلگر). این همون تفاوت اسمگذاری معروفه! در جنگو، «ویو» مسئول منطقه، نه ظاهر.
۳. تمپلیت (Template): بشقاب و نحوه چیدمان غذا
-
در رستوران: حالا ویو (گارسون) داده های خام (غذا) رو از مدل (آشپزخونه) گرفته. اما نمیتونه همونطوری خام (مثلاً یه تیکه گوشت و دوتا سیبزمینی!) جلوی تو بذاره! اینجا «تمپلیت» وارد میشه. تمپلیت مثل بشقاب، تزئینات و نحوهی چیدمان غذاست.
-
در جنگو: تمپلیت (Template)، لایهی ظاهری و نمایشی کاره. این همون فایل HTML شماست که داخلش یه سری کد های خاص جنگو (مثل
{{ post.title }}) جاگذاری شده. -
ویو (گارسون)، داده ها (غذا) رو به این قالب (بشقاب) میده. جنگو اون ها رو توی جا های مشخص شده قرار میده و نتیجه نهایی، یه صفحهی HTML کامل و زیباست که برای کاربر فرستاده میشه.
جمعبندی چرخه MVT
پس کل فرایند اینطوری کار میکنه:
-
کاربر درخواستی (مثلاً بازدید از
site.com/blog) میفرسته. -
جنگو درخواست رو به ویو (View) مربوطه میده.
-
ویو (مغز منطقی) با مدل (Model) صحبت میکنه تا دادههای لازم (مثلاً پستهای وبلاگ) رو از دیتابیس بگیره.
-
ویو دادههای گرفته شده رو به تمپلیت (Template) (قالب HTML) پاس میده.
-
تمپلیت با دادهها پُر میشه و به عنوان یک صفحهی کامل (HTML) به مرورگر کاربر برگردونده میشه.
بزرگترین مزیت این معماری، «جداسازی مسئولیتها» (Separation of Concerns) هست.
-
طراحان وب (Frontend) میتونن روی تمپلیتها (HTML/CSS) کار کنن بدون اینکه نگران منطق سرور باشن.
-
توسعهدهندگان بکاند (Backend) میتونن روی ویو و مدل (منطق و دیتابیس) تمرکز کنن.
-
و در نهایت، مدیران دیتابیس فقط با مدلها کار دارن.
این جداسازی باعث میشه کد تمیز تر، نگهداریش آسون تر و کار تیمی فوقالعاده بهینه تر بشه. دقیقاً همون مزایایی که توی بخش «چرا از فریمورک استفاده کنیم» بهش اشاره شد!
چرا از فریمورک جنگو استفاده کنیم؟
بعد از اینکه با مفهموم فریمورک و جنگو آشنا شدیم وقتشه بفهمیم چرا باید از جنگو استفاده کنیم؟ چه چیزی فریمورک جنگو رو از بقیه فریمورک ها متمایز میکنه؟
پاسخش در چند ویژگی کلیدی هست که در طراحی جنگو استفاده شده:
کامل و مجهز
جنگو یک فریمورک همه چیز تمومه،بجای اینکه مجبور بشی کلی ابزار مختلف از جاهای مختلف پیدا کنی و در پروژه استفاده کنی ، جنگو اکثر چیزهایی که برای ساخت یک سایت مدرن نیازی داری رو بصورت داخلی فراهم میکنه که میشه به موارد زیر اشاره کرد:
سیستم احرازهویت
مدیریت کامل ورود، ثبت نام، فراموشی رمز، سطوح دسترسی کاربران
سیستم orm قدرتمند
به شما اجازه میده بجای نوشتن کد های پیچیده sql، با دیتابیساز طریق کد پایتون صحبت کنید.
سیستم مدیریت فرم ها: به راحتی فرم هارو بسازید و داده های ورودی کاربر رو اعتبارسنجی کنید.
پنل ادمین قدرتمند
یکی از برگ برنده های فریمورک جنگو همینه!
جنگو بصورت خودکار یک پنل مدیریت کامل بر اساس مدل های دیتابیس شما میسازه، شما مدل های دیتابیس (مثلا «کاربران»و «محصولات» رو تعریف میکنید و جنگو بدون حتی یک خط کد اضافه،یک پنل ادمین امن و حرفه ای به شما میده که بتونید محصولات رو اضافه کنید ، کاربران و کل سایت رو مدیریت کنید.
امنیت
توسعه دهندگان جنگو امنیت رو خیلی جدی گرفتن، این فریمورک به طور پیش فرض سایت شما رو در برابر حملات رایج وب محافظت میکنه.
جلوگیری از sql injection : سیستم orm جنگو جلوی این نوع حملات رو میگیره
محافظت در برابر Xss (cross-site-scripting) :موتور قالب سازی جنگو به طور خودکار ورودی های مشکوک رو خنثی میکنه.
محافظت در برابر Csrf (cross-site request forgery) : جنگو برای تمام فرم ها یک توکن امنیتی در نظر میگیره.
مقیایس پذیری (scability): جنگو طراحی شده که بتونه از یک پروژه کوچیک وبلاگی تا یک اپلیکیشن با میلیون ها کاربر رو رشد بده.
مقایسه جنگو با دیگر فریمورک ها
دنیای وب فقط جنگو نیست و هر ابزاری برای کاری ساخته شده. بیاید یه مقایسه سریع و ساده داشته باشیم تا ببینیم جنگو کجای این نقشه قرار میگیره:
جنگو (Python) با لاراول (PHP): این دوتا خیلی شبیه هم هستن؛ هر دو «همه چیز تمام» و بسیار قدرتمندند. لاراول (Laravel)، پادشاه دنیای PHP، با سینتکس (نحوه نوشتن کد) بسیار زیبا و روان و اکوسیستم فوقالعاده اش شناخته میشه. انتخاب بین این دو، اغلب به انتخاب زبان بستگی داره. اگه با پایتون راحتی یا پروژه ات قراره در آینده با هوش مصنوعی و تحلیل داده سروکار داشته باشه، جنگو معمولاً انتخاب بهتریه.
جنگو (Python) با ASP.NET Core (C#): اینجا وارد قلمروی مایکروسافت میشیم. ASP.NET Core که با زبان #C نوشته میشه، به شدت روی کارایی (Performance) بالا و یکپارچگی با اکوسیستم مایکروسافت (مثل سرویسهای ابری Azure) تمرکز داره. معمولاً در شرکت های بزرگ و پروژه های Enterprise که به سرعت خیلی بالا و پشتیبانی قوی نیاز دارن استفاده میشه. جنگو در راهاندازی سریع تر، انعطاف پذیری و جامعه متن-باز (Open-Source) فعال تر، معمولاً جلوتره.
جنگو (Python) با Node.js (JavaScript): این یه مقایسه رایجه اما زیاد دقیق نیست. Node.js یه «محیط اجرایی» برای جاوا اسکریپته، نه یه فریمورک کامل مثل جنگو. معمولاً جنگو رو با فریمورک های نود مثل Express.jsمقایسه می کنن. تفاوت اصلی اینه: جنگو اون «جعبه ابزار مجهز» و آماده است. اما Express یه جعبه ابزار تقریباً خالی و مینیماله که تو باید دونه دونه ابزارها (مثل ORM و...) رو خودت بهش اضافه کنی. Express برای کارهای خیلی سبک و اپلیکیشنهای Real-time (مثل چت) عالیه، اما جنگو در پروژههای پیچیده و داده محور (مثل همون پنل ادمین!) شما رو خیلی سریع تر به نتیجه می رسونه.
جنگو با Flask یا FastAPI (Python): اگه عاشق پایتونی اما جنگو برات زیادی بزرگه، این دوتا گزینه های عالین. فلسک (Flask) یه «میکروفریمورک» (Micro-framework) هست؛ خیلی سبک و انعطاف پذیره و بهت اجازه میده همهچیز رو خودت انتخاب کنی (دقیقاً برعکس جنگو). FastAPI هم یه ستاره ی مدرن و جدیده که تمرکز اصلیش روی ساخت APIهای فوقسریع (همونطور که از اسمش پیداست) با استفاده از قابلیت های جدید پایتونه.
آیا یادگیری جنگو سخت است؟
یکی از رایجترین سوالات همینه. پاسخ کوتاه: یادگیری جنگو کمی از فریمورکهای میکرو (مثل فلسک) سختتر، اما بسیار آسانتر از ساخت همه چیز از صفر است.
-
منحنی یادگیری: جنگو یک فریمورک «همه چیز تمام» (Batteries-Included) است. این یعنی شما باید در ابتدا مفاهیم بیشتری (مثل ORM، پنل ادمین، سیستم قالبسازی) را یاد بگیرید. این باعث میشود شروع کار کمی کندتر از یک میکروفریمورک باشه.
-
پاداش سریع: اما به محض عبور از این مانع اولیه، سرعت توسعه شما به شدت بالا میره. همان «پنل ادمین» به تنهایی ساعتها در وقت شما صرفهجویی میکنن.
پیشنیاز اصلی یادگیری جنگو چیست؟ فقط یک چیز: تسلط کافی بر زبان پایتون. شما باید با مفاهیم پایتون (مثل کلاسها، توابع و ساختار دادهها) راحت باشید. اگر پایتون را خوب بلد باشید، یادگیری جنگو یک مسیر مشخص و لذت بخش خواهد بود.
چه شرکتهای بزرگی از جنگو استفاده میکنند؟
محبوبیت جنگو فقط به خاطر ویژگی هایش نیست، بلکه به خاطر اینه که در دنیای واقعی و در مقیاسهای عظیم، امتحان خودشو پس داده. برخی از غول های تکنولوژی که از جنگو استفاده میکنن (یا قبلا استفاده کردند) عبارتند:
-
اینستاگرام (Instagram): بزرگترین پروژه ساخته شده با جنگو که روزانه میلیونها کاربر را مدیریت میکند.
-
اسپاتیفای (Spotify): برای بخشهای بکاند و تحلیل دادهها.
-
پینترست (Pinterest): بخشهای زیادی از این پلتفرم عظیم با جنگو ساخته شده.
-
ناسا (NASA): برای مدیریت بخش هایی از وبسایتهای داخلی و عمومی خود.
-
Eventbrite و Disqus
جمع بندی
در این مقاله فهمیدیم که فریمورک چیه و چرا جنگو می تونه انتخاب مناسبی برای ما باشه. اگر شما توسعه دهنده ی پایتون هستید و قصد دارید یک پروژه وب پیچیده ، امن ، داده محور بسازید ، جنگو یکی از بهترین و مطمئن ترین گزینه هایی هست که میتونید انتخاب کنید.
نظرات کاربران (0)