Dalam Flask 0,11 flask
CLI diperkenalkan. Kedua dokumen dan negara changelog ini direkomendasikan.
Dimulai dengan Flask 0.11 ada beberapa cara built-in untuk menjalankan server pengembangan. Yang terbaik adalah utilitas baris perintah labu tetapi Anda juga dapat terus menggunakan
Flask.run()
metode ini.Garis komando
The termos baris perintah skrip (Command Line Interface) sangat disarankan untuk pengembangan karena memberikan pengalaman ulang unggul karena bagaimana itu beban aplikasi. Penggunaan dasar seperti ini:
$ export FLASK_APP=my_application $ export FLASK_DEBUG=1 $ flask run
- Ditambahkan
flask
danflask.cli
modul untuk memulai server debug lokal melalui sistem klik CLI. Ini direkomendasikan daripadaflask.run()
metode lama karena bekerja lebih cepat dan lebih dapat diandalkan karena desain yang berbeda dan juga digantiFlask-Script
.
Sejauh ini saya tidak melihat "pengalaman reload superior" ini. Saya gagal melihat titik menggunakan CLI di atas skrip khusus.
Jika menggunakan Flask.run
, saya cukup menulis file python:
#!/usr/bin/env python3
from my_app import app
if __name__ == '__main__':
app.run(debug=True)
Jika menggunakan CLI, seseorang harus menentukan variabel lingkungan. Dalam dokumen CLI dinyatakan bahwa ini dapat diintegrasikan dalam activate
skrip virtualenvwrapper. Secara pribadi saya menganggap ini sebagai bagian dari aplikasi dan berpikir itu harus di bawah kontrol versi. Sayangnya, skrip shell diperlukan:
#!/usr/bin/env bash
export FLASK_APP=my_app:app
export FLASK_DEBUG=1
flask run
Tentu saja ini akan disertai dengan skrip kelelawar tambahan segera setelah pengguna Windows mulai berkolaborasi.
Juga opsi pertama memungkinkan pengaturan ditulis dengan Python sebelum memulai aplikasi yang sebenarnya.
Ini memungkinkan misalnya
- untuk mengurai argumen baris perintah dengan Python
- untuk mengatur logging sebelum menjalankan aplikasi
Mereka tampaknya mempromosikan bahwa mungkin untuk menambahkan perintah khusus. Saya gagal melihat mengapa ini lebih baik daripada menulis skrip Python sederhana, opsional diekspos melalui titik masuk.
Contoh mencatat hasil saat menggunakan logger yang dikonfigurasi menggunakan skrip run 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
Contoh logging output ketika menggunakan logger yang dikonfigurasi menggunakan CLI :, perhatikan bahwa root logger tidak dapat diatur cukup awal dalam proses.
$ ./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
Pertanyaan saya sebenarnya adalah:
Mengapa labu CLI direkomendasikan Flask.run
?
FLASK_APP
? Apakah itu intrinsik dengan cara kerjanya? Saya ingin tahu mengapaflask run
tidak menerima yang sama dengan argumen, yang akan membuat pendatang baru yang lebih mudah. Terima kasih.