flask-marshmallow icon indicating copy to clipboard operation
flask-marshmallow copied to clipboard

Better Separation of Duties

Open diloreto opened this issue 2 years ago • 1 comments

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!

diloreto avatar Mar 19 '22 06:03 diloreto

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.

sirosen avatar Apr 13 '23 15:04 sirosen