آموزش مقدماتی فلسک (Flask)

Flask, web development one drop at a time

نویسندگان ‌: محیا مهدیان و محمد حسن ستاریان

مقدمه و آشنایی

فلسک یک فریم‌ورک وب مبتنی بر پایتون است برای ایجاد سریع و ساده وب‌سرور که توسط آرمین‌روناچر توسعه داده‌شده است. تلاش برای ساده‌نگه داشتن طراحی فلسک و کوچکی فریم‌ورک و قائل نشدن بسیاری از پیش‌فرض ها برای برنامه‌نویسان دلیلی‌است که این بسته‌نرم افزار را یک میکروفریم‌ورک می‌نامند. فلسک رایگان و متن‌باز بوده و  با مجوز آزاد BSD منتشر شده است.

کار با فلسک به قدری ساده است که اگر کمی با زبان پایتون آشنا باشید با دیدن اولین کدهای فلسک با ساختار این فریم‌ورک آشنا می‌شوید. فریم‌ورک فلسک با همه‌ی سادگی خود بسیار قدرتمند و کاراست و به هیچ عنوان کوچک بودن فریم‌ورک را نمی‌توان با ضعیف بودن آن برابر دانست و امکانات فریم‌ورک‌هایی مثل جنگو و ریلز را با اندکی جستوجو به دست می‌دهد. برای مثال از سرویس‌های بزرگی که از فلسک استفاده می‌کنند می‌توان از Pinterest و Linkedin نام برد که به مناسب بودن فلسک برای توسعه‌ی سرویس‌های اینترنتی اشاره دارد.

دو کتابخانه‌ی اساسی پایه‌‌های قدرتمند فلسک را ساخته‌اند؛ به عنوان واسط وب‌سرور ( WSGI ) از کتابخانه‌ی werkzeug و برای تمپلیت‌انجین از Jinja2 استفاده کرده اند که هردو کتابخانه توسط تیم توسعه ی فلسک توسعه یافته شده است.

بطور پیش‌فرض برای کار با دیتابیس‌ها، اعتبارسنجی فرم ها و کاربران و از این دست کارها ابزار مشخصی در فلسک تعریف نشده است و می‌توان از ابزار‌های شخص ثالث (Third party applications) که برای آن توسعه داده شده‌اند استفاده کرد.

نصب

آماده کردن محیط مجازی

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

نحوه ایجاد و فعال‌سازی محیط مجازی را از اینجا بخوانید.

نصب فلسک

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

برای بررسی صحت نصب فلسک مفسر پایتون را بصورت تعاملی در ترمینال باز کنید ( تنها دستور python را نوشته و  اینتر کنید ) و بسته‌ی فلسک را با دستور زیر فراخوانی کنید :

اگر خطایی رخ نداد فلسک درست نصب شده است و می‌توانید با اجرای دستور زیر نسخه نصب شده را بررسی کنید:

ساختار برنامه‌ها در فلسک

فلسک هیچ محدودیتی درمورد ساختاربندی فایل‌های پروژه برای شما ایجاد نمی‌کند و می‌توانید ساختار خودتان را داشته باشید یا از رول‌های متداول جامعه ی فلسک استفاده کنید.

ساخت برنامه های فلسک

شروع سریع

کدهای یک اپلیکیشن ساده‌ی فلسک که عبارت  Hello World  را در یک صفحه ی وب نمایان می‌کند بصورت زیر است :

این برنامه از چند بخش تشکیل شده است : فراخوانی و تعریف فلسک، تعریف مسیرها، اجرای فلسک.

فراخوانی و تعریف فلسک

برای ساخت برنامه‌های فلسک نیاز است ابتدا فلسک را در فایل پایتون خود لود کنید و سپس یک نمونه (instance) از Flask بسازید یعنی این بخش :

تنها آرگومان مورد نیاز برای کانستراکتور فلسک نام ماژول یا پکیج main است که برای بیشتر برنامه ها __name__ در پایتون مقدار درستی است.

می‌توانیم بجای نام اینستنس فلسک ( در مثال بالا app ) از هر نام متغیر معتبری استفاده کنیم.

فلسک روی pip یک بسته از ماژول‌های مرتبط به هم است و نه یک ماژول و به همین دلیل هر ماژول باید از درون بسته ی flask جداگانه ایمپورت بشود.

تعریف مسیرها

مسیرها همان آدرس‌های (url های) مختلفی هستند که عملیات‌های متفاوتی بر اساس آن‌‌ها انجام می‌شود. مثلا  site.domain  مسیر ریشه و  site.domain/subdomain  یک مسیر دیگر در همان سایت تعریف می‌کند. در کد مثال ما مسیر بصورت زیر تعریف شده بود :

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

اجرای فلسک

در آخر به پایتون می‌گوییم که فلسک را روی یک وب‌سرور اجرا کند که دستورات آن بصورت زیر است :

این شرط برای بررسی این موضوع است که آیا این فایل پایتون مستقیما اجرا می‌شود (برقراری شرط) و یا به عنوان یک ماژول در یک برنامه دیگر وارد شده است (عدم برقراری شرط).

این کد را در یک فایل مانند app.py ذخیره کرده و در خط فرمان با دستور  python app.py  اجرا کنید. خروجی روی ترمینال چیزی شبیه این است :

که آدرس 127.0.0.1:5000  را که در خروجی مشخص شده است اگر در مرورگر خود امتحان کنید روی صفحه عبارت Hello World  به صورت زیر نمایان می‌شود، (فلسک به صورت پیش‌فرض پورت ۵۰۰۰ را برای اجرا در نظر می‌گیرد):

تابع run می‌تواند پارامتر‌ ای با عنوان host  داشته باشد که مشخص می‌کند سرور برروی چه آدرسی اجرا شود، همچنین توسط پارامتر  port  می‌توان پورتی که سرور روی آن اجرا شود را مشخص کرد و توسط پارامتر  debug و دادن مقدار true  به آن می‌توان مشخص کرد که لاگ‌ها و گزارشات مربوط به اشکال یابی برنامه نیز چاپ شوند.

برای اینکه سرور از طریق کامپیوتر‌های متصل به همین شبکه قابل مشاهده و استفاده باشد به پارامتر  host  مقدار 0.0.0.0  را می‌دهیم.

توجه کنید که پارامتر host از جنس string، پارامتر port از جنس integer و پارامتر debug از جنس boolean است.

برنامه‌های کاربردی‌تر

استفاده از متغیرها در آدرس

در تعریف قوانین آدرس‌دهی می‌توان به آدرس‌ها با استفاده از عملگرهای <>  متغیر اضافه کرد مانند  <variable_name>  تا بخشی از آدرس به صورت متغیر توسط تابع در دسترس باشد.همچنین می‌توان نوع متغیر را با استفاده از یک مبدل مانند  <converter:variable_name>  مشخص کرد:

نوع پیش‌فرص برای متغیرها string  است.

آدرس‌های منحصر به فرد و هدایت آدرس

به نحوه آدرس دهی در برنامه زیر دقت کنید:

آدرس تعریف شده برای  projects  شبیه آدرس دایرکتوی است و در انتهای خود یک ‘/’ دارد. اگر به این آدرس بدون ‘/’ برویم فلسک ما را به آدرس اصلی (آدرس با ‘/’) هدایت می‌کند.

آدرس تعریف شده برای  about  شبیه آدرس فایل است و در انتهای خود ‘/’ ندارد.  اگر به این آدرس با ‘/’ برویم با خطای ۴۰۴ (صفحه‌ای یافت نشد) مواجه خواهیم شد. این امر این امکان را می‌دهد تا آدرس‌های تعریف شده به این سبک منحصر به فرد بوده و کمک می‌کند موتورهای جستوجو یک صفحه را دوبار ایندکس نکنند.

متدهای HTTP

برنامه‌ها هنگام دسترسی به آدرس‌ها از متد‌های HTTP مختلفی استفاده می‌کنند. به صورت پیش‌فرض یک آدرس تنها به متد GET  پاسخ می‌دهد، اما با استفاده از مشخص کردن متدهای لازم در پارامتر methods  از دکوریتور ()route  می‌توان به متدهای مختلف پاسخ داد:

در کد با بررسی نوع (method) درخواست (request) عملیات متفاوتی انجام می‌شود. این بدین معنی است که اگر به یک آدرس با متد GET درخواست بدیم یک پاسخ و اگر به همان صفحه با متد دیگری مانند POST درخواست بدیم پاسخ دیگری دریافت خواهیم کرد.

استفاده از قالب‌ها (templates)

می‌توان مشخص کرد با مراجعه به صفحه‌ای یک فایل HTML رندر شده و به نمایش درآید. برای اینکار فلسک از فولدربندی خاصی استفاده می‌کند. در فولدر پروژه باید دو فولدر به نام های static و templates ایجاد کنید که در فولدر templates فایل های html و در فولدر static فایل های css و js خودتون رو قرار بدهید.

حال  اگر کاربر به صفحه welcome/ برود فانکشن به جای متن خالی، فایل HTML رو return می‌کند. توجه داشته باشید که این فایل HTML باید داخل پوشه templates قرار گرفته باشد تا فلسک اون رو شناسایی بکند.

استفاده در بخشی از برنامه

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

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

افرونه‌ها

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

 

منابع

مقاله «میکروفریم‌ورک فلسک – معرفی» از سایت کدرز

مقاله «آشنایی با میکرو-فریمورک فلسک»‌ از سایت هایو

 

مطالعه بیشتر

سری آموزش «The Flask Mega-Tutorial» از miguelgrinberg

فوتر سایت

اسلایدر سایدبار

درباره ما

درباره ما

ما گروهی از دانشجویان رشته کامپیوتر دانشگاه شهید رجایی هستیم که به راهنمایی و تدریس استاد علی‌رضا اخوان‌پور به دنیای یادگیری عمیق پا گذاشتیم و دوست داریم چیزهایی که در این مسیر یادمی‌گیریم رو به اشتراک بذاریم.

شبکه های اجتماعی

مطالب اخیر