برنامه های بزرگ به عنوان بسته¶
یک ساختار کاربردی فلاسک ساده را تصور کنید که شبیه به این است:
/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
ما از این چه چیزی به دست آوردیم؟ اکنون می توانیم برنامه را کمی به چندین ماژول تغییر ساختار دهیم. تنها چیزی که باید به خاطر بسپارید چک لیست سریع زیر است:
ایجاد شی برنامه Flask باید در فایل
__init__.py
باشد. به این ترتیب هر ماژول می تواند آن را با خیال راحت وارد کند و متغیر __name__ به بسته صحیح حل می شود.همه توابع نما(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 از مستندات مراجعه کنید.