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

87 lines
1.8 KiB
Markdown

# Flask template
> Simple flask template
## Running
```sh
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](https://pypi.org/project/gunicorn/):
```sh
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`:
```py
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
```sh
flask hello
```
Or whatever your custom subcommand is.
## Linting and Formatting
Use the following tools:
- Black: <https://pypi.org/project/black/>
- Isort: <https://pypi.org/project/isort/>
- Pyright: <https://pypi.org/project/pyright/>
- Flake8: <https://pypi.org/project/flake8/>
- Mypy: <https://pypi.org/project/mypy/>