flask-marshmallow
flask-marshmallow copied to clipboard
Better Separation of Duties
Hi Team - Love the repo and thank you. As you can imagine, once you begin to create larger and larger applications, the number of routes, models and schemas begin to increase, and become increasingly complex. Could you refactor your code to show how you would recommend separating your Marshmallow/SQLAlchemy Models from the main Flask app/routes? Right now you're instantiating the marshmallow object (ma
) inside the main app.py
file and then creating Marshmallow schemas below it. When you start having dozens or more tables/models this becomes unwieldy and increases the blast radius of app.py.
Thanks!
I believe the best way to show this structure would be a dedicated schemas subpackage in your project which defines the flask-marshmallow extension object. Your app factory then imports that and calls init_app
.
e.g.
# foo/schemas/__init__.py
from flask_marshmallow import Marshmallow
ma = Marshmallow()
# foo/app.py
from flask import Flask
from foo.schemas import ma
def create_app() -> Flask:
app = Flask(__name__)
ma.init_app(app)
return app
I would happily look at a PR for this and help review/refine docs, so I've marked it help wanted
.