استفاده از Blueprint فلاسک برای معماری اپلیکیشن های خود


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

در این آموزش یاد خواهید گرفت:

  • Flask Blueprints چیست و چگونه کار می کند
  • چگونه یک Flask Blueprint را برای سازماندهی کد خود ایجاد و استفاده کنیم؟
  • چگونه قابلیت استفاده مجدد از کد را با استفاده از Flask Blueprint خود یا شخص ثالث بهبود بخشیم؟

این آموزش فرض می کند که شما تجربه استفاده از فلاسک را دارید و قبلا برنامه هایی را ساخته اید. اگر قبلا از فلاسک استفاده نکرده اید، وب اپلیکیشن های پایتون را با فلاسک (سری آموزش) بررسی کنید.

اپلیکیشن فلاسک چگونه به نظر می رسد

بیایید با بررسی ساختار یک برنامه فلاسک کوچک شروع کنیم. با دنبال کردن مراحل این بخش می توانید یک وب اپلیکیشن کوچک ایجاد کنید. برای شروع، باید بسته Flask Python را نصب کنید. برای نصب فلاسک با استفاده از pip می توانید دستور زیر را اجرا کنید:

pip install Flask==1.1.1

دستور بالا فلاسک نسخه 1.1.1 را نصب می کند. این نسخه ای است که در طول این آموزش استفاده خواهید کرد، اگرچه می توانید آنچه را که در اینجا یاد می گیرید در نسخه های دیگر نیز اعمال کنید.

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

app/
|
└── app.py

فایل app.py حاوی تعریف برنامه و دیدگاه های آن خواهد بود.

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

در فلاسک، نماها می توانند هر فراخوانی (مانند یک تابع) باشند که درخواست ها را دریافت می کند و پاسخ آن درخواست را برمی گرداند. فلاسک وظیفه ارسال پاسخ به کاربر را بر عهده دارد.

بلوک کد زیر کد منبع کامل برنامه شما است:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return "This is an example app"

این کد برنامه شی را ایجاد می کند که متعلق به کلاس فلاسک است. view function index() با استفاده از دکوراتور app.route به مسیر/مرتبط است. برای کسب اطلاعات بیشتر در مورد دکوراتورها، Primer on Python Decorators و Python Decorators 101 را بررسی کنید.

می توانید برنامه را با دستور زیر اجرا کنید:

flask run

به طور پیش فرض، فلاسک برنامه ای را که در app.py تعریف کرده اید در پورت 5000 اجرا می کند. در حالی که برنامه در حال اجرا است، با استفاده از مرورگر وب خود به http://localhost:5000 بروید. صفحه ای را مشاهده خواهید کرد که پیام را نشان می دهد، این یک برنامه نمونه است.

طرح پروژه انتخاب شده برای برنامه های بسیار کوچک عالی است، اما مقیاس خوبی ندارد. همانطور که کد شما رشد می کند، نگهداری همه چیز در یک فایل برای شما سخت تر می شود. بنابراین، هنگامی که برنامه شما از نظر اندازه یا پیچیدگی افزایش می یابد، ممکن است بخواهید کد خود را به روشی متفاوت ساختار دهید تا قابل نگهداری و درک آن واضح باشد. در طول این آموزش، نحوه استفاده از Flask Blueprint برای دستیابی به این هدف را یاد خواهید گرفت.

طرح فلاسک چگونه به نظر می رسد

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

ساختار فایل برای این برنامه جدید به این شکل است:

app/
|
├── app.py
└── example_blueprint.py

example_blueprint.py شامل پیاده سازی Flask Blueprint خواهد بود. سپس app.py را برای استفاده از آن تغییر می دهید.

بلوک کد زیر نشان می دهد که چگونه می توانید این Flask Blueprint را در example_blueprint.py پیاده سازی کنید. این شامل یک نما در مسیر / است که متن را برمی گرداند این یک برنامه نمونه است:

from flask import Blueprint

example_blueprint = Blueprint('example_blueprint', __name__)

@example_blueprint.route('/')
def index():
    return "This is an example app"

در کد بالا، می توانید مراحل رایج در اکثر تعاریف Flask Blueprint را مشاهده کنید:

  1. یک شی Blueprint به نام example_blueprint ایجاد کنید.
  2. با استفاده از دکوراتور مسیر، نماها را به example_blueprint اضافه کنید.

بلوک کد زیر نشان می دهد که برنامه شما چگونه طرح فلاسک را وارد می کند و از آن استفاده می کند:

from flask import Flask
from example_blueprint import example_blueprint

app = Flask(__name__)
app.register_blueprint(example_blueprint)

برای استفاده از هر Flask Blueprint، باید آن را وارد کنید و سپس با استفاده از register_blueprint() آن را در برنامه ثبت کنید. هنگامی که یک Flask Blueprint ثبت می شود، برنامه با محتویات آن گسترش می یابد.

می توانید برنامه را با دستور زیر اجرا کنید:

flask run

در حالی که برنامه در حال اجرا است، با استفاده از مرورگر وب خود به http://localhost:5000 بروید. صفحه ای را مشاهده خواهید کرد که پیام را نشان می دهد، این یک برنامه نمونه است.

بلوپرینت های فلاسک چگونه کار می کنند

در این بخش، نحوه پیاده سازی و استفاده از Flask Blueprint را به طور مفصل خواهید آموخت. هر Flask Blueprint شیئی است که بسیار شبیه به یک برنامه Flask کار می کند. هر دو می توانند منابعی مانند فایل های استاتیک، قالب ها و نماهایی داشته باشند که با مسیرها مرتبط هستند.

با این حال، Flask Blueprint در واقع یک برنامه کاربردی نیست. قبل از اینکه بتوانید آن را اجرا کنید، باید در یک برنامه ثبت شود. هنگامی که یک Flask Blueprint را در یک برنامه ثبت می کنید، در واقع برنامه را با محتویات Blueprint گسترش می دهید.

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

ساخت یک بلوپرینت فلاسک

بیایید تعریف Flask Blueprint را که قبلا دیده اید دوباره مرور کنیم و آن را با جزئیات مرور کنیم. کد زیر ایجاد شی Blueprint را نشان می دهد:

from flask import Blueprint

example_blueprint = Blueprint('example_blueprint', __name__)

توجه داشته باشید که در کد بالا، برخی از آرگومان ها هنگام ایجاد شی Blueprint مشخص شده است. اولین آرگومان، "example_blueprint"، نام Blueprint است که توسط مکانیسم مسیریابی Flask استفاده می شود. استدلال دوم، __name__، نام واردات Blueprint است که فلاسک از آن برای مکان یابی منابع Blueprint استفاده می کند.

استدلال های اختیاری دیگری نیز وجود دارد که می توانید برای تغییر رفتار Blueprint ارائه دهید:

  • static_folder: پوشه ای که فایل های استاتیک Blueprint را می توان در آن یافت

  • static_url_path: URL برای ارائه فایل های استاتیک از

  • template_folder: پوشه حاوی الگوهای Blueprint

  • url_prefix: مسیر پیش بینی به تمام URL های Blueprint

  • زیر دامنه: زیر دامنه ای که مسیرهای این طرح به طور پیش فرض در آن مطابقت دارند

  • url_defaults: فرهنگ لغت مقادیر پیش فرض که نماهای این طرح اولیه دریافت می کنند

  • root_path: مسیر دایرکتوری ریشه Blueprint، که مقدار پیش فرض آن از نام واردات Blueprint به دست می آید

توجه داشته باشید که همه مسیرها، به جز root_path، نسبت به دایرکتوری Blueprint هستند.

example_blueprint آبجکت Blueprint دارای متدها و دکوراتورهایی است که به شما امکان می دهد عملیات اجرا شده را هنگام ثبت کردن Flask Blueprint در یک برنامه برای گسترش آن ثبت کنید. یکی از پرکاربردترین دکوراتورها مسیر است. این به شما امکان می دهد یک تابع view را به یک مسیر URL مرتبط کنید. بلوک کد زیر نحوه استفاده از این دکوراتور را نشان می دهد:

@example_blueprint.route('/')
def index():
    return "This is an example app"

شما index() را با استفاده از example_blueprint.route تزئین می کنید و تابع را به URL / مرتبط می کنید.

اشیاء Blueprint همچنین روش های دیگری را ارائه می دهند که ممکن است برای شما مفید باشد:

  • .errorhandler() برای ثبت یک تابع کنترل کننده خطا
  • .before_request() برای اجرای یک اقدام قبل از هر درخواست
  • .after_request() برای اجرای یک اقدام پس از هر درخواست
  • .app_template_filter() برای ثبت فیلتر الگو در سطح برنامه

می توانید در مورد استفاده از Blueprints و کلاس Blueprint در مستندات Flask Blueprints اطلاعات بیشتری کسب کنید.

ثبت Blueprint در اپلیکیشن شما

به یاد بیاورید که Flask Blueprint در واقع یک برنامه نیست. هنگامی که طرح فلاسک را در یک برنامه ثبت می کنید، برنامه را با محتویات آن گسترش می دهید. کد زیر نشان می دهد که چگونه می توانید Flask Blueprint را که قبلا ایجاد شده است در یک برنامه ثبت کنید:

from flask import Flask
from example_blueprint import example_blueprint

app = Flask(__name__)
app.register_blueprint(example_blueprint)

هنگامی که با .register_blueprint() تماس می گیرید، تمام عملیات ثبت شده در example_blueprint Flask Blueprint را روی برنامه اعمال می کنید. اکنون، درخواست های برنامه برای URL / با استفاده از .index() از Flask Blueprint ارائه می شود.

می توانید نحوه گسترش برنامه Flask Blueprint را با ارائه برخی پارامترها برای register_blueprint سفارشی کنید:

  • url_prefix یک پیشوند اختیاری برای تمام مسیرهای Blueprint است.
  • زیر دامنه یک زیر دامنه است که مسیرهای Blueprint با آن مطابقت دارند.
  • url_defaults یک فرهنگ لغت با مقادیر پیش فرض برای آرگومان های view است.

توانایی انجام برخی از سفارشی سازی ها در زمان ثبت نام، به جای زمان ایجاد، به ویژه زمانی مفید است که یک Flask Blueprint را در پروژه های مختلف به اشتراک می گذارید.

در این بخش مشاهده کرده اید که Flask Blueprints چگونه کار می کند و چگونه می توانید آنها را ایجاد کرده و از آنها استفاده کنید. در بخش های بعدی، یاد خواهید گرفت که چگونه می توانید از یک Flask Blueprint برای معماری اپلیکیشن های خود استفاده کنید و آنها را به کامپوننت های مستقل ساختاردهی کنید. در برخی موارد، این امکان برای شما وجود دارد که از این اجزا در برنامه های مختلف استفاده مجدد کنید تا زمان توسعه را کاهش دهید!

چگونه از Blueprints فلاسک برای معماری کد اپلیکیشن خود استفاده کنیم؟

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

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

لازم نیست زیاد به جزئیات پیاده سازی اهمیت دهید. در عوض، شما عمدتا بر روی نحوه استفاده از Flask Blueprint برای بهبود معماری اپلیکیشن تمرکز خواهید کرد.

درک اینکه چرا چیدمان پروژه مهم است

به یاد داشته باشید، فلاسک هیچ طرح پروژه خاصی را اجرا نمی کند. سازماندهی کد این برنامه به صورت زیر کاملا امکان پذیر است:

ecommerce/
|
├── static/
|   ├── logo.png
|   ├── main.css
|   ├── generic.js
|   └── product_view.js
|
├── templates/
|   ├── login.html
|   ├── forgot_password.html
|   ├── signup.html
|   ├── checkout.html
|   ├── cart_view.html
|   ├── index.html
|   ├── products_list.html
|   └── product_view.html
|
├── app.py
├── config.py
└── models.py

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

  • static/ شامل فایل های استاتیک برنامه است.
  • templates/ شامل قالب های برنامه است.
  • models.py شامل تعریف مدل های برنامه است.
  • app.py شامل منطق برنامه است.
  • config.py شامل پارامترهای پیکربندی برنامه است.

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

همچنین، اگر فقط یک فایل برای منطق برنامه داشته باشید، در نهایت با یک app.py بسیار بزرگ مواجه خواهید شد که کدهایی را با هم ترکیب می کند که تقریبا نامرتبط هستند. این می تواند پیمایش و نگهداری اسکریپت را برای شما سخت کند.

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

پروژه های خود را سازماندهی کنید

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

  1. API Blueprint برای فعال کردن سیستم های خارجی برای جستجو و بازیابی اطلاعات محصول
  2. طرح احراز هویت برای اینکه کاربران بتوانند وارد سیستم شوند و رمز عبور خود را بازیابی کنند
  3. طرح سبد خرید برای عملکرد سبد خرید و پرداخت
  4. طرح کلی برای صفحه اصلی
  5. طرح محصولات برای جستجو و مشاهده محصولات

اگر از یک دایرکتوری جداگانه برای هر Flask Blueprint و منابع آن استفاده می کنید، طرح پروژه به صورت زیر خواهد بود:

ecommerce/
|
├── api/
|   ├── __init__.py
|   └── api.py
|
├── auth/
|   ├── templates/
|   |   └── auth/
|   |       ├── login.html
|   |       ├── forgot_password.html
|   |       └── signup.html
|   |
|   ├── __init__.py
|   └── auth.py
|
├── cart/
|   ├── templates/
|   |   └── cart/
|   |       ├── checkout.html
|   |       └── view.html
|   |
|   ├── __init__.py
|   └── cart.py
|
├── general/
|   ├── templates/
|   |   └── general/
|   |       └── index.html
|   |
|   ├── __init__.py
|   └── general.py
|
├── products/
|   ├── static/
|   |   └── view.js
|   |
|   ├── templates/
|   |   └── products/
|   |       ├── list.html
|   |       └── view.html
|   |
|   ├── __init__.py
|   └── products.py
|
├── static/
|   ├── logo.png
|   ├── main.css
|   └── generic.js
|
├── app.py
├── config.py
└── models.py

برای سازماندهی کد به این روش، تمام نماها را از app.py به Flask Blueprint مربوطه منتقل می کنید. شما همچنین قالب ها و فایل های استاتیک غیر جهانی را جابجا کردید. این ساختار یافتن کد و منابع مربوط به یک عملکرد معین را برای شما آسان تر می کند. به عنوان مثال، اگر می خواهید منطق برنامه را در مورد محصولات پیدا کنید، می توانید به جای پیمایش در app.py به طرح محصولات در محصولات/products.py بروید.

بیایید پیاده سازی طرح محصولات را در محصولات/products.py ببینیم:

from flask import Blueprint, render_template
from ecommerce.models import Product

products_bp = Blueprint('products_bp', __name__,
    template_folder='templates',
    static_folder='static', static_url_path='assets')

@products_bp.route('/')
def list():
    products = Product.query.all()
    return render_template('products/list.html', products=products)

@products_bp.route('/view/<int:product_id>')
def view(product_id):
    product = Product.query.get(product_id)
    return render_template('products/view.html', product=product)

این کد products_bp Flask Blueprint را تعریف می کند و فقط شامل کدی است که مربوط به عملکرد محصول است. از آنجایی که این Flask Blueprint قالب های خاص خود را دارد، باید template_folder را نسبت به ریشه Blueprint در ایجاد شی Blueprint مشخص کنید. از آنجایی که شما static_folder='static' و static_url_path='assets' را مشخص می کنید، فایل ها در تجارت الکترونیک/products/static/ تحت URL /assets/ ارائه می شوند.

اکنون می توانید بقیه عملکرد کد خود را به Flask Blueprint مربوطه منتقل کنید. به عبارت دیگر، می توانید نقشه هایی را برای API، احراز هویت، سبد خرید و عملکرد عمومی ایجاد کنید. پس از انجام این کار، تنها کد باقی مانده در app.py کدی خواهد بود که با مقداردهی اولیه برنامه و ثبت نام Flask Blueprint سروکار دارد:

from flask import Flask

from ecommmerce.api.api import api_bp
from ecommmerce.auth.auth import auth_bp
from ecommmerce.cart.cart import cart_bp
from ecommmerce.general.general import general_bp
from ecommmerce.products.products import products_bp

app = Flask(__name__)

app.register_blueprint(api_bp, url_prefix='/api')
app.register_blueprint(auth_bp)
app.register_blueprint(cart_bp, url_prefix='/cart')
app.register_blueprint(general_bp)
app.register_blueprint(products_bp, url_prefix='/products')

اکنون، app.py به سادگی Blueprints را برای گسترش برنامه وارد و ثبت می کند. از آنجایی که از url_prefix استفاده می کنید، می توانید از برخورد URL بین مسیرهای Flask Blueprint جلوگیری کنید. به عنوان مثال، URL های /products/ و /cart/ به نقاط پایانی مختلف تعریف شده در products_bp و cart_bp Blueprints برای همان مسیر، /.

از جمله الگوها

در فلاسک، هنگامی که یک نما یک الگو را رندر می کند، فایل الگو در تمام دایرکتوری هایی که در مسیر جستجوی قالب برنامه ثبت شده اند جستجو می شود. به طور پیش فرض، این مسیر ["/templates"]، بنابراین قالب ها فقط در دایرکتوری /templates در دایرکتوری ریشه برنامه جستجو می شوند.

اگر آرگومان template_folder را در ایجاد یک Blueprint تنظیم کنید، پوشه templates آن به مسیر جستجوی قالب برنامه اضافه می شود، زمانی که Flask Blueprint ثبت می شود. با این حال، اگر مسیرهای فایل تکراری در دایرکتوری های مختلف وجود داشته باشد که بخشی از مسیر جستجوی الگو هستند، بسته به ترتیب ثبت نام آنها، یکی از آنها اولویت خواهد داشت.

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

ecommerce/
|
└── products/
    └── templates/
        └── products/
            ├── search.html
            └── view.html

در ابتدا، ممکن است دو بار ظاهر شدن نام Flask Blueprint زائد به نظر برسد:

  1. به عنوان دایرکتوری ریشه Blueprint
  2. داخل دایرکتوری قالب ها

با این حال، بدانید که با انجام این کار، می توانید از برخورد احتمالی نام الگو بین Blueprint های مختلف جلوگیری کنید. با استفاده از این ساختار دایرکتوری، هر نمایی که به قالب view.html برای محصولات نیاز دارد، می تواند از products/view.html به عنوان نام فایل الگو هنگام فراخوانی render_template استفاده کند. این از تضاد با view.html متعلق به طرح سبد خرید جلوگیری می کند.

به عنوان نکته پایانی، مهم است بدانید که قالب های موجود در دایرکتوری قالب برنامه اولویت بیشتری نسبت به قالب های موجود در دایرکتوری قالب Blueprint دارند. این می تواند برای دانستن اینکه آیا می خواهید الگوهای Flask Blueprint را بدون تغییر واقعی فایل الگو لغو کنید، مفید باشد.

به عنوان مثال، اگر می خواهید products/view.html الگو را در طرح محصولات لغو کنید، می توانید این کار را با ایجاد یک فایل جدید products/view.html در دایرکتوری قالب های برنامه انجام دهید:

ecommerce/
|
├── products/
|   └── templates/
|       └── products/
|           ├── search.html
|           └── view.html
|
└── templates/
        └── products/
            └── view.html

هنگامی که این کار را انجام می دهید، برنامه شما به جای products/templates/products/view.html هر زمان که یک نما به products/view.html الگو نیاز داشته باشد، از templates/products/view.html استفاده می کند.

ارائه عملکردی غیر از نماها

تا کنون، شما فقط Blueprints را دیده اید که برنامه ها را با view گسترش می دهند، اما Flask Blueprints مجبور نیستند فقط view ها را ارائه دهند! آنها می توانند برنامه ها را با قالب ها، فایل های استاتیک و فیلترهای قالب گسترش دهند. به عنوان مثال، می توانید یک Flask Blueprint ایجاد کنید تا مجموعه ای از آیکون ها را ارائه دهید و از آن در برنامه های خود استفاده کنید. این ساختار فایل برای چنین طرحی خواهد بود:

app/
|
└── icons/
    ├── static/
    |   ├── add.png
    |   ├── remove.png
    |   └── save.png
    |
    ├── __init__.py
    └── icons.py

پوشه استاتیک شامل فایل های آیکون است و icons.py تعریف Flask Blueprint است.

ممکن است icons.py اینگونه به نظر برسد:

from flask import Blueprint

icons_bp = Blueprint('icons_bp', __name__,
    static_folder='static',
    static_url_path='icons')

این کد icons_bp Flask Blueprint را تعریف می کند که فایل های موجود در دایرکتوری استاتیک را در زیر URL /icons/ در معرض دید قرار می دهد. توجه داشته باشید که این طرح هیچ مسیری را تعریف نمی کند.

هنگامی که می توانید Blueprint هایی ایجاد کنید که نماها و انواع دیگر محتوا را بسته بندی می کنند، کد و دارایی های خود را در برنامه های خود قابل استفاده مجدد تر می کنید. در بخش زیر با قابلیت استفاده مجدد Flask Blueprint بیشتر آشنا خواهید شد.

نحوه استفاده از Flask Blueprints برای بهبود استفاده مجدد از کد

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

همچنین می توانید از Blueprint های ایجاد شده توسط سایر توسعه دهندگان برای سرعت بخشیدن به کار خود استفاده کنید. در حالی که هیچ مخزن متمرکزی برای نقشه های فلاسک موجود وجود ندارد، می توانید آنها را با استفاده از فهرست بسته پایتون، جستجوی GitHub و موتورهای جستجوی وب پیدا کنید. می توانید درباره جستجوی بسته های PyPI در Pip چیست؟ راهنمای پایتون های جدید.

Blueprints و Flask Extensions مختلفی وجود دارد (که با استفاده از Blueprints پیاده سازی می شوند) که عملکردهایی را ارائه می دهند که ممکن است برای شما مفید باشد:

  • تأیید اعتبار
  • تولید ادمین/CRUD
  • عملکرد CMS
  • و بیشتر!

به جای کدنویسی برنامه خود از ابتدا، ممکن است به دنبال یک طرح یا افزونه فلاسک موجود باشید که بتوانید دوباره از آن استفاده کنید. استفاده از Blueprints و Extensions شخص ثالث می تواند به شما کمک کند تا زمان توسعه را کاهش دهید و تمرکز خود را بر روی منطق اصلی برنامه خود حفظ کنید!

نتیجه

در این آموزش، نحوه عملکرد Flask Blueprints، نحوه استفاده از آنها و نحوه کمک به شما در سازماندهی کد اپلیکیشن خود را مشاهده کرده اید. Flask Blueprints ابزاری عالی برای مقابله با پیچیدگی برنامه با افزایش آن است.

شما یاد گرفته اید:

  • Flask Blueprints چیست و چگونه کار می کند
  • چگونه می توانید یک Flask Blueprint را پیاده سازی و استفاده کنید؟
  • چگونه Flask Blueprints می تواند به شما در سازماندهی کد اپلیکیشن کمک کند؟
  • چگونه می توانید از Flask Blueprints برای سهولت استفاده مجدد از کامپوننت های خود و شخص ثالث استفاده کنید؟
  • چگونه استفاده از Flask Blueprint در پروژه شما می تواند زمان توسعه را کاهش دهد؟

می توانید از آنچه در این آموزش آموخته اید برای شروع سازماندهی برنامه های خود به عنوان مجموعه ای از نقشه ها استفاده کنید. هنگامی که اپلیکیشن های خود را به این روش معماری می کنید، استفاده مجدد از کد، قابلیت نگهداری و کار تیمی را بهبود خواهید بخشید!