معرفی فریمورک Flask پایتون  ، نصب و شروع

معرفی فریمورک Flask پایتون ، نصب و شروع

بروزرسانی : 5 ماه پیش

این مقاله درباره ی فریمورک فلسک ( Flask ) یکی از معروف ترین فریمورک های توسعه ی وب با زبان پایتون است. فریمورک ( Framework ) در واقع مبنایی است که برنامه های نرم افزاری با استفاده از آن توسعه داده میشود و مجموعه ای از کلاس ها و متود های از پیش نوشته شده ای میباشد که به برنامه نویس کمک میکند تا هر نوع پروژه ای را بصورت ایمن ، سریع و قویتر بسازد.

به عبارتی دیگر فریمورک ها زندگی برنامه نویس را راحت تر و بازدهی آنها در انواع پروژه ها را بالاتر میبرند زیرا با استفاده از یک فریمورک انسجام ، انعطاف و سرعت به پروژه های برنامه نویسی می آید.

قبل از بررسی فریمورک فلسک ( Flask )  که در توسعه ی وب استفاده میشود بهتر است بخش های مختلف توسعه ی وب را بررسی کنیم.

مفهوم بک اند ( Back-end ) و فرانت اند ( Front-end ) در توسعه ی وب چیست؟ 

هر پروژه ای که سمت سرور و با زبان های برنامه نویسی سمت سرور توسعه داده شود و آنجا اجرا شود بک اند و هر پروژه ای که مربوط به کاربر باشد و در مرورگر اجرا و نمایش داده شود فرانت اند محسوب میشود.

  1.  فرانت اند : شامل تمام قسمت هایی از وب هست که کاربران آن را میبینند و با آن کار میکنند مثل رنگ ها و سبک های متن، تصاویر و فیلم ها، نمودارها و جداول، منوها، دکمه ها و  ... ، زبان های Html , Css و JavaScript در سمت فرانت اند استفاده میشود و برای جاوااسکریپت نیز فریمورک هایی وجود دارد که به شرح زیر است:
     - vue.js
    - React.js 
    - Angular.js
  2. بک اند : قسمتی که پشت صحنه عمل میکند ، داده ها را سازمان دهی میکند و ذخیره سازی میکند. در واقع کاربر استفاده کننده هرگز بک اند را نمیبیند و اطلاع ندارد آنجا چه اتفاقی میوفتد ولی بک اند مطمئن میشود که هرچیزی در فرانت اند به درستی کار میکند. زبان های برنامه نویسی برای بک اند شامل پایتون ، پی اچ پی ، جاوا ،‌ جاوا اسکریپت و سی شارپ میشود.برخی از فریمورک های برای توسعه ی وب در بک اند به شرح زیر است که فریمورک فلسک ( Flask ) را نیز در بین آنها میبینید :
    - django ( Python )
    - Laravel ( PHP )
    - Flask ( Python )
    - Codeigniter ( PHP )
    - Tornado ( Python )

 

فریمورک فلسک ( Flask ) چیست و چه کاربردی دارد ؟ 

فلسک ( Flask ) یکی از فریمورک های زبان برنامه نویسی Python جهت توسعه ی وب و استفاده از پایتون در بک اند وب سایت ها است که بر روی Werkzeug و Jinja2 پیاده سازی شده است. در زیر برخی از ویژگی های فریمورک flask را میبینید : 

  1. یک سرور توسعه داخلی و یک دیباگر سریع دارد.
  2. سبک است.
  3. کوکی های ایمن ( Secure cookies ) را پشتیبانی می شوند.
  4. برای قالب سازی از Jinja2 استفاده میشود.
  5. درخواست ارسال با استفاده از REST
  6. پشتیبانی از unit testing بصورت داخلی

 

نصب فریمورک فلسک ( 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 آی پی هست.

 

حالا بیایید کد بالا را درک کنیم:

  1. در ابتدا با import کردن کلاس Flask شروع کردیم.
  2. سپس یک instance از این کلاس میسازیم و نام package اپ را بصورت آرگومان میفرستیم که همان __name__ است.
  3. سپس از یک دکوراتور به اسم route() استفاده کردیم تا مشخص شود کدام ادرس قراره متود را فراخوانی بکند.
  4. و در نهایت متود ما قرار است یک پیامی را به مرورگر برگرداند تا نمایش داده شود.

 

حالت Debug mode در فریمورک فلسک ( Flask )

دستور   run در فریمورک فلسک ( Flask ) قادر است کارهایی بیشتر از راه اندازی سرور هم انجام دهد. در صورتی که debug mode را در فریمورک فلسک فعالسازی کنیم اگر کدها را تغییر دهیم همان لحظه reload اتفاق میوفتد و اگر خطایی وجود داشته باشد در مرورگر یک صفحه ای برای دیباگ کردن نمایش داده میشود. 

برای فعالسازی debug mode موقع ران کردن پروژه کد زیر را بزنید :‌

app.run(debug=True)

 

مسیریابی یا Routing در فریمورک فلسک ( Flask )

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

برای اینکه با فریمورک فلسک بتوانید url های مدرن ،‌ساده و مفهومی بسازید از دکوراتور route باید استفاده کنید . به مثال زیر دقت کنید :‌

@app.route('/')
def index():
    return 'This is Home Page'

@app.route('/hello')
def hello():
    return 'This is Hello, World Page'

حالا بیایید کد را درک کنیم.

  1. کد app.route(‘/’) شما را مستقیما به صفحه ی اصلی سایتتان هدایت میکند منظور از / صفحه ی خانگی سایت است.
  2. کد app.route(‘/hello’)  شما را به صفحه ی hello هدایت خواهد کرد.

به این ترتیب، می‌توانیم هر تعداد URL مجزا برای صفحات وب که نیاز داشته باشیم را رندر کنیم.

 

تفاوت Static Route ها و  Dynamic Route ها در فلسک 

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 های فلسک : 

  • int : برای مقادیر عدد صحیح
  • float : برای اعداد اعشاری 
  • string : برای رشته های متنی
  • path  : مشابه رشته هست ولی اسلش (/) هم قبول میکند
  • uuid : رشته های UUID را قبول میکند.

 

HTML Injection در فلسک 

یکی از باگ های امنیتی که با نام HTML Injection شناخته میشود راهی برای تغییر یک صفحه ی وب با داده های نامعتبر توسط اشخاص نامعتبر است.

اگر یک اپلیکیشن تحت وب توانایی اعتبارسنجی داده ها را نداشته باشد ، افرادی میتوانند متن های مخرب را تحت عنوان HTML به سایت تزریق کنند که میتواند در محتویات سایت تاثیرگذار باشد.

یک کوئری طراحی شده توسط هکرها میتواند امنیت سایت را به خطر بیاندازد.

 

HTML Escaping در فلسک

برای محافظت از امنیت وب سایت تمام داده هایی که توسط کاربران ارائه میشود باید escape شود تا وقتی اجرا میشوند بصورت html سالم در نظر گرفته شوند.

در فریمورک فلسک متودی به نام escape برای انجام این کار داریم در تکه کد زیر نحوه ی استفاده از این متود را میبینید : 

from flask import escape

@app.route("/")
def hello(name):
    return f"Hello, {escape(name)}!"

 

مدیریت HTTP در فلسک

وقتی ما به یک وب سایت مراجعه میکنیم برای ارتباطات ما یعنی هر نوع درخواست و هر نوع پاسخی از شیوه های مختلف ‌http استفاده میشود. در فریمورک فلسک ( flask ) نیز باید نحوه ی مدیریت و کار با http را بعنوان یک توسعه دهنده ی وب یاد بگیرید.

پروتکل http یک پروتکل برای برقراری ارتباط بین کاربران و سرور هست و تمام درخواست ها و پاسخ های بین این دو توسط این پروتکل رد و بدل میشود. در لیست زیر انواع متود های موجود برای http را مشاهده میکنید :‌

  • GET
  • POST
  • PUT
  • HEAD
  • DELETE
  • PATCH

در حال حاضر دو متود 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 را استفاده کنند.

پیشنهاد میکنیم بعد از خواندن این مقاله بصورت کامل و با دقت بالا ، کدهای نوشته شده در بالا را روی سیستم خود بنویسید و عملا تست انجام دهید.

 

لینک کوتاه این مقاله : https://avasam.ir/post/402
این سیستم برپایه ی علاقه مندی شما یک دوره ی مناسب به شما پیشنهاد میدهد
مرا بسوی بهترین دوره ی آموزشی که برای من مناسب است هدایت کن 🤖
برای استفاده ی دیگران و حمایت از ما در جامعه های زیر به اشتراک بگذارید

.:: نظرهای کاربران ::.
دوره ی آموزش پروژه محور ساخت کافه بازار دوره ی آموزش پروژه محور ساخت فروشگاه دیجیکالا آموزش لاراول دوره ی آموزش ویو جی اس