Hello everyone at DEV, I am a self-taught web developer and a learner. Recently I switched to developing web apps in Python and using Python as my server side programming language the two most popular and pretty obvious web frameworks are: Flask and Django. So, I gave both of them a try and made a similar project on both these frameworks using a relatively easy to configure database(i.e SQLite) which won't require a dedicated server to run and work in development.
Both come with the support for Jinja2 template engine and it was the same HTML markup on both. No difference here, even though Django has its own template language it isn't much different from Jinja2.
While Flask is lightweight but it misses on preloaded tools. Unlike Flask, Django comes with numerous ready to use tools out-of-the-box which makes development quicker than Flask.
In terms of project layout and structure Django focuses on building projects which hosts multiple applications whereas Flask focuses on building a single application and add required views and models to the single app.
Flask was easy to learn as compared to Django, it is described as a micro-web framework and referred to as more "PYTHONIC" in nature. Django comes with preloaded tools which is great and doesn't require use of third party libraries but this doesn't enable the flexibility which flask achieves by offering extensibility.
Both have the support for a great and robust ORM system which supports popular databases like MySQL, PostgreSQL etc , Django has a built in ORM which Flask doesn't. If you were to perform these operations you would install another popular python package called "SQLAlchemy".
The biggest advantage that I felt Django had over Flask was the included Admin interface which makes creating a superuser super easy. It also allows customizing the interface and user management from the panel .
In terms of support for security and authentication Django again has builtin modules , you will have to use extensions like Flask-Login, Flask-Security for account management and authorization in Flask.
In term's of performance I didn't really see much of a difference and honestly can't say much.