quart-imp/docs/_md/v1/Imp-Introduction.md
David Carmichael bfcc49dd8d feat: docs
2024-08-16 15:09:07 +01:00

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)