در این آموزش ما میخواهیم با مفاهیم flask آشنا شویم. راه اندازی اولیه فریم ورک Flask بر روی رزبری پای را تست کنیم. برای اجرای این آموزش لازم است دو مورد را بدانیم. اول آشنایی با مفاهیم اولیه پایتون Python و دوم هم آشنایی با ترمینال رزبری پای و دستورات ساه لینوکس است.
رزبری پای یک کامپیوتر کوچک همه کاره است که به دلیل قیمت مناسب (البته نه در ایران!) باعث جلب توجه علاقه مندان دنیای الکترونیک و IOT به خود شده است. این برد تمام توانایی های یک کامپیوتر معمولی را دارا میباشد؛ اما یکی از کاربردهای این برد جذاب این است که میتواند به عنوان یک سرور محلی مورد استفاده قرار بگیرد. برای راه اندازی سرور در رزبری پای راه حلهای گوناگونی وجود دارد؛ مثلا روش کلاسیک استفاده از زبان برنامه نویسی php و راه اندازی سرور آپاچی است. حال با توجه به استفادههای فراوان از پایتون این روزها در تمام زمینهها، شاهد برنامه نویسی سمت سرور با پایتون هم هستیم. برای برنامه نویسی سمت سرور با پایتون باید از فریم ورکهای مخصوص پایتون استفاده کنیم.
فریم ورک چیست؟
بگذارید مثالی بزنم: میخواهیم یک ساختمان بسازیم؛ابتدا باید پی سازی بکنیم، بعد اسکلت ساختمان را بزنیم، بعد به قالب برداری و سپس کارهای تکمیلی برسیم. همه این مراحل زمان بر میباشند و ما به عنوان سازنده باید این زمان را در نظر بگیریم تا پروژه را در زمان مشخص تحویل بدهیم. اگر فرض کنید که به شما بگویند اسکلت ساختمان به صورت آماده در اختیار شما قرار میگیرد و مراحل ساختن را از آنجا به بعد باید طراحی کنید و پیاده سازی کنید، خواهیم دید که حجمی از محاسبات و طراحی کم شده و در زمان گروه سازنده صرفه جویی خواهد شد.
در برنامه نویسی، فریم ورک مانند اسکلت ساختمان در مثال بالا میباشد. فریم ورک را مجموعهای از ابزارها، کتابخانه ها، قرارداد ها و بهترین شیوه ها تعریف کرد که فریم ورک ها این امکان را به برنامه نویسان می دهند تا با توابع و کلاس های از پیش تعریف شده، ضمن ایجاد امنیت بیشتر برای برنامهها، از کد کمتری در برنامه های خود استفاده کنند. اساساً دو نوع فریم ورک وجود دارد. Frontend و Backend در پایتون فریم ورک Django یکی از محبوب ترین فریم ورکهای full-stack میباشد که ینی برای هم frontend و هم backend کاربرد دارد. یک میکرو فریم ورک محبوب هم فریم ورک Flask است. که non full-stack به حساب میآید. به این دلیل میکرو گفته میشود چون که تمام قابلیت های فریم ورکی مانند Django را ندارد؛ اما به این معنا نیست که کاربرد ندارد و یا در عمل مشکلی دارد. همانطور که میبینم در اپلیکشنی چون پینترست از flask استفاده شده است.
راه اندازی در رزبری پای
بسته به نوع استفاده وارد محیط گرافیکی شده و ترمینال را باز کرده یا با ssh به رزبری پای خود متصل شوید. در ترمینال دستورات اولیه برای بروزرسانی را وارد کنید:
Sudo apt-get update
Sudo apt-get upgrade
حال دکمه y را کلید کنید و سپس Enter را فشار دهید. در سیستم عامل Raspbian به صورت پیشفرض پایتون نصب شده است؛ شما باید flask را نصب کنید. در ترمینال دستور زیر را وارد کنید:
sudo apt-get install python3-flask
در این مرحله باستی دایرکتوری جدیدی را با دستور mkdir به نام flaskWeb بسازیم.
mkdir flaskWeb
با دستور cd به دایرکتوری جدید میرویم.
cd flaskWeb
با ادیتورهای vim یا nano فایلی به نام app.py را ساخته و ویرایش میکنیم.
nano app.py
کد زیر را در ویرایشگر مینویسیم.
from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return 'Hello, it is my flask web server' if __name__ == '__main__': app.run(host='0.0.0.0', port=8090)
برای ذخیره دکمه ctrl+x را فشار میدهیم و سپس y تایپ کرده و Enter را فشار میدهیم. حال ما اولین برنامه خود با میکرو فریم ورک flask را نوشته ایم. برای راه اندازی در ترمینال مینویسیم:
python app.py
باید خروجی مانند تصویر زیر ببینیم. برای یافتن ip رزبری پای در ترمینال مینویسیم.
hostname –I
در خروجی مانند شکل mrj-1 باید ip دستگاه را مشاهده کنیم که در اینجا عبارت است از ۱۹۲٫۱۶۸٫۱٫۴۳ و در استفاده های بعدی باید این را بخاطر داشته باشیم. حال بر روی مرورگر لپ تاپی که به همین شبکه وای فای یا اترنت وصل شده است در قسمت url وارد میکنیم.
http://192.168.1.43:8090
و میبینم که خروجی مطابق تصویر زیر میباشد. توضیح خط به خط کد
from flask import Flask
در اینجا ما مدل flask را در اسکریپتمان اضاف میکنیم.
app = Flask(__name__)
یک object از flask با نام app ایجاد کرده ایم.
@app.route('/') def hello(): return 'Hello, it is my flask web server'
بوسیله app.route دسترسی به url ریشه که همان (‘/’) ایجاد کرده ایم، و بعد با معرفی تابع hello میگوییم این مسیر شامل چه توابع و دستوراتی میشود. این تابع یک رشته را برمیگرداند.
if __name__ == '__main__': app.run(host='0.0.0.0', port=8090)
در قسمت آخر میگوییم اگر برنامه از command line آغاز شد سرور از پورت ۸۰۹۰ آماده به کار شود. ما host را به صورت ۰٫۰٫۰٫۰ نوشته ایم؛ این بدان معناست که سرور ما لوکال میباشد و اگر در این شبکه با مرورگر موبایل و یا لپ تاپ هم وارد شویم عمل میکند. اگر بدین صورت قسمت آخر را تغییر بدهیم.
if __name__ == '__main__': app.run(host='127.0.0.0', port=8090)
خواهیم دید مطابق تصویر زیر دیگر سرور ما در دسترس نبوده و فقط بر روی رزبری پای میتوانیم به آن وصل شویم. سوال جدیدی پیش می آید، این است که خب این برنامه فقط شامل یک مسیر بود و اگر مسیر های دیگری نیز بخواهیم، چگونه میتوانیم اضاف کنیم؟ در توضیحات کد اولیه گفته شد که route مسیرهای موجود در سرور را نشان میدهد پس بوسیله اضاف کردن app.route با آدرس دلخواه میتوان میتوان مسیرهای جدیدی به سرور افزود.
پس از تابع اولیه میتوان اضافه کرد:
@app.route('/index') def index_page(): return 'it is the index of my flask server'
که در این صورت کد کامل برنامه ما میشود:
rom flask import Flask app = Flask(__name__) @app.route('/') def hello(): return 'Hello, it is my flask web serve' @app.route('/index') def index_page(): return 'it is the index of my flask server' if __name__ == '__main__': app.run(host='0.0.0.0', port=8090)حال با فشردن ctrl+x و نوشتن y و زدن Enter برنامه را ذخیره میکنیم.
اینبار به یک روش جدید برنامه را اجرا میکنیم؛ در ترمینال مینویسیم.
flask run –-host=0.0.0.0 –-port=8090
میبینم که باز مطابق تصویر زیر برنامه اجرا میشود. مرورگر را باز میکنیم و در url مینویسیم.
http://192.168.1.43:8090/index
میبینم که خروجی مطابق تصویر زیر خواهد بود.
جمع بندی نهایی
در ابتدا با فریم ورک و مسایل ساده برنامه نویسی سرور آشنا شدیم. ما با راه اندازی اولیه و بسیار ساده میکرو فریم ورک flask شروع کردهایم. در آموزشهای بعدی شاهد استفاده از GPIOهای رزبری در برنامه خود خواهیم بود. چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.