چرا سراغ جنگو رفتم

من فارغ‌اتحصیل برق الکترونیک هستم. قبلا با سی++، پرل و پایتون برنامه نوشته‌بودم. و مدتی هم در آزمایشگاه لایتک مشغول به کار بودم و کمی کد PHP نوشته‌بودم. دو مانع اصلی جلوی برنامه‌نویسی من را می‌گرفت. یکی دوباره‌کاری‌ها. برای هر فرم اطلاعاتی می‌باید جدول دیتابیس را می‌ساختیم، کدهای فرم‌ها را می‌نوشتیم که هر دو از نظر مفهوم بسیار به هم وابسته و شبیه هستند. مانع دوم من امنیت بود که کابوس هر لحظه من شده‌بود. حملات XSS، SQL Injection و حملاتی که هنوز نمی‌شناختم. ولی مهمترینش SQL Injection بود. این حفره به نفوذگر اجازه می‌دهد که از طریق ورودی خروجی‌های داده در وبسایت (و اپلیکیشن) به دیتابیس دسترسی پیدا کنه، و برای جلوگیری از آن اقدامات تکراری مختلفی باید انجام می‌شد که از حوصله من خارج بود. شاید به این دلیل که همیشه ممکن بود یکی از داده‌ها اشتباها فراموش شود و یک راه نفوذ ایجاد کند.

تا اینکه با جنگو آشنا شدم. جنگو برای هر نوع داده تنها به یک خط کد نیاز دارد. مثلا اگر داده‌ای از نوع عدد تعریف شود، در دیتابیس و فرم فیلترها و خطاهای لازم آن نوشته شده و روی داده اعمال می‌شود. همین‌طور برای هر جدول دیتابیس به سرعت می‌توان یک پنل ادمین ایجاد کرد. علاوه بر این همه داده‌ها از بابت نفوذ SQL Injection پالایش می‌شوند. و جالب‌تر اینکه هرزمان که به داده دیتابیس اشاره کنید، جنگو داده‌ای از همان‌نوعی که تعریف کردید در اختیارتان می‌گذارد و نیازی به تبدیل‌های اضافی ندارید.

معرفی جنگو

جنگو یک فریم‌ورک ساخت اپلیکیشن وب است. فریم‌ورکی به زبان پایتون. بر اساس گفته سایت جنگو و تجربه من، جنگو تا آنجا که ممکن است فرایند طراحی را سریع کرده.

جنگو یک ORM پیشرفته دارد.

با استفاده از ORM با استفاده از کدهای زبان مادری (مثلا در اینجا پایتون) به داده‌های دیتابیس دسترسی داریم و نیازی به نوشتن کدهای SQL نداریم. با این کار هم از روش‌های بهینه‌سازی ارتباط با دیتابیس استفاده می‌کنیم و هم نیازی به نوشتن کدهای SQL دشوار و تکراری و ادغام کدهای زبان مادری با SQL نداریم و هم برنامه ما در برابر SQL Injection ایمن می‌شود.

ORM جنگو به همین جا ختم نمی‌شود. اولا برای ساخت جدول‌های دیتابیس، برای هر ستون جدول یا به عبارت دیگر هر نوع داده مدل، تنها به یک خط کد پایتون ساده نیاز داریم. جنگو با سامانه Migration پیشرفته خود جدول‌ها را به صورت بسیار دقیق در دیتابیس می‌سازد. هر زمان که تغییری در نوع داده‌های خود دهیم، جنگو به پیشرفته‌ترین شکل ممکن داده‌های دیتابیس را مجدد متناظر با کد پایتون ویرایش می‌کند.

سیستم کوئری جنگو بسیار کامل است. به ندرت ممکن است نیازی به نوشتن کدهای SQL پیدا کنید. برای کوئری‌های پیچیده هم جنگو راه حل‌های بسیار ساده به زبان پایتون دارد. و با روش هوشمندانه خود، حتی توابع SQL به طور خودکار به کدهای پایتون تبدیل می‌شوند. یعنی حتی اگر تابعی را در دیتابیس تعریف کنیم، جنگو به طور خودکار، بدون تغییر در کدهای پایتون، به تابع دسترسی دارد.

روش Loosely Coupling در جنگو

جنگو به صورت ماژول‌ماژول طراحی شده. حتی ماژول‌هایی از آن را که به صورت پیش‌فرض هنگام ایجاد پروژه صدا می‌زند را می‌توانیم به سادگی از آن جدا کنیم و البته ماژول‌هایی را نیز در پروژه صدا نمی‌زند که هرگاه نیاز داریم به پروژه اضافه می‌کنیم. اما خاصیت Loosely Coupling بدین معنا است که روش کدنویسی که در مستندات جنگو آموزش داده می‌شود و خودش به درستی اجرا می‌کند، موجب می‌شود که برنامه‌نویسان، قسمت‌های مستقل کدشان را کاملا از پروژه خود مستقل کنند و به راحتی به یک بسته جدید جنگو در آورند. به همین دلیل بسته‌های پیشرفته بسیاری را در سایت رسمی بسته‌های جنگو می‌بینیم که قابل استفاده هستند. بر اساس این استاندارد، نصب این بسته‌ها تغییر اساسی در شیوه برنامه‌نویسی شما ایجاد نخواهند کرد. مثلا هر بسته مانند یک شارژر فندکی ماشین عمل می‌کنند. این شارژر تغییری در شیوه رانندگی شما ایجاد نمی‌کند، یا سیم‌کشی ماشین را به هم نمی‌زند و به صورت مستقل به شما کمک می‌کند.

معماری MVC (مدل، نما و کنترلگر)

معماری MVC هم یک نگاه طراحی است که ارتباط دیتابیس (مدل)، نما (ظاهر) و کنترل روند برنامه را از هم جدا می‌کند و با سه شیوه متفاوت به سراغ آن‌ها می‌رود.

مدل (Model)، یعنی همان ساختار شیٔ ما. مثلا شناسنامه یک شخص را در نظر بگیریم. ساختار اطلاعاتی آن (کد ملی، نام، نام پدر و مادر، نام فرزندان، نام همسر، تاریخ تولد) همان مدل را تشکیل می‌دهد. این که کد ملی از نوع عدد است و…

به محض نوشتن این مدل در جنگو، ساختاربندی دیتابیس آن(Migration)، با دو دستور به طور خودکار انجام می‌شود.

نما (View) در جنگو Template نام دارد. Template یک ادغام کدهای HTML (و یا هر نوع متن خروجی دیگر) با زبان Template جنگو است. استفاده از Template در پایتون یک اجبار است. چرا که پایتون قابلیت ادغام با فایل‌های HTML را مانند PHP ندارد. روش مرتب، استفاده از Template است. استفاده از Template همچنین نوشتن کدهای تکراری را به حداقل می‌رساند.

کنترل روند برنامه (Controller) در جنگو در فایل‌هایی به نام views.py نوشته می‌شود. این فایل‌ها عموما از توابع و یا کلاس‌هایی تشکیل شدند که اطلاعات درخواست ‌HTTP را به عنوان ورودی می‌گیرند، پردازش می‌کنند، اطلاعات مورد نیاز را از مدل دریافت می‌کنند (یا می‌نویسند) و با استفاده از ‌Template یک خروجی ساخته و به کاربر برمی‌گردانند. که این خروجی معمولا یک صفحه وب یا یک داده json یا یک فایل و… است.

مستندات جنگو

مستندات کامل جنگو حس قدرت را به من می‌دهد. برای هر قسمت از کدهای جنگو، مثال‌های کامل و متعددی در مستندات آن آورده شده که هم روش استفاده از آن و هم روش‌های استاندارد برنامه‌نویسی را از آن‌ها یاد می‌گیرم. همچنین کدهای جنگو به صورت جداگانه در مستندات آورده شده تا حتی بتوانید شیوه عملکرد هر قسمت از کد را متوجه شوید. دانستن شیوه عملکرد برای برنامه‌نویسان پیشرفته مهم است. این دانش، کارهای تکراری را کم و کمتر می‌کند.

حس خوب جنگو

از همه این‌ها که بگذرم، جنگو حس خوب برنامه‌نویسی وب را می‌دهد. معماری و روش‌های پیشبینی شده آن معمولا من را شگفت‌زده می‌کند. سامانه گزارش خطای جنگو، بسیار قدرتمند عمل می‌کند و برنامه‌نویسان علاقه‌مند جنگو، همواره هوشمندانه آماده همکاری در رفع خطاها هستند. سیستم پشتیبانی جنگو فرهنگ پیشرفته‌ای دارد. در لیست ایمیل آن (Mailing List) می‌توانید هر روز پرسش‌های جالب کاربران را مشاهده کنید و در آن‌ها مشارکت کنید. و همین‌طور در لیست ایمیل توسعه جنگو عضو شوید و در روند توسعه جنگو همکاری کنید.

فکر می‌کنم تا اینجا برای نوشتنم درباره کلیات جنگو کافی باشد. بسیار خوشحالم می‌کنید اگر نظرات ارزشمند خودتون رو (پرسش/پیشنهاد/انتقاد) در پایین این مقاله بنویسید.
در مقالات آینده در مورد روش توسعه در جنگو می‌نویسم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *