85 lines
2.7 KiB
Markdown
85 lines
2.7 KiB
Markdown
|
```
|
||
|
Menu = Imp/Introduction
|
||
|
Title = Quart-Imp Introduction
|
||
|
```
|
||
|
|
||
|
Quart-Imp is a Quart extension that provides auto import methods for various Quart resources. It will import
|
||
|
blueprints, and other resources. It uses the importlib module to achieve this.
|
||
|
|
||
|
Quart-Imp favors the application factory pattern as a project structure, and is opinionated towards using
|
||
|
Blueprints. However, you can use Quart-Imp without using Blueprints.
|
||
|
|
||
|
Here's an example of a standard Quart-Imp project structure:
|
||
|
|
||
|
```text
|
||
|
app/
|
||
|
├── blueprints/
|
||
|
│ ├── admin/...
|
||
|
│ ├── api/...
|
||
|
│ └── www/...
|
||
|
├── resources/
|
||
|
│ ├── filters/...
|
||
|
│ ├── context_processors/...
|
||
|
│ ├── static/...
|
||
|
│ └── templates/...
|
||
|
└── __init__.py
|
||
|
```
|
||
|
|
||
|
Here's an example of the `app/__init__.py` file:
|
||
|
|
||
|
```python
|
||
|
from quart import Quart
|
||
|
from quart_sqlalchemy import SQLAlchemy
|
||
|
from quart_imp import Imp
|
||
|
from quart_imp.config import QuartConfig, ImpConfig
|
||
|
|
||
|
db = SQLAlchemy()
|
||
|
imp = Imp()
|
||
|
|
||
|
|
||
|
def create_app():
|
||
|
app = Quart(__name__)
|
||
|
QuartConfig(
|
||
|
secret_key="super_secret_key",
|
||
|
app_instance=app,
|
||
|
)
|
||
|
|
||
|
imp.init_app(app, config=ImpConfig(
|
||
|
init_session={"logged_in": False},
|
||
|
))
|
||
|
imp.import_app_resources("resources")
|
||
|
imp.import_blueprints("blueprints")
|
||
|
|
||
|
db.init_app(app)
|
||
|
|
||
|
return app
|
||
|
```
|
||
|
|
||
|
The Quart configuration can be loaded from any standard Quart configuration method, or from the `QuartConfig` class
|
||
|
shown above.
|
||
|
|
||
|
This class contains the standard Quart configuration options found in the Quart documentation.
|
||
|
|
||
|
The `ImpConfig` class is used to configure the `Imp` instance.
|
||
|
|
||
|
The `init_session` option of the `ImpConfig` class is used to set the initial session variables for the Quart app.
|
||
|
This happens before the request is processed.
|
||
|
|
||
|
`ImpConfig` also has the ability to set `SQLALCHEMY_DATABASE_URI` and `SQLALCHEMY_BINDS`
|
||
|
|
||
|
For more information about the configuration setting see
|
||
|
[quart_imp_config-impconfig.md](quart_imp_config-impconfig.html).
|
||
|
|
||
|
`import_app_resources` will walk one level deep into the `resources` folder, and import
|
||
|
all `.py` files as modules.
|
||
|
It will also check for the existence of a `static` and `templates` folder, and register them with the Quart app.
|
||
|
|
||
|
There is a couple of options for `import_app_resources` to control what
|
||
|
is imported, see: [Imp / import_app_resources](imp-import_app_resources.html)
|
||
|
|
||
|
`import_blueprints` expects a folder that contains many Blueprint as Python packages.
|
||
|
It will check each blueprint folder's `__init__.py` file for an instance of a Quart Blueprint or a
|
||
|
Quart-Imp Blueprint. That instant will then be registered with the Quart app.
|
||
|
|
||
|
See more about how importing blueprints work here: [ImpBlueprint / Introduction](impblueprint-introduction.html)
|