5 ms·
You can get pretty far with Flask. You'll need an ORM, so you'll likely chuck SQLAlchemy in. Then you'll want easier access to SQLAlchemy, sorta like, you know,
by tony 10y ago
You can get pretty far with Flask. You'll need an ORM, so you'll likely chuck SQLAlchemy in. Then you'll want easier access to SQLAlchemy, sorta like, you know, django does it, so you pick up https://github.com/mitsuhiko/flask-sqlalchemy https://github.com/mitsuhiko/flask-sqlalchemy.
But you can't use pure SQLAlchemy models (easily), since this otherwise great extension for flask doesn't support it (https://github.com/mitsuhiko/flask-sqlalchemy/pull/250 https://github.com/mitsuhiko/flask-sqlalchemy/pull/250, yes I'm in the thread).
You'll fork it or brew your own code to get declarative models working right. Kinda time consuming, but at least your models can be pulled in by any python code, and aren't tied down to a framework (That's what you were avoiding from the first place, wasn't it?)
Then you'll pick up WTForms (https://wtforms.readthedocs.io/en/latest/ https://wtforms.readthedocs.io/en/latest/), another excellent library. And you'll miss having Django ORM's rich form and model-backed validation. So you'll try wtforms-alchemy, https://github.com/kvesteri/wtforms-alchemy https://github.com/kvesteri/wtforms-alchemy.
Then you'll begin to see why Django makes sense after using Flask for a while. Django pulls in all the essential stuff and supports it well.
And top of that, django's addons like django-extensions (https://django-extensions.readthedocs.io https://django-extensions.readthedocs.io), which gives you Werkzeug's debugger if you use ./manage.py runserver_plus. And ./manage.py shell_plus, which integrates with ptpython/ipython/bpython (https://django-extensions.readthedocs.io/en/latest/shell_plus.html https://django-extensions.readthedocs.io/en/latest/shell_plu...).
Django rest framework, DRF for short (http://www.django-rest-framework.org/ http://www.django-rest-framework.org/), which is very mature at this stage, runs circles around Flask API. Flask API is inspired by DRF. You could also try https://flask-restful.readthedocs.io https://flask-restful.readthedocs.io, but after all that, you'll be missing that tight model support.
You'll love flask. The code is top tier and exemplary. The testsuites are a dream and are very clear. Documentation is awesome. It feels good to code in it. But django feels good to code in as well.
Django's ORM is very mature. It's easier than SQLAlchemy, and despite SQLAlchemy's purity, and documentation - even better than flask's - Django's ORM does the trick for pretty much anything, even foreign databases I've interacted with. Another thing, QuerySet's are a charm, a lot of django's addons like django-filters, django-rest-framework and django-tables2 are built on top of its versatility.
Another thing Flask community ends up having to clone from Django is django-debug-toolbar https://github.com/django-debug-toolbar/django-debug-toolbar https://github.com/django-debug-toolbar/django-debug-toolbar. See https://flask-debugtoolbar.readthedocs.io https://flask-debugtoolbar.readthedocs.io.
Again, I love flask, but when I realized that I'm just going to end up reinventing django with my flask app anyway, I started going with django on new projects. I haven't turned back, but still check out flask and sqlalchemy to see what's happening now and then.
- joeclark77 10y agoI think the first objection one would raise is that you don't need an ORM at all. It all depends on the application, of course, but ORM means giving up a lot of control (and transparency, and understanding) of your database in exchange for a few shortcuts regarding things like M:M links.
- odonnellryan 10y agoIMO, if you're using an ORM because you want many-to-many to work in a neat way, then you're using an ORM for the wrong reasons. Use an ORM because tools like this: https://marshmallow.readthedocs.io/en/latest/ https://marshmallow.readthedocs.io/en/latest/ work really well with it. And tools for migrations: https://sqlalchemy-migrate.readthedocs.io/en/latest/ https://sqlalchemy-migrate.readthedocs.io/en/latest/ start to make sense in your code. You don't need an ORM to do either of those things, but it makes things a hell of a lot more organized. Makes the database easy to understand from your code. Makes things like "testing from a blank database" really nice. You don't ever _need_ an ORM, but for 90% of projects you'll use Flask and a Database for, it makes your life a lot nicer.
- joeclark77 10y agoI actually wrote a blog post about my experimentation with ORM (here: https://joeclark.svbtle.com/understanding-the-m-in-mvc https://joeclark.svbtle.com/understanding-the-m-in-mvc). From the viewpoint of a database geek, somebody who cares about his database, those gadgets you linked are further reasons to dislike ORM, because they do more of what ORM does: take away transparency and control in exchange for "shortcuts". And what happens when those tools fail? ("migrate" is particularly screwy). No, it's a matter of philosophy. The newbie who has learned to code without ever being taught SQL, and the employee of an "agile" app sweatshop who doesn't care about the quality of his code or data, may prefer ORM for its' quick-and-dirtiness, or may use it by default because he knows no better way. I'm not saying that's wrong, but, there are other philosophies. There is the whole "craftsmanship" idea out there, that we should actually care about making things well. Jobs and Wozniak for example supposedly were adamant that the insides of Apple computers were designed well. If you care about your database and want to use special features like triggers, procedures, recursive queries in Postgres, etc., then ORM is about as helpful as clamshell packaging.