فلکس (Flask) یکی از محبوبترین فریمورکهای وب پایتون است که برای ساخت برنامههای وب مورد استفاده قرار میگیرد. با استفاده از فلکس، شما میتوانید برنامههای وبی بسیار ساده اما کارآمد و قابل مقیاسپذیری ایجاد کنید. یکی از ویژگیهای جذاب فلکس، استفاده از ساختارهای بلوپرینت (Blueprint) است که به شما این امکان را میدهد تا برنامه خود را به اجزای مستقلتر و قابل مدیریتتری تقسیم کنید.
به تازگی، فلکس نسخه 3.0 خود را معرفی کرده است. در این نسخه، ویژگیهای جدیدی اضافه شده و بسیاری از رفتارها بهینهسازی شدهاند. یکی از امکاناتی که بهبود یافته، ویژگی teardown_app_request() در بلوپرینتها است. این متد به شما امکان میدهد که یک تابع خاص را در انتهای پردازش هر درخواست وب فراخوانی کنید. این کار در فرآیند تمیزکاری و آزاد کردن منابع بعد از هر درخواست بسیار مفید است.
در ادامه، نحوه پیادهسازی و استفاده از Blueprint و teardown_app_request() را در یک پروژه نمونه با فلکس 3.0 بررسی خواهیم کرد. شما خواهید دید که چگونه میتوان از این قابلیتها برای مدیریت صحیح درخواستها و بهبود عملکرد برنامه استفاده نمود.
در این پروژه، ما یک برنامه ساده ایجاد میکنیم که شامل دو بلوپرینت مختلف برای مدیریت بخشهای مختلف برنامه است و از teardown_app_request برای آزادسازی منابع پس از پایان هر درخواست استفاده میکند.
نمونه کد استفاده از Blueprint و teardown_app_request
from flask import Flask, Blueprint, request, g
# تعریف یک اپلیکیشن فلکس
app = Flask(__name__)
# ایجاد یک بلوپرینت جدید
simple_bp = Blueprint('simple', __name__)
# تعریف یک مسر در بلوپرینت
@simple_bp.route('/')
def index():
return "Hello, Flask 3.0 Blueprint!"
# استفاده از teardown در بلوپرینت
@simple_bp.teardown_app_request
def teardown_request(exception):
if exception:
print("Exception occurred: ", exception)
else:
print("Teardown request: closing resources")
# اینجا میتوانید منابعی که برای هر درخواست باز شدهاند ببندید
# ثبت بلوپرینت در اپلیکیشن اصلی
app.register_blueprint(simple_bp)
if __name__ == '__main__':
app.run(debug=True)
توضیح خط به خط کد
from flask import Flask, Blueprint, request, g
این خط از ماژول فلکس، کلاسهای فلکس و بلوپرینت را برای استفاده در برنامه وارد میکند.
app = Flask(__name__)
این خط یک نمونه از فلکس ایجاد کرده و نام ماژول فعلی را به عنوان آرگومان ورودی میپذیرد.
simple_bp = Blueprint('simple', __name__)
با این خط، یک بلوپرینت جدید به نام simple ایجاد میکنیم.
@simple_bp.route('/')
این خط یک مسر جدید در بلوپرینت simple تعریف میکند که در نهایت به تابع index متصل خواهد شد.
def index():
این تابع، خروجی "Hello, Flask 3.0 Blueprint!" را برای درخواستهای مربوط به مسیر تعریف شده ارسال میکند.
@simple_bp.teardown_app_request
این دکوراتور مشخص میکند که تابع زیر آن، به عنوان یک تابع teardown برای درخواستهای انجام شده در بلوپرینت استفاده شود.
def teardown_request(exception):
اگر استثنایی در پردازش درخواست رخ دهد، به عنوان ورودی در این تابع ارائه میشود.
if exception:
بررسی میکند که آیا استثنایی در طول پردازش درخواست رخ داده است یا خیر.
print("Exception occurred: ", exception)
در صورت وجود استثنا، پیام مناسب را چاپ میکند.
else:
اگر استثنایی رخ نداده باشد، مسیر جایگزین اجرا میشود.
print("Teardown request: closing resources")
پیام مربوط به پایان درخواست را چاپ میکند و نشاندهنده آمادهسازی برای آزادسازی منابع است.
app.register_blueprint(simple_bp)
این خط بلوپرینت ایجاد شده را در اپلیکیشن فلکس ثبت میکند.
if __name__ == '__main__':
اطمینان حاصل میکند که این بخش از کد تنها در صورت اجرای مستقیم فایل اجرا شود.
app.run(debug=True)
این خط اپلیکیشن فلکس را در حالت دیباگ اجرا میکند که برای توسعه و بررسی نیازهای پروژه مفید است.