flask/README.md
Arija A. a6c8243ddd
Add memcached and rate limiting
Signed-off-by: Arija A. <ari@ari.lt>
2025-08-08 03:47:17 +03:00

1.8 KiB

Flask template

Simple flask template

Running

python3 -m venv venv
source venv/bin/activate
source .env  # see example.env
pip install -r requirements.txt
cd src
memcached -d
# If you remove migrations/:
# flask db init
# vim migrations/script.py.mako (add import flask_app)
# flask db migrate -m 'Initial migration'
flask db upgrade
flask run

For production use a WSGI server such as Gunicorn:

python3 -m venv venv
source venv/bin/activate
source .env  # see example.env
pip install -r requirements.txt
pip install --upgrade gunicorn
cd src
memcached -d
flask db upgrade
python3 -m gunicorn -b 127.0.0.1:12345 -w 4 app:app  # ... Or whatever your configuration is

I don't want a generic flask_app module name

Run python3 rename.py <new_module_name>, for example, python3 rename.py my_app :)

I need custom subcommands

In src/flask_app/__init__.py you can register your custom flask subcommands using click:

import click
import flask


@click.command("hello")
def cmd_hello() -> None:
    """Print hello"""
    print("Hello!")


def create_app(name: str) -> flask.Flask:
    ...

    app: flask.Flask = flask.Flask(name)

    ...

    # Commands

    app.cli.add_command(create_counter)

    ...

    return app

If you have a lot of custom commands it is advised you move your commands to a file called commands.py or alike, then register them as usual using app.cli.add_command. To run these subcommands you would simply do

flask hello

Or whatever your custom subcommand is.

Linting and Formatting

Use the following tools: