مقایسه فریم ورک جنگو با فلاسک و پایرامید
بلاگ آکادمی لرن فایلز
تخفیف ویژه حمایت از متخصصین و کسبوکارهای آسیب دیده
دریافتبلاگ آکادمی لرن فایلز
دنیای فریم ورک های پایتون گزینه های زیادی دارد. جنگو، Flask ،Pyramid ،Tornado ،bottle ،Diesel ،Falcon و خیلی موارد دیگر که دست برنامه نویس را باز نگه میدارد. به عنوان یک برنامه نویس، شما می توانید برای اتمام پروژه ی خود به شکل عالی بهترین گزینه ی را انتخاب کنید. ما در این مقاله بر روی Flask ،Pyramid و جنگو متمرکز و مقایسهای بین آنها خواهیم داشت. نمونه های مختلف این برنامه ها از پروژه ای خرد تا سرویس های کامپیوتری و تحت وب تنوع دارند.
برای راحت تر شدن انتخاب بین این سه گزینه، ما یک برنامه ی مشابه را در هر سه فریم ورک نوشته و کد ها آن را با هم مقایسه می کنیم. نقاط ضعف و قوت هر کدام از این فریم ورک ها مشخص می شود. اگر می خواهید به کد های این مقاله دسترسی کامل داشته باشید در Github و در لینک زیر مشاهده کنید:
https://github.com/ryansb/wut4lunch_demos
Flask یک فریم ورک میکرو خوانده می شود که برای برنامه های کوچک و سادهتر طراحی شده است. Pyrmaid و جنگو هر دو برای برنامه های بزرگ طراحی شدهاند ولی روش های مختلفی برای گسترش و انعطاف پذیری دارند. Pyramid به برنامه نویس کمک می کند تا ابزار مناسب را برای پروژهاش انتخاب کند. این بدان معنی است که برنامه نویس می تواند پایگاه داده ای، ساختارURL، استایل تمپلیت ها و غیره را انتخاب کند. جنگو تمامی گزینههای لازم برای یک برنامهی تحت وب را ارائه می کند و در هنگام شورع و کار با برنامه نیز آن را تنها نذاشته و ماژول های مناسب را همیشه ارائه می کند.
جنگو در خود یک ORM دارد ولی Pyramid و Flask انتخاب این گزینه را به برنامه نویس می سپارند. محبوبترین ORM برای کسانی که از جنگو استفاده نمیکنند SQLAlchemy است ولی گزینه های زیاد دیگری نیز شبیه به SQLLite وجود دارند. Pyramid طوری طراحی شده است که می تواند لایه های مختلفی را مورد استفاده قرار دهند؛ حتی لایه هایی که هنوز طراحی نشده اند.
جنگو، کار برنامه نویسانی که با پایتون آشنایی دارند را برای طراحی برنامه های تحت وب بسیار راحت تر کرده است. جنگو در خود فرم(Form)، روتینگ(Routing)، مدیریت پایگاه داده ای ، تمپلیت ها و ویژگی ها تعبیه شده ی زیادی دارد. در عوض، Pyramid سیستم ورود کاربر به سیستم و روتینگ دارد ولی تمپلیت ها و مدیریت پایگاه دادهای را با کمک کتابخانه های خارجی برای برنامه نویس فراهم خواهد نمود. این نبود ویژگی های تعبیه شده به برنامه نویس این آزادی عمل را می دهد تا خودش ORM های مورد نظر را انتخاب کرده و بتواند با سیستم های تمپلیت سازی مختلفی کار کند. این دو مورد در Flask و Pyrmaid عملی شده اند.
Flask، جوان تر از دو فریم ورک دیگر است و در سال ۲۰۱۰ شروع به کار کرده است. فریم ورک Pyramid زندگی خود را در Pylons Project آغاز کرده و نام خود را بعد از تولید اولیه در سال ۲۰۰۵ در سال ۲۰۱۰ دریافت کرد. جنگو در سال ۲۰۰۶ ارائه شد. جنگو و Pyramid فریم ورک هایی بالغ هستند و در طول زمان توانسته اند پلاگین ها و افزونه های مورد نیاز برای کارهای مختلف را ارائه کنند.
اگرچه Flask تایخچه ی کوتاه تری دارد، با توجه به درس هایی که از فریم ورک های دیگر آموخته توانسته کار خود را برای برنامه های کوچک به ثبات کامل برساند. این فریم ورک در پروژه های کوچک و با یک یا دو کاربری مورد استفاده قرار می گیرد. یکی از این پروژه ها Httpbin است که برنامه ای قوی و کوچک برای خطایابی و تست کتابخانه های URL می باشد.
جامعه
جایزه ی فعالترین جامعه برنامه نویس به جنگو اختصاص پیدا می کند که ۸۰ هزار سوال فعال در StackOverFlow دارد و مجموعه ای از بلاگ ها توسط برنامهنویس ها و کاربران آن در اینترنت فعال هستند. Flask و Pyramid به این بزرگی نیستند ولی جوامع آن ها در IRC و لیست های ایمیلی بسیار فعال می باشند. Flask با ۵ هزار سوال در StackOverFlow خیلی کمتر از جنگو است ولی تعداد ستاره های این دو فریم در Github تقریبا برابر است( ۱۱۳۰۰برای جنگو و ۱۰۹۰۰برای Flask).
جنگو و Pyramid هر دو ابزار های bootstrap را در خود تعبیه کرده اند. Flask به دلیل این که برای برنامه های کوچک طراحی شده و مخاطبین آن نیازی به ساخت MVC های بزرگ ندارند، این ویژگی را ندارد.
برنامه Hello world در Flask ساده ترین برنامه پایتون است که در یک فایل تکی با فقط ۷خط کدنویسی نوشته شده است:
این نمونه دلیل اصلی عدم وجود Bootstrapping در Flask است چون که نیازی به آن ها نیست. با کمک این برنامه در صفحه ی اصلی Flask یک برنامه نویس که حتی تجربه ای در برنامه نویسی تحت وب پایتون ندارد براحتی شروع به هک می کند.
برای پروژه هایی که نیاز به جداسازی بین Component ها دارد، Flask دارای ویژگی Blueprints می باشد. برای مثال ، شما می توانید برنامه های کاربر محور Flask خود را در Users.py و برنامه های فروش محور را در Ecommerce.py ساختار بندی کرده و سپس آنها را به برنامه خود در Site.py اضافه کنید. ما در این مقال وارد جزییات این کاربری از Flask نخواهیم شد.
ابزار های bootstrapping در Pyramid به شکل Pcreate خوانده می شوند که بخشی از Pyramid است. قبلا این کار از طریق مجموعه ابزار Paste انجام میشد اما هم اکنون ایم ابزار در خود Pyramid تعبیه شده است.
Pyramid برای برنامه های بزرگ تر و پیچیده تر طراحی شده است. به همین دلیل ابزار Bootstrapping در آن قرار داده شده است. هم چنین این فریم ورک دارای تمپلیت های نمونه و فایل هایی برای جمع بندی برنامه و ارسال آن به Python Package Index میباشد.
در سایر بخش های برنامه Bootstarpping کاملا اتعطاف پذیر است. یعنی فقط محدود به یک برنامه نیست. Pcreate می تواند از چند تمپلیت در پروژه استفاده کند. بر رویPyPi، می توان قالب های آماده برای Google app Engineو JqueryMobile و فریم های به روز دیگر پیدا نمود.
جنگو Bootstrapping خود را به عنوان بخشی از django-admin ارائه می کند:
همین الان می توانید یکی از تفاوت های جنگو و Pyramid را ببینید. جنگو یک پروژه را به چند برنامه ی مجزا تقسیم می کند در حالی که در Flask و Pyramid، پروژه به شکل یک برنامه در نظر گرفته می شود. می توان بین پروژه و یک برنامه در این فریم ورک ها اختلاف ایجاد کرد ولی این ویژگی به شکل پیش فرض فقط در جنگو وجود دارد.
به شکل پیش فرض, جنگو فقط تمپلیت ها و مدل های خالی دارد و یک کاربر تازه کار نمونه های کم تری در دسترس دارد. این یعنی انتخاب نوع توزیع و کار با برنامه کاملا در اختیار کاربر است.
یکی از مشکلات ابزار Bootstrapping آن است که کاربران تازه کار نمی توانند برنامه های خود را به شکل پکیج دسته بندی کنند. یعنی اگر کاربر تجربه قبلی در این زمینه نداشته باشد در اولین اجرای برنامه با مشکلات زیادی برخورد خواهد کرد. پروژه های بزرگ مثل django-oscar پکیچ شده و در Github در اختیار کاربران هستند اما پروژه های خاص تر و کوچک تر این امتیاز را ندارند.
در این مقاله نگاهی کوتاهی به سه فریم ورک معروف و محبوب پایتون انداخته و بخشی از ویژگی های اولیه ی آن ها را با هم مقایسه کردیم. جنگو و Pyramid برای پروژه های بزرگ تر و پیچیده تر طراحی شده اند و نسبت به Flask سابقهی بیشتری دارند و به همین دلیل است که ابزارهای لازم برای پروژه های بزرگ مثل Bootstrapping را در خود جای داده اند. Flask بسیار ساده تر است و برای برنامه های کوچک یا یک یا دو کاربری ساخته شده است. برای آگاهی بیشتر نسبت به تفاوت ها و شباهت های این سه فریم ورک، ما را در بخش های بعدی این مقاله دنبال کنید.