مقایسه سه مورد از فریم ورک های پایتون
امروز می خواهیم در ادامه مقاله مقایسه جنگو با فلاسک و پایرامید قسمت دوم تفاوت فریم ورک های پایتون ، را با هم بررسی کنیم. مواردی که در این مقاله مورد توجه قرار میدهیم، تفاوت تمپلیتسازی در این سه فریم ورک و بررسی تفاوت های یک برنامهی نمونه برای آن هاست.

تمپلیت سازی
داشتن یک برنامهی نوشته شده در پایتون که درخواست های HTTP را پاسخگو است؛ به خودی خود شروع بسیار خوبی است، اما خیلی از کاربران ممکن است تمایلی برای استفاده از Curl برای برقراری ارتباط با برنامهی شما نداشته باشند. خوشبختانه، هر سه فریم ورک مورد بحث در این مقاله دارای امکاناتی برای پرکردن HTML هستند.
تمپلیت سازی به شما اجازه می دهد تا اطلاعات پویا را به شکل مستقیم بدون استفاده از درخواست های AJAX به صفحه ی خود وارد کنید. این موضوع از نظر تجربه کاربری بسیار خوب است چون این بدان معنی است که شما با یک دور در سایت تمامی اطلاعات را دریافت خواهید نمود. این رویه مخصوصا برای سایت های موبایلی و بستر های موبایلی بسیار مفید می باشد.
تمامی گزینه های تمپلیت سازی که بر روی یک “Context” دیده می شود اطلاعات پویا را برای رندر شدن در HTML ارائه می کند. ساده ترین کاربرد یک تمپلیت ورود و دریافت یک نام کاربری است. ممکن است درخواست های Ajax برای این کار مورد استفاده قرار بگیرند اما فرمان کامل آن درمقایسه با تمپلیت ها بسیار سنگین و پیچیده خواهد بود.
جنگو
مثال مورد استفادهی ما خیلی راحت است. فرض کنید یک شی User دارم که Fullname با نام کاربری کامل دارد. در پایتون ما اطلاعات کاربر را به شکل زیر به یک تمپلیت منتقل می کنیم:

این کار براحتی منتقل کردن یک دیکشنری از اشیای پایتون و ساختار هایی داده ای است. حالا باید نام آن ها در صفحه رندر شود :

در ابتدا، می بینید که ساختار {% if user }%} را می بینید که در جنگو {% کنترل کننده ی جملات حلقه ها و شرطی است. اگر جمله ی If user درست باشد، کاربران ناشناس نمی توانند ” you are logged in as” را بالای سایت ببینند.
در این بلوک if، می بینید که قراردادن اسم کار بسیار ساده ای است و فقط باید آن را در {{}} نوشت. از }} برای قراردادن مقادیر صحیح در تمپلیت استفاده می شود، مثل: {{ usr.fullname }}
یکی دیگر از استفاده های کاربردی تمپلیت ها نشان دادن گروه های اشیا است مثل یک صفحه ی فروش برای یک سایت تجارت اینترنتی:

مقالات مرتبط: مقایسه جنگو و وردپرس
در این تمپلیت می توانیم از همان {% برای حلقه کردن تمامی آیتم ها در لیست فروش استفاده کنیم و URL را نسبت به صفحات مرتبط کامل کنیم.

برای رسیدن به اکثر اهداف یک تمپلیت در جنگو ساختار های بسیار کمی وجود دارند و این شروع کار را بسیار ساده تر کرده است.
Flask
Flask از زبان الهام گرفته از جنگو با نام jinja2 برای تمپلیت سازی به شکل پیش فرض استفاده می کند که البته می توان آن را تغییر داد. یک برنامه نویس که عجله دارد میتواند تمپلیتهای جنگو وjinja را ترکیب کند. هر دو تمپلیت در jinja قابل اجرا هستند. به جای نشان دادن مثال های متعدد بیایید بررسی کنیم که تمپلیتهای jinja در چه جاهایی خود را بهتر از جنگو نشان می دهند.
هم تمپلیت های جنگو و هم Jinja دارای یک ویژگی به نام فیلترینگ هستند که در آن یک لیست قبل از نمایش داده شدن از یک تابع می گذرد. یک بلاگ که نشان دهنده ی دسته بندی های مختلف از پست هاست می تواند انواع مختلف پست را ثبل از نمایش با کمک لیست های جدا شده با ویرگول فیلتر کند.

در زبان تمپلیت سازی jinja می توان از یک سری Argument آرگیومنتها برای فیلتر کردن استفاده کرد. جنگو از دو نقطه برای جدا کردن نام فیلتر و آرگیومنت استفاده می کند ولی در jinja از پرانتر استفاده می شود.
جنگو و jinja دارای حلقه های for مشابهی هستند. بیایید تفاوت آن ها را با هم مشاهده کنیم:

هر دو شبیه به هم هستند ولی جنگو از for-empty-endfor به جای for-else-endfor استفاده می کند.

Pyramid
مثل Flask ،Pyrmaid نیز زبان های تمپلیت سازی مختلف را پشتیبانی می کند.این فریم ورک به شکل پیش فرض از Chameleon استفاده میکند. بیایید یک مثال را با هم بررسی کنیم. کدهای پایتونبرای اضافه کردن نام کاربری در بالای سایت به شکل زیر است.

اما تمپلیت ما کمی فرق می کند. Chameleon با یک استاندارد XML کار می کند پس از جملات شبیه به XSLT برای تغییر داده ها استفاده می کند.

Chameloen در حقیقت سه کار مختلف برای تمپلیت انجام می دهد. TAL جملات شرطی و فیلتر تگ ها را انجام می دهد. TALES عبارت هایی برای فرمت جمله ها و ارزیابی عبارت های پایتون انجام می دهد و METAL برای کار های پشرفته تر مورد استفاده قرار می گیرد.
فریم ورک ها در عمل
برای هر فریم یک برنامه ی نمونه را مورد بررسی قرار میدهیم. نام این برنامه wut4lunch یک شبکه ی اجتماعی است که به اینترنت می گوید کاربر ناهار چه خورده است. این برنامه رابطی ساده دارد که به افراد امکان می دهد آن چه برای ناهار خورده اند را به شکل پست بگذارند. صفحه ی اصلی مثل شکل زیر است:

بیشتر بخوانید: ویژگی های اصلی جنگو، مزایای جنگو، طراحی مدل در جنگو
این برنامه با Flask
یک خط ساده jinja برای تمپلیت، در ابتدای برنامه معرفی و ORM آن را دریافت می کنیم:

حالا نگاهی به مدل می اندازیم، که برای دو مثال دیگر هم مشابه خواهد بود:

فیلد Secret_Key برای داده های Cookies مورد استفاده قرار می گیرد:

برای نشان دادن فرم در مرورگر باید آن را به شکل زیر در تمپلیت قرار دهیم:

برای ساده تر شدن متغیر ها با نام مشابه درون تمپلیت قرار می گیرند که نیازی برای این کار در حالت کلی نیست.

بخش form فقط لیبل ها و ورودی ها را در تمپلیت رندر می کند و آن ها را به ()root می برد. وقتی که فرم وادرد شوند پست برای پردازش وارد تابع زیر خواهد شد:

حالا فقط باید برنامه اجرا شود و داده ها وارد شوند:

برنامه ی نمونه در جنگو
نسخه ی جنگو شبیه به Flask است اما در فایل های مختلفی قرار می گیرند. در ابتدا بخش های مشابه را در نظر میگیریم.فقط کمی تفاوت در Syntax دیده میشود:

بر خلاف Flask، جنگو دارای یک سیستم تعبیه شده درون خود می باشد که شبیه به فرمهای WT در Flask می باشد:

حالا باید مثال lunchfrom درون تمپلیت قرار گیرد:

نهایتا تفاوت تمپلیت در صفحه ی اصلی به شکل زیر خواهد بود :

برنامه ی نمونه با Pyramid
در نهایت، این برنامه ی نمونه را در Pyramid بررسی می کنیم. مهم ترین اختلاف در تمپلیت سازی است. تغییر تمپلیت jinja مشکل ما را درجنگو حل کرد ولی در Pyrami Syntax ،Chameloen بیشتر شبیه به jinja است.

یکی از نقاط قوت تمپلیت سازی در Chameleon آن است که شما می توانید برنامه ی ویرایش آن را انتخاب کنید. این به خاطر طبیعتXHTML کد ها است. در جنگو و Flask این امکان وجود نداشت.
حالا فرم مورد نیاز برای رندر کردن صفحه ی اصلی سایت را با هم بررسی می کنیم:

داده های فرم را به راحتی می توان با یک شی در Pyramid دریافت کرد که به شکل خودکار به dict منتقل خواهند شد. برای جلوگیری از تجمع داده ها، اختلال آن ها در یک زمان، context manager یا مدیر متن در اختیار کاربران قرار گرفته است. این ابزار رشته های ارتباطی داده ها را برای شما مشخص می کند تا در صورت مشکل بتوانید آنها را یافته و ویرایش کنید.
نتیجه گیری :
Pyramid در بین سه برنامه انعطاف بیشتری دارد. میتوان از آن برای برنامه های کوچک و بزرگ استفاده کرد. جوامع متن باز مثل Fedora از Pyramid استفاده میکنند. البته یکی از شکایت هایی که در زمینه Pyramid وجود دارد وجود گزینه های زیاد در آن است که کار را برای شروع کمی گیج کننده می کند.
تا این جای کار، محبوب ترین فریم ورک جنگو است. سایت های معروفی هم چون اینستاگرام، Bitbucket و چند سایت دیگر از آن استفاده می کنند. برای سایتهایی که نیازی های مشابهی دارند جنگوامکانات فراوانی دارد و به همین دلیل سایت های بزرگ و چند بخشی از آن استفاده می کنند.
Flask برای برنامه نویسانی که بر روی پروژه های کوچک کار میکنند، مناسب است. ابزار های جمع و جور و رابط سادهی آن و Api های پیش فرضی که دارد تنظیمات بسیار کمی دارند.
هر سه فریم ورک مزیت هایی برای نیازمندی های خاص کاربران دارند. تفاوت های آن ها بیشتر در زمینه ی طراحی محصول نهایی و سرعت کار و ویژگی های مورد نیاز می باشند. به خاطر این که مثال مورد استفاده در این مقاله کوچک بود Flask ممکن است به چشم خواننده ی این مقاله گزینه ی بهتری باشد. به دلیل این که نیازخاصی نبود انعطاف پذیری Pyramid به چشم نیامد ولی در دنیای واقعی کار به این سادگی نیست.
منبع: لرن فایلز