A robust template for Flask applications.
[..] Put water into a bottle it becomes the bottle.
- Python 3.8 as a base.
- Clean and organised structure for a medium size or large web project.
- Staying close to the 12 Factor App ideals.
- Well configured Flask CLI tool for user friendliness.
- Integrated Konch and DebugToolbar for easier debugging.
- Project configuration based on environs for automatic validation and type conversion.
- Development configuration using direnv, overridable by environment variables.
- Serving dynamically rendered HTML page and example static files with pure Flask. Example template.
- Example API endpoints in two flavours: Flask-RESTful and flask-smorest.
- Support for PostgreSQL database and ORM models using SQLAlchemy. Example model.
- Support for migrations with alembic. Example migration.
- Support for background tasks with dramatiq. Example task.
- Configuration for running on Heroku cloud.
- Separate production, testing and development requirements.
- Easy testing with tox and py.test. Example tests.
- Support for fast and efficient testing of database code using transactions and parallel workers.
- Basic code linting with black, flake8 and isort.
- Github Actions testing with Python application setup.
- Easy entry vector for WSGI servers, demonstrated with Gunicorn.
- Dockerfile to build a minimal¸ production-ready Docker image.
- Rudimentary definition for Docker Compose to launch the complete project.
- Practical CRUD UI using Flask-Admin.
- EditorConfig support.
Note: Ensure you have a working system Docker installation.
Install Docker Compose:
$ pip install -U docker-compose
Start the complete stack in a standard way:
$ docker-compose up --build --detach
Check the logs
$ docker-compose logs --follow
Note: Ensure you have a working Python 3.8 installation.
Create a virtualenv:
$ virtualenv -p `which python3.8` .env
Install dependencies:
$ source .env/bin/activate
$ pip install -Ur requirements.txt
Prepare the environment (direnv has to be preinstalled):
$ cp envrc.example .envrc
$ direnv edit
Run the development web server:
$ flask run
Install the tooling:
$ pip install -U tox
Run the tests
$ tox