برنامه های بزرگ به عنوان بسته

یک ساختار کاربردی فلاسک ساده را تصور کنید که شبیه به این است:

/yourapplication
    yourapplication.py
    /static
        style.css
    /templates
        layout.html
        index.html
        login.html
        ...

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

بسته های ساده

برای تبدیل آن به یک پوشه بزرگتر، کافیست یک پوشه جدید به نام yourapplication در داخل پوشه اصلی ایجاد کنید و همه چیز را به زیر آن منتقل کنید. سپس نام yourapplication.py را به __init__.py تغییر دهید. (حتما ابتدا همه فایل‌های .pyc را حذف کنید، در غیر این احتمال دارد، که همه چیز خراب شود.)

پس از آن باید به چیزی شبیه به این برسید

/yourapplication
    /yourapplication
        __init__.py
        /static
            style.css
        /templates
            layout.html
            index.html
            login.html
            ...

But how do you run your application now? The naive python yourapplication/__init__.py will not work. Let's just say that Python does not want modules in packages to be the startup file. But that is not a big problem, just add a new file called pyproject.toml next to the inner yourapplication folder with the following contents:

[project]
name = "yourapplication"
dependencies = [
    "flask",
]

[build-system]
requires = ["flit_core<4"]
build-backend = "flit_core.buildapi"

Install your application so it is importable:

$ pip install -e .

To use the flask command and run your application you need to set the --app option that tells Flask where to find the application instance:

$ flask --app yourapplication run

ما از این چه چیزی به دست آوردیم؟ اکنون می توانیم برنامه را کمی به چندین ماژول تغییر ساختار دهیم. تنها چیزی که باید به خاطر بسپارید چک لیست سریع زیر است:

  1. ایجاد شی برنامه Flask باید در فایل __init__.py باشد. به این ترتیب هر ماژول می تواند آن را با خیال راحت وارد کند و متغیر __name__ به بسته صحیح حل می شود.

  2. همه توابع نما(view) (آنهایی که دارای دکوراتور route() در بالا هستند) باید در فایل __init__.py وارد شوند. نه خود شی، بلکه ماژولی که در آن قرار دارد. ماژول نما را بعد از ایجاد شی برنامه وارد کنید.

این یک مثال است __init__.py

from flask import Flask
app = Flask(__name__)

import yourapplication.views

و این شبیه چیزی است که views.py نوشته می‌شود:

from yourapplication import app

@app.route('/')
def index():
    return 'Hello World!'

پس از آن باید به چیزی شبیه به این برسید

/yourapplication
    pyproject.toml
    /yourapplication
        __init__.py
        views.py
        /static
            style.css
        /templates
            layout.html
            index.html
            login.html
            ...

واردات دایره ای

همه برنامه نویسان پایتون از آنها متنفرند، و با این حال، ما فقط برخی از آنها را اضافه کردیم: واردات دایره ای (این زمانی است که دو ماژول به یکدیگر وابسته هستند. در این مورد views.py به __init__.py بستگی دارد). توجه داشته باشید که به طور کلی این ایده بدی است اما در اینجا واقعاً خوب است. دلیل این امر این است که ما در واقع از نماها در __init__.py استفاده نمی کنیم و فقط از وارد شدن ماژول اطمینان می دهیم و این کار را در پایین فایل انجام می دهیم.

کار با طرح ها (Blueprints)

اگر برنامه‌های بزرگ‌تری دارید، توصیه می‌شود آنها را به گروه‌های کوچک‌تر تقسیم کنید، جایی که هر گروه با کمک یک طرح اولیه پیاده‌سازی می‌شود. برای معرفی ملایم این موضوع به فصل Modular Applications with Blueprints از مستندات مراجعه کنید.