ورود / ثبت نام سبد خرید 0
این مقاله درباره ی فریمورک فلسک ( Flask ) یکی از معروف ترین فریمورک های توسعه ی وب با زبان پایتون است. فریمورک ( Framework ) در واقع مبنایی است که برنامه های نرم افزاری با استفاده از آن توسعه داده میشود و مجموعه ای از کلاس ها و متود های از پیش نوشته شده ای میباشد که به برنامه نویس کمک میکند تا هر نوع پروژه ای را بصورت ایمن ، سریع و قویتر بسازد.
به عبارتی دیگر فریمورک ها زندگی برنامه نویس را راحت تر و بازدهی آنها در انواع پروژه ها را بالاتر میبرند زیرا با استفاده از یک فریمورک انسجام ، انعطاف و سرعت به پروژه های برنامه نویسی می آید.
قبل از بررسی فریمورک فلسک ( Flask ) که در توسعه ی وب استفاده میشود بهتر است بخش های مختلف توسعه ی وب را بررسی کنیم.
مفهوم بک اند ( Back-end ) و فرانت اند ( Front-end ) در توسعه ی وب چیست؟
هر پروژه ای که سمت سرور و با زبان های برنامه نویسی سمت سرور توسعه داده شود و آنجا اجرا شود بک اند و هر پروژه ای که مربوط به کاربر باشد و در مرورگر اجرا و نمایش داده شود فرانت اند محسوب میشود.
فلسک ( Flask ) یکی از فریمورک های زبان برنامه نویسی Python جهت توسعه ی وب و استفاده از پایتون در بک اند وب سایت ها است که بر روی Werkzeug و Jinja2 پیاده سازی شده است. در زیر برخی از ویژگی های فریمورک flask را میبینید :
نسخه ی پایتون:
از آنجایی که فلسک یک فریمورک پایتونی است شما باید ابتدا پایتون را نصب کنید. سپس نسخه ی پایتون را چک کنید. موقع نوشتن این مقاله اخرین نسخه ی پایتون ۳.۱۰ میباشد.
با استفاده از دستور python --version میتوانید نسخه ی پایتون را در ترمینال خود ببینید.
ساخت محیط مجازی (Virtual Environment):
اگر بخواهید یک پروژه را درون یک محیط مجازی استفاده کنید تا پکیج های نصب شده برای آن خاص باشد و روی دیگر پروژه ها یا کل سیستم عامل شما تاثیری نداشته باشد بهتر است یک virtual environment بسازید. این کار توسط پکیج venv پایتون قابل انجام است. با استفاده از دستورات زیر یک محیط مجازی بسازید.
برای ویندوز :
> mkdir myproject > cd myproject > py -3 -m venv venv
برای مک و لینوکس :
$ mkdir myproject $ cd myproject $ python3 -m venv venv
فعالسازی محیط مجازی
بعد از ساختن محیط مجازی باید آنرا فعالسازی کنید
> venvScriptsactivate
$ . venv/bin/activate
بعد از وارد کردن دستور فعالسازی نام محیطی که فعال شده است به شما نمایش داده میشود.
نصب فریمورک فلسک :
برای نصب فریمورک فلسک ( flask ) دستور زیر را در ترمینال وارد کنید :
$ pip install Flask
ساخت اولین اپ با فلسک ( Flask ) :
حال بیایید اولین پروژه ی فلسک خود را بسازیم اولین اپ فلسک ما به شکل زیر کدنویسی میشود :
from flask import Flask app = Flask(__name__) @app.route("/") def home(): res = "Hello, World! This is our first Flask app." return res if __name__ == "__main__": app.run(host='0.0.0.0', port=80)
اگر همه چیز خوب کار کند، سرور داخلی فلسک اجرا می شود که برای تست و یادگیری عالی است ولی ممکن است برای پروژه های واقعی مناسب نباشد، کنسول شما خروجی زیر را نشان می دهد:
معنی پیام بالا این است که اپ شما روی ادرس http://127.0.0.1:5000 در حال اجرا هست اینجا 127.0.0.1 آی پی هست.
حالا بیایید کد بالا را درک کنیم:
دستور run در فریمورک فلسک ( Flask ) قادر است کارهایی بیشتر از راه اندازی سرور هم انجام دهد. در صورتی که debug mode را در فریمورک فلسک فعالسازی کنیم اگر کدها را تغییر دهیم همان لحظه reload اتفاق میوفتد و اگر خطایی وجود داشته باشد در مرورگر یک صفحه ای برای دیباگ کردن نمایش داده میشود.
برای فعالسازی debug mode موقع ران کردن پروژه کد زیر را بزنید :
app.run(debug=True)
ساختن url ها با فریمورک فلسک خیلی ساده است. کاربران سایت شما دوست دارند url های شما ساده و مفهومی باشد و اگر بتوانند آنرا به خاطر بسپارند و مستقیم به لینک یک صفحه وارد شوند خیلی خوب است.
برای اینکه با فریمورک فلسک بتوانید url های مدرن ،ساده و مفهومی بسازید از دکوراتور route باید استفاده کنید . به مثال زیر دقت کنید :
@app.route('/') def index(): return 'This is Home Page' @app.route('/hello') def hello(): return 'This is Hello, World Page'
حالا بیایید کد را درک کنیم.
به این ترتیب، میتوانیم هر تعداد URL مجزا برای صفحات وب که نیاز داشته باشیم را رندر کنیم.
Static Route چیست ؟
این نوع از route ها همانطور که از نامش پیداست ثابت است و باید صریحا همان آدرس که در url وجود دارد برای route تعریف شود. مثال:
@app.route('/Elon') def greet(): return 'Welcome Elon. What would you like to order.' @app.route('/John') def hello(): return 'Welcome John. What would you like to order.'
در کد بالا مشاهده میکنید که ما یک پیام خوش آمدگویی را برای افراد مختلف با نام آنها نمایش میدهیم.
اگر چه تعریف این نوع از route ها کار سختی نیست ولی تا زمانی که نیاز شما تعداد کمی route باشد ولی اگر تبدیل به تعداد زیادی از route ها شود کاری بسیار سخت و دیوانه کننده است.
Dynamic Route چیست ؟
بجای تعریف صریح route های زیاد (که در مثال بالا دیدید) ما میتوانیم آنرا بصورت پویا توسط یک route انجام دهیم و نیازهای خود را بصورت پارامتر برای آن استفاده کنیم.در این صورت پارامتر در url قرار میگیرد و توسط تابعی درون route بعنوان پارامتر ورودی دریافت میشود. مثال :
@app.route('/<name>') def greet(name): return f'welcome {name}. What would you like to order.'
در کد بالا مقدار name از url گرفته میشود و درون تابع بعنوان پارامتر ورودی دریافت میشود. اگر نیاز به نمایش پیام به یک میلیون کاربر هم باشد با همین یک route ممکن است و دیگر نیاز نیست بصورت استاتیک route های خود را ایجاد کنید.
همچنین ما میتوانیم نوع متغیرها را در route های فلسک تعریف بکنیم مثال زیر را ببینید :
@app.route('/<int:year>/<int:month>/<title>') def article(year, month, title): # Logic goes here
تعریف کردن نوع متغیر کاربر را مجبور میکند که متغیرها را فقط در همان نوعی که تعریف شده ارسال کند.
نوع متغیرها در route های فلسک :
یکی از باگ های امنیتی که با نام HTML Injection شناخته میشود راهی برای تغییر یک صفحه ی وب با داده های نامعتبر توسط اشخاص نامعتبر است.
اگر یک اپلیکیشن تحت وب توانایی اعتبارسنجی داده ها را نداشته باشد ، افرادی میتوانند متن های مخرب را تحت عنوان HTML به سایت تزریق کنند که میتواند در محتویات سایت تاثیرگذار باشد.
یک کوئری طراحی شده توسط هکرها میتواند امنیت سایت را به خطر بیاندازد.
برای محافظت از امنیت وب سایت تمام داده هایی که توسط کاربران ارائه میشود باید escape شود تا وقتی اجرا میشوند بصورت html سالم در نظر گرفته شوند.
در فریمورک فلسک متودی به نام escape برای انجام این کار داریم در تکه کد زیر نحوه ی استفاده از این متود را میبینید :
from flask import escape @app.route("/") def hello(name): return f"Hello, {escape(name)}!"
وقتی ما به یک وب سایت مراجعه میکنیم برای ارتباطات ما یعنی هر نوع درخواست و هر نوع پاسخی از شیوه های مختلف http استفاده میشود. در فریمورک فلسک ( flask ) نیز باید نحوه ی مدیریت و کار با http را بعنوان یک توسعه دهنده ی وب یاد بگیرید.
پروتکل http یک پروتکل برای برقراری ارتباط بین کاربران و سرور هست و تمام درخواست ها و پاسخ های بین این دو توسط این پروتکل رد و بدل میشود. در لیست زیر انواع متود های موجود برای http را مشاهده میکنید :
در حال حاضر دو متود GET و POST را بررسی میکنیم چون پرکاربرد ترین متودهای http هستند.
متود GET :
این متود برای ارسال و دریافت اطلاعات ولی توسط url و بصورت آشکارا استفاده میشود.
متود POST :
این متود برای ارسال و پست کردن داده ها به سمت یک سرور بصورت مخفیانه استفاده میشود :
from flask import request @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': return do_the_login() else: return show_the_login_form()
در فریمورک فلسک بصورت پیشفرض یک route فقط به متود GET پاسخگو هست البته دکوراتورها موجود برای route ها میتوانند متود های مختلف http را استفاده کنند.
پیشنهاد میکنیم بعد از خواندن این مقاله بصورت کامل و با دقت بالا ، کدهای نوشته شده در بالا را روی سیستم خود بنویسید و عملا تست انجام دهید.
مقالات دیگر مرتبط با این مقاله ی آموزشی :
دوره های آموزشی مرتبط با این مقاله :