87 lines
1.8 KiB
Markdown
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/>
|