جنگو چیست؟
در اولین سری از مقالات آموزش جنگو، میخوایم جواب یکی از پایه ای ترین سوالهای دانشجوهامون رو بدیم و اون اینکه اصلاً جنگو چیه؟ و همینطور یه نمای کلی از اینکه چرا این فریمورک وب انقدر خاص و ویژه هستش.( این رو هم بگیم که تعدادی از تازه کارها هستن که ممکنه به اشتباه اون رو دی جنگو یا دیجنگو بخونن، که باید بگیم تلفظ و همینطور نوشتار صحیح این فریمورک، جنگو – یا همون Django – هستش)
توی این آموزش، بصورت مختصر با چیستی فریمورک جنگو آشنا میشیم، راجع به یه سری از ویژگی های اصلی جنگو صحبت میکنیم و به مرور تو آموزشهای بعدی مباحث بیشتری از این فریمورک رو مطرح میکنیم.
جنگو چیست؟
جنگو یه فریمورک وب سطح بالا توی زبان برنامه نویسی پایتون هستش که قابلیت توسعه سریع وبسایت رو برای ما فراهم میکنه. برنامه نویسهای متبحر زیادی روی ساخته شدن این فریمورک کار کردن(و البته کماکان مشغول به کار هستن)
جنگو اکثر نگرانی های برنامه نویس وب رو رفع میکنه و باعث میشه که حداکثر تمرکز برنامه نویس، معطوف بشه به پیاده سازی اصل کار(میشه گفت اپلیکیشن) که میخواد پیاده سازی بشه و نیاز نیست که بخواد خیلی چیزها رو از اول آماده کنه و لازم نیست چرخ رو دوباره اختراع کنه!
تازه در کنار ویژگی هایی که گفتیم، اینم باید اینا رو هم اضافه کنیم:
- رایگانه
- اوپن سورس هستش
- جامعه ای به شدت فعال و پویا داره
- داکیومنت های بسیار بسیار عالی ای داره
- و ….
حالا بریم ببینیم که فریمورک جنگو توی برنامه نویسی وب چه کمکی به ما میتونه بکنه:
ویژگی های جنگو
فریمورک جنگو هر روز از لحاظ پایداری، کارایی، و همینطور جامعه فعال، داره رشد میکنه. خب اینا عوامل فوق العاده ای هستن که برنامه نویس ها رو به آینده یه ابزار امیدوار میکنن و دورنمای روشنی رو براش ترسیم میکنن. تو یه مطلب جداگونه، مزایای جنگو رو با هم بررسی میکنیم، اما فعلاً برای آشنایی اولیه تعدادی از ویژگی های زیر رو مطرح میکنیم:
- کامل است
- جنگو اصلاحاً باطری سر خوده! و تقریباً هرچیزی که دولوپرها بخوان رو بصورت پیشفرض توی خودش داره. فلسفه اش هم اینه که چون همه چیزهایی که برنامه نویس نیاز داره، بخشی از یک محصول (Product) هستش، پس باید همه اینا راحت در اختیارش باشه. به همین خاطر همه اجزای درونی جنگو بخوبی با هم کار میکنن، از قواعد طراحی یکپارچه ای تبعیت میکنن، و البته داکیومنت های بسیار کامل و به روزی هم داره.(میتونین از اینجا نگاهی به داکیومنت های پروژه فریمورک چنگو بندازین)
- گستردگی در استفاده
- با جنگو تقریباً همه نوع وبسایتی میشه پیاده سازی کرد. از سیستم های مدیریت محتوا(CMS) گرفته تا انواع شبکه های اجتماعی و سایتهای خبری و خلاصه هرچیزی که فکرش رو بکنین. چنگو میتونه با همه فریمورک های کلاینت ساید(client-side) کار بکنه و همینطور محتواهایی که میخوایم رو به انواع فرمت ها(از جمله HTML، RSS feed، JSON، XML و …) به عنوان خروجی بهمون تحویل بده. به علاوه اینکه میشه با دیتابیس های مختلف هم به راحتی متصلش کرد. ینی اینجوری میتونیم بگیم که جنگو واقعاً همه فن حریفه!
- امن است
- جنگو بصورت پیش فرض، بدون اینکه نیاز باشه تا برنامه نویس تمرکز خودش را روی امنیت وبسایت بذاره، تا حد زیادی نگرانی های امنیتی ما رو تو محیط وب رفع کرده و سایت ما رو تا حد زیادی ایمن میکنه. مثلاً از حملات CSRF جلوگیری میکنه، مدیریت یوزرها و پسوردها را بسیار ساده تر میکنه. همچنین برخی از موارد امنیتی که با جنگو به راحتی برای برنامه نویس قابل انجام هستش رو میشه جلوگیری از SQL Injection، Cross-Site Scripting، Clickjacking و …. عنوان کرد.
- توسعه پذیر است
- جنگو فریمورکی است که از معماری نرم افزار کامپوننت محور Shared-nothing استفاده میکنه(تو این معماری نرم افزار، هر قسمت از معماری، از قسمتهای دیگه جداست، و به همین خاطر در صورت نیاز میشه جابجا بشه یا تغییر کنه). این که بخش های فریمورک، از هم مجزا باشن این قابلیت رو به ما میده که هرجا نیاز بود بشه مثلاً سخت افزار قوی تری به سیستم اضافه کرد، یا دیتابیس های دیگه ای رو به سایت وصل کرد، یا فرضاً سیستم هایی اضافه کرد که بشه بار تقاضای زیاد روی سایت رو تعدیل کرده و بهتر هدایت کنن. از نمونه های موفق توسعه پذیری جنگو میشه اینستاگرام و همینطور disqus رو نام برد)
- قابلیت نگهداشت بالا
- با توجه به اینکه فریمورک وب جنگو از MCV(Model-View-Controller) استفاده میکنه( که البته توی جنگو تغییر حالت میده به MVT(Model-View-Template) قابلیت استفاده مجدد و همینطور تغییرات در آینده توی اون بسیار بالا میره و خیلی وقتا از دوباره کاری و نوشتن چندباره کدها جلوگیری میکنه که خب این مورد باعث افزایش سرعت توسعه میشه.
- دوستدار سئو !
- سئو فرآیندی هستش که بر اساس اون، سعی میکنیم که سایت برای موتورهای جستجو در نتایج بالاتر قرار بگیرن و به طبع همون ورودی هامون از موتور جستجو(مخصوصاً موتور جستجوی گوگل) بیشتر و بیشتر بشه. جنگو دستمون رو توی این مورد خیلی باز میذاره و به راحتی هرچه بیشتر ما تو امر سئو کمک میکنه.
- قابلیت جابجایی بالا
- همونطور که میدونین جنگو از فریمورک های پایتون هستش، پس با پایتون نوشته شده. زبان پایتون روی اکثر پلتفرم ها قابل اجراست. فرق نمیکنه ویندوز دارید یا لینوکس، یا حتی MacOS. روی همه شون اجرا میشه. و نکته بسیار خوبه دیگه هم اینه که توسط خیلی از هاستینگ ها پشتیبانی میشه که هر روز هم داره به تعدادشون اضافه میشه، و این طبیعتاً خیلی خیلی عالیه!
جنگو از کجا اومد؟!
جنگو اولین بار بین سالهای 2003 و 2005 میلادی، و توسط یک تیم توسعه دهنده وب که مسئول ساخت و نگهداری وبسایتهای خبری بودند ساخته شد. بعد از اینکه یه تعدادی سایت باهاش ساختن، این تیم شروع به فاکتورگیری قسمت هایی که چندین بار ازش تو سایتها استفاده شده بود کردن و کدهایی که قابل استفاده مجدد بود و همینطور الگوهای طراحی نرم افزارشون رو در یکجا تجمیع کردن. در نهایت در جولای سال 2005 میلادی، این کدها و دیزاین پترن(یا همون الگوی طراحی نرم افزار) رو بصورت یک فریمورک توسعه وب اوپن سورس بنام “جنگو” (“Django”)درآوردن.
با گذشت زمان، پیشرفت و توسعه فریمورک جنگو از نسخه 1.0 اون که تو سپتامبر سال 2008 میلادی منتشر شد تا نسخه فعلی اون در سال 2021 که( در زمان نگارش این مقاله) 3.2 هستش، ادامه پیدا کرد. هر نسخه جدیدی که منتشر میشه یه سری ویژگی های جدید به جنگو اضافه میشه و باگ هایی که پیدا میشن برطرف میشن. از جمله پشتیبانی از دیتابیس های مختلف، موتور قالب(template engines)ها، عملیات کش کردن، اضافه شدن ویوها و کلاسهای “generic” (که حجم کدنویسی مورد نیاز برای خیلی از تسک ها رو خیلی کاهش میده) و ….
پیشنیازهای یادگیری جنگو
همونطور که پیشتر گفتیم، فریمورک جنگو بر پایه زبان پایتون نوشته شده. پس طبیعیه برای ساخت وبسایت با جنگو باید با پایتون آشنایی داشته باشین و چه بهتر که با یه سری مفاهیم پایه ای تر از جمله Command line یا Powershell هم یک مقدار آشنا باشین(البته ضروری نیستن).
کلاً یادگیری جنگو نیاز به یه سطح اولیه دانش پایتون (و البته مقداری هم نحوه عملکرد مرورگر و سرور، و همینطور HTML، CSS و اینجور موارد)داره، اما اگر بلد نیستید هم اصلاً جای نگرانی نیست و با یه کم زمان گذاشتن، از صفر خیلی راحت میتونین با جنگو وبسایت های خیلی خوبی رو طراحی و آماده کنین.
کدهای جنگو چه ساختاری دارند؟ (معماری جنگو)
تو وبسایت های محتوا محور مرسوم(و البته مقداری قدیمی تر)، اپلیکیشن وب، منتظر درخواست(منظور Request هستش) HTTP مرورگر وب میمونه. وقتی درخواست توسط اپلیکیشن دریافت شد، با توجه به نوع درخواست که مثلاً POST بوده یا GET و همینطور محتویات url خواسته شده، یه کاری انجام میشه. حالا با توجه به اون درخواست، مثلاً میخواد از دیتابیس یه چیزی بخونه یا توش چیزی بریزه، با به هر حال کاری کنه که درخواست شده. بعدش اون اپلیکیشن وب، پاسخ(منظور Response هستش) رو به مرورگر وب بر میگردونه(عموماً به صورت یه صفحه HTML) و مقادیری که به عنوان پاسخ بودند رو در جاهای مشخص در قالب HTML نمایش میدن.
حالا جنگو چیکار میکنه؟ یه اپلیکیشن وب جنگو میاد کدهای مورد نیاز برای هندل کردن هر کدوم از اون بخشهایی که بالاتر گفتیم رو بصورت فایلهای جداگونه گروه بندی میکنه:
- URLs – فایل URLs.py فایلی است که آدرسدهی view های ما رو در بر داره. ینی وقتی کسی یه آدرسی رو تو مرورگرش تایپ میکنه و برای ما ارسال میکنه، جنگو توسط این فایل میفهمه که باید چه صفحه ای رو براش لود بکنه. تو آموزش های url جنگو که خواهیم داشت حتماً این فایل و فرمت هایی که میشه توش ایجاد کرد رو با هم میبینیم.
- View – فایل View.py فایلیه که عملکردهای مورد انتظار ما توی اون قرار میگیره. ینی پاسخ به درخواست هایی که توسط مرورگر برامون ارسال میشن، از طریق این فایل پیاده سازی میشه. تو آموزش های view جنگو بیشتر با هم بررسی میکنیمش.
- Models – مدلها، اشیای پایتونی ای هستن که ساختار داده های سایتمون رو توسط اونها طراحی و پیاده سازی میکنیم. و خب توابع مختلفی رو میشه برای کارهای مختخلف توش پیاده سازی کرد که تو آموزش model توی جنگو با هم حتماً بررسی خواهیم کرد.
- Templates – قالب یا همون Template، ساختار ظاهر سایت ما(عموماً HTML) هستش که در نهایت معمولاً هدف نهایی ما هستش که اطلاعاتی که داریم و پردازش کردیم رو بیایم یه جا جلوی سایتمون نمایش بدیم.
توجه: جنگو به این نحوه سازماندهی کدها، اصطلاحاً میگه معماری MVT(Model View Template) که شباهت بسیار زیادی با معماری MVC داره.
برخی شرکت های استفاده کننده از جنگو
این روزها شرکت های خیلی زیادی از جنگو برای توسعه محصولات خودشون استفاده میکنن. اینجا براتون لیست چندتاشون رو قرار دادیم تا ذهنتون بازتر بشه و بدونین که میشه با این فرمورک کارهای بزرگ و در سطح تجاری بین المللی کرد:
- Disqus
- Spotify
- Youtube
- ….
چکیده:
خب تبریک میگم بهتون!
به همین راحتی فهمیدید که فریمورک جنگو چیه، چه مزایایی میتونه داشته باشه، مقداری با تاریخچه جنگو آشنا شدین، و در نهایت هم تا حدودی معماری جنگو رو شناختید. تو آموزش های بعدی مرکز تخصصی آموزش جنگو، کلی مباحث مختلف و خوب داریم که بتونید هرچی بیشتر نسبت به فریمورک وب جنگو شناخت پیدا کنید و سایت های مختلفی برای خودتون برپا کنید.
سوالات و نظراتتون رو هم حتماً با ما در میون بذارید.
دیدگاهتان را بنویسید