بسیاری از افراد از فریمورک Django یا Flask استفاده میکنند. برخی حتی نسبت به این فریمورکها برای ایجاد REST API تعصب شدیدی دارند. چندی پیش تعدادی از توسعهدهندهها فریمورک انتخابی خود را از فلسک به جنگو تغییر دادهاند. با مطالعه این مقاله، ممکن است فریمورک انتخابی شما هم تغییر یابد! مزایای جنگو نسبت به فلسک چیست؟
قبل از مطالعه ادامه این مقاله، پیش از این در همرویش آموزش جنگو از صفر منتشر شد. برای آشنایی با این دور پیشنهاد میکنم فیلم معرفی دوره آموزش جنگو را در زیر ببینید:
برای دریافت بسته کامل آموزش جنگو (+) کلیک کنید.
Django ORM درون و بیرون پایگاه داده را میداند!
اگر از فلسک استفاده میکنید، به احتمال سعی داشتید از عملکردهایی که نیاز به داده و در نتیجه پایگاهداده دارند، استفاده کنید. احتمالا پایگاهدادهای که با آن شروع به کار کردهاید نیز SQLite بوده باشد. پیکربندی پایگاهداده در Flask کمی گیجکننده یا حداقل وقتگیر به نظر میرسد. به همین دلیل برای مدیریت اتصال پایگاهداده، میتوان از ORMای مانند SQLAlchemy استفاده شود. مگر اینکه خودتان بخواهید از f-string ها برای نوشتن کوئریهای SQL استفاده کنید (که در این صورت امیدواریم موفق باشید!).
اگر شروع کارتان با SQLite بوده است، هنگامی که به چیزی حرفهای تر مانند MySQL یا PostgreSQL نیاز داشته باشید، برای تغییر آن با مشکل مواجه خواهید شد.
اما در جنگو اتصال SQL به صورت خودکار انجام میشود. تنها باید مستنداتی را دنبال کنید که نشان میدهد به کدام موتور پایگاه داده نیاز دارید (مستندات موتور پایگاهداده مورد نیاز). هر دیتابیسی که نیاز داشته باشید؛ مانند:MySQL ،PostgreSQL ،MariaDB ،Oracle یا حتی SQLite. سپس موتور پایگاه داده، اتصال را مدیریت میکند.
هم رویش منتشر کرده است:
آموزش ساخت فروشگاه با جنگو و ری اکت ــ فصل ۱: فرانت اند با React
در صورتی که به جداول در پایگاه داده نیاز داشته باشید، اگر با کلاسهای اولیه پایتون آشنا باشید، تمام آنچه که لازم است را دارید! برای ایجاد جداول نیازی به نوشتن کوئری نیست! تنها باید یک کلاس تعیین کنید که از django.db.models.Model ارثبری میکند. از مدل برای تعریف جداول پایگاهداده استفاده میشود. همچنین مدل برای صفات کلاس برای تعریف انواع ستونهای ممکن به صورت سفارشی، این امکان را میدهد تا ویژگیهای تک خطی مانند موارد زیر را دنبال کنید.
ویژگیهای تک خطی
- فیلدهای اعداد صحیح (integer)، کاراکتر، متن، بولین، چندگزینهای، اعداد اعشاری … و برای PostgreSQL، حتی نیز JSONField.
- مدیریت کلیدهای خارجی (Foreign key) : برای دانستن اینکه وقتی مدل مربوطه حذف میشود، چه اتفاقی برای یک رابطه میافتد (اما هیچ رابطه دیگری از بین نمیرود!).
- استفاده مجدد از تعریف ستون: فقط باید فیلدها را به عنوان توابع ایجاد کنید. سپس برای تعریف ستونهای مدل جدید آنها را فراخوانی کنید!
- وراثت مدل (Model) بهطرز قدرتمندی از طریق وراثت کلاس پایتون مدیریت میشود( در اینجا نیز ممکن است با برخی مشکلات مواجه شوید. اما با مطالعه داکیومنتهای مناسب میتوان از آنها جلوگیری و همچنین در صورت نیاز حل نمود).
مشکلات این ویژگیها با استفاده از SQLAlchemy رفع شدهاند. اما باز هم این کار وقت تلف کردن بهنظر میرسد.
پوسته جنگو (Django shell): داستان کوتاهی در مورد Django Managers
فرض کنید مسئول پایگاه داده در یک شرکت هستید. در جلسهای که برگزار میشود، همکارانتان در مورد موضوعات مربوط به کار بحث میکنند. آنان گزارشهای تجزیه و تحلیل کسب و کار را هنوز دریافت نکرده اند. به همین دلیل ناراضی هستند. چون قبل از اتخاذ یک تصمیم مهم، باید پاسخ یک سوال خاص در مورد دادههای فروش را بدانند.
فرض کنید در آن جلسه شما هنوز با لباس خواب هستید. وبکم را هم بخاطر اینکه آماده نیستید روشن نکردهاید. اما میدانید چگونه پاسخ آن سوال را پیدا کنید. زیرا این شما هستید که میدانید دادهها کجا هستند. در ادیتور VSCode خود، “python management.py shell” را در ترمینال باز میکنید. سپس به پوسته جنگو (Django shell) متصل میشوید.
در دو خط کوتاه کد، مدل (Django Model) را که شامل سفارشات است، وارد میکنید. سپس به عنوان مدیر مدل خود با استفاده از django-pandas، یک دیتافریم را مستقیماً از مدل خود ایجاد میکنید. با این کار، در ایجاد پرس و جوهای SQL، بارگیری تمام دادههای فروش و تبدیل هر چیزی به دیتافریم نظارت و مراقبت میکند.
در گام بعدی matplotlib را وارد میکنید. متد “hist” را بر روی مجموعه pandas خود برای فروش اعمال میکنید. سپس ()plt.show را تایپ میکنید. در آخر هم از آن یک اسکرینشات میگیرید و به جلسه ارسال میکنید. قبل از اینکه همکاران شما حتی به این فکر کنند که از چه کسی این دادهها را بخواهند، فروش کل سال را جلو روی خود میبینند.
آیا میتوانید به راه اندازی این چنینی با Flask و SQLAlchemy حتی فکر کنید؟
Django Managers راهی است که به وسیله آن میتوانید کوئریهای SQL خود را از پیشتر بنویسند. همچنین میتوان دادهها را به هر نوع مختلفی تبدیل کرد تا هر زمان که بخواهید فقط با یک دستور در ترمینال آن را اجرا کنید. البته هیچ چیز شما را از قرار دادن این دستورات در نقاط پایانی REST API برای ارائه دادههای پردازش شده به کاربران نهایی باز نمی دارد! Django manager میتواند کد پایتون را خودسرانه اجرا کند. بنابراین حتی میتواند در نقاط انتهایی API قرار گرفته و در صورت تمایل، دادهها یا تصاویر را به وب سرور ارسال کند ( در صورت نیاز به استفاده مجدد از چنین ویژگی).
اختراع مجدد چرخ را با جنگو متوقف کنید.
این روزها اکثر مشکلات برنامه نویسی وب حل شده است. این بدان معنا نیست که اگر سعی دارید یک مجموعه فناوری ایجاد کنید، مجبور نخواهید بود راهحلهایی را برای این مشکلات پیادهسازی کنید. در Flask، پیاده سازی به عهده شماست! که این به معنای کد نویسی زیادی است. در نهایت برای مدیریت موارد زیر، کد مینویسید.
- پرسشهای پایگاه داده (مانند مباحثی که در قبل توضیح داده شد. همچنین در مورد صفحه بندی، کوئریهای ذخیرهسازی و غیره)
- سیستمهای احراز هویت
- مدیریت نقاط پایانی (مجوزها، منابع، کنترل کردن و غیره)
- راه اندازی پیکربندی
- سریالسازی دادههای SQL و دی سریالسازی کردن دادههای درخواست HTTP
- اعتبار دادههای درخواست برای جلوگیری از خراب شدن پایگاه داده
- و …
این مشکلات را در جنگو با نوشتن کد حل نمیکنند. بلکه راهحلهایی که از قبل پیادهسازی شدهاند را با نوشتن پیکربندی که عملکرد را توصیف میکند، انتخاب میکنند. این ویژگی یک مزیت عمده دارد. آن هم این است که، نیازی نیست مشکلاتی که از قبل حل شدهاند را خودتان حل کنید. تنها باید راه حل مناسب مشکل خود را از اکوسیستم جنگو انتخاب کنید.
فریمورک جنگو در صورت وجود مشکل به توسعهدهنده به خوبی راه حلی را ارائه میدهد، که هم قابل نگهداری و هم بهروز باشد. این راهحل باید انعطافپذیری کافی را برای پیکربندی مشکل، بر اساس نیازهای توسعهدهنده ایجاد کند. اما این را هم باید در نظر داشت که میزان منعطف بودن آن نباید بیش از اندازه باشد. زیرا تغییر و اصلاح زیاد باعث به وجود آمدن مشکل برای توسعهدهنده میشود.
شاید شما هم این تجربه را داشته باشید که، هر بار سعی میکنید جنگو را بیش از حد تغییر دهید، با یک مشکل بسیار جدید روبرو میشوید (ممکن است در مباحث علم داده اتفاق بیفتد، اما معمولاً به ندرت است). همچنین به منزله انجام اشتباه در مقایسه با بهترین شیوههایی که برای جنگو وجود دارد، است.
کد خود را به روشی معنیدار سازماندهی کنید.
جنگو سیستم فوقالعادهای از پروژهها و برنامهها دارد. این ویژگی به سازماندهی و استفاده مجدد از کد کمک میکند. جنگو دارای اکوسیستم بزرگی از برنامههایی با قابلیت استفاده مجدد است. بنابراین میتوانید ویژگیهایی را به برنامه خود اضافه کنید (مانند: احراز هویت، Django REST Framework برای تبدیل برنامه جنگو خود به یک API تمام عیار، تشکیل کامپوننت UI برای تمپلتهای Django، تبدیل مدلهای پایگاهداده خود به دیتافریمهای pandas با django-pandas).
اگر خود شما هم یک قابلیت مفید جدید پیدا کنید، میتوانید برنامه جنگو خود را به عنوان یک برنامه منبع باز منتشر کنید. همچنین به مردم اجازه دهید در پروژه خودشان از آن استفاده کنند. این قابلیت جنگو، این فریمورک را به یک فریمورک بسیار قدرتمند تبدیل کرده است.
برای بکاند پروژه از Django استفاده کنید. سپس هر فریمورک فرانت اندی را که میخواهید در مقابل آن قرار دهید!
در مورد جنگو باید به یک نکته کوچک اشاره کرد:
جنگو یک فریمورک داخلی فرانت اند به نام جنگو تمپلت (Django templates) دارد. اما در واقع فریمورک نامناسبی برای وبسایتهایی است که عملکردهای زیادی را مدیریت میکنند. وقتی وبسایتهای جنگو را نگاه میکنید، نتایج خوبی را در خود صفحه وب از نظر بصری مشاهده میکنید. اما کد آن معمولاً از حرفهای بودن فاصله دارد. صحبت ما، فایلهای بزرگ HTML و تگهای اسکریپت برای استفاده از هر جاوا اسکریپت خارجی است که مدیریت کد شما را بسیار سخت میکند.
هم رویش منتشر کرده است:
آموزش فرانت اند پروژه محور __ طراحی سایت با HTML و CSS و Bootstrap
مشکل فرانت اند با فریمورکهای جاوا اسکریپت مانند React ،Angular ،Vue ،Ember و غیره حل شده است. ویژگی مشترکی که در این فریمورکها وجود دارد، این است که: همه آنها مبتنی بر جاوا اسکریپت هستند. زیرا مرورگر در جاوا اسکریپت کار میکند.
بنابراین مزایای زیادی را برای بهینهسازی به همراه دارد. با انجام کارهایی در Python و معادل Django از Jinja2، بسیاری از قابلیتهای موجود در حال حاضر بهعنوان کتابخانههای منبعباز نمیتوانند در فرانتاند استفاده شوند. به همین علت باید دوباره در جنگو نوشته شوند.
اما نگران نباشید! Front-end حداقل تا 10 سال آینده، فقط در JavaScript انجام میشود. زیرا مرورگرها فقط از آن استفاده میکنند. به طبع هم کد در مرورگر اجرا میشود. بنابراین شما میتوانید بکاند خود را به یک API بکاند همراه با Django REST Framework (که همان چیزی است که در مرحله اول آن را برای Flask رقابتی میکند!) تبدیل کنید.
سپس هرگونه فریمورک فرانتاند دلخواهی را بکار بگیرید. به همین دلیل انتخابهای زیادی خواهید داشت. اما با وجود گزینههای زیاد، هر کدام مزایا و معایب خود را دارند!
امیدواریم با مطالعه این مقاله، انگیزه استفاده از جنگو را پیدا کرده باشید و آن را امتحان کنید.
کلیدواژگان
ویژگی های جنگو | ویژگی جنگو | ویژگی django | درباره جنگو | درباره django | جنگو یا فلسک | django یا flask | فلسک یا جنگو | flask یا django | جنگو بهتر است یا فلسک | فلسک بهتر است یا جنگو | flask بهتر است یا django | جنگو یا فلسک | مزایای جنگو نسبت به فلسک | مزایای جنگو | مزایای django | مزایای جنگو چیست | مزایای django چیست | مزایای django نسبت به flask
منبع
Why you should choose Django over Flask for your next API project