W Flask 0.11 wprowadzono flask
CLI. Zarówno dokumentacja, jak i dziennik zmian są zalecane.
Dokumentacja serwera deweloperskiego :
Począwszy od wersji Flask 0.11 istnieje wiele wbudowanych sposobów uruchamiania serwera programistycznego. Najlepszym z nich jest narzędzie wiersza polecenia flask , ale można również kontynuować korzystanie z tej
Flask.run()
metody.Wiersz poleceń
Kolba skrypt z linii poleceń (Command Line Interface) jest zalecane dla rozwoju, ponieważ zapewnia doskonałe wrażenia przeładowania ze względu na to, jak ładuje aplikację. Podstawowe użycie wygląda następująco:
$ export FLASK_APP=my_application $ export FLASK_DEBUG=1 $ flask run
- Dodano
flask
iflask.cli
moduł do uruchamiania lokalnego serwera debugowania poprzez system CLI kliknięcia. Jest to zalecane w porównaniu ze starąflask.run()
metodą, ponieważ działa szybciej i bardziej niezawodnie z powodu innej konstrukcji, a także zastępujeFlask-Script
.
Do tej pory nie zauważyłem tego „lepszego przeładowania”. Nie widzę sensu używania CLI w skrypcie niestandardowym.
Jeśli używasz Flask.run
, po prostu napisałbym plik python:
#!/usr/bin/env python3
from my_app import app
if __name__ == '__main__':
app.run(debug=True)
Jeśli używasz CLI, musisz określić zmienne środowiskowe. W dokumentach CLI stwierdzono, że można to zintegrować ze activate
skryptem virtualenvwrapper. Osobiście uważam, że jest to część aplikacji i uważam, że powinna być pod kontrolą wersji. Niestety, potrzebny jest skrypt powłoki:
#!/usr/bin/env bash
export FLASK_APP=my_app:app
export FLASK_DEBUG=1
flask run
Oczywiście będzie mu towarzyszyć dodatkowy skrypt nietoperzy, gdy tylko użytkownicy systemu Windows zaczną współpracować.
Również pierwsza opcja pozwala na instalację napisaną w Pythonie przed uruchomieniem właściwej aplikacji.
To pozwala na przykład
- parsować argumenty wiersza poleceń w Pythonie
- skonfigurować rejestrowanie przed uruchomieniem aplikacji
Wydają się promować, że można dodawać własne polecenia. Nie rozumiem, dlaczego jest to lepsze niż pisanie prostych skryptów w języku Python, opcjonalnie udostępnianych przez punkty wejścia.
Przykładowe dane wyjściowe rejestrowania przy korzystaniu ze skonfigurowanego rejestratora przy użyciu skryptu uruchamiania Python:
$ ./run.py
DEBUG 21:51:22 main.py:95) Configured logging
INFO 21:51:22 _internal.py:87) * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
INFO 21:51:22 _internal.py:87) * Restarting with inotify reloader
DEBUG 21:51:22 main.py:95) Configured logging
WARNING 21:51:22 _internal.py:87) * Debugger is active!
INFO 21:51:22 _internal.py:87) * Debugger pin code: 263-225-431
DEBUG 21:51:25 inotify_buffer.py:61) in-event <InotifyEvent: src_path=b'my_app/main.py', wd=272, mask=IN_MODIFY, cookie=0, name=b'main.py'>
DEBUG 21:51:25 inotify_buffer.py:61) in-event <InotifyEvent: src_path=b'my_app/main.py', wd=272, mask=IN_MODIFY, cookie=0, name=b'main.py'>
INFO 21:51:25 _internal.py:87) * Detected change in 'my_app/main.py', reloading
INFO 21:51:26 _internal.py:87) * Restarting with inotify reloader
DEBUG 21:51:26 main.py:95) Configured logging
WARNING 21:51:26 _internal.py:87) * Debugger is active!
INFO 21:51:26 _internal.py:87) * Debugger pin code: 263-225-431
Przykładowe dane wyjściowe rejestrowania przy korzystaniu ze skonfigurowanego rejestratora za pomocą interfejsu CLI: zauważ, że rejestrator root nie mógł zostać skonfigurowany wystarczająco wcześnie.
$ ./run.sh
* Serving Flask app "appsemble.api.main:app"
* Forcing debug mode on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with inotify reloader
DEBUG 21:51:33 main.py:95) Configured logging
* Debugger is active!
* Debugger pin code: 187-758-498
DEBUG 21:51:34 main.py:95) Configured logging
DEBUG 21:51:37 inotify_buffer.py:61) in-event <InotifyEvent: src_path=b'my_app/main.py', wd=272, mask=IN_MODIFY, cookie=0, name=b'main.py'>
DEBUG 21:51:37 inotify_buffer.py:61) in-event <InotifyEvent: src_path=b'my_app/main.py', wd=272, mask=IN_MODIFY, cookie=0, name=b'main.py'>
* Detected change in 'my_app/main.py', reloading
INFO 21:51:37 _internal.py:87) * Detected change in 'my_app/main.py', reloading
* Restarting with inotify reloader
INFO 21:51:38 _internal.py:87) * Restarting with inotify reloader
* Debugger is active!
* Debugger pin code: 187-758-498
DEBUG 21:51:38 main.py:95) Configured logging
Moje aktualne pytanie brzmi:
Dlaczego zalecana jest kolba CLI Flask.run
?
FLASK_APP
? Czy to jest nieodłączne od tego, jak to działa? Jestem ciekawy, dlaczegoflask run
nie akceptuje tego samego jako argumentu, co ułatwiłoby dołączanie nowych użytkowników. Dziękuję Ci.