ใน Flask 0.11 มีการflask
แนะนำ CLI ขอแนะนำให้ใช้ทั้งเอกสารและสถานะการเปลี่ยนแปลง
เริ่มต้นด้วย Flask 0.11 มีหลายวิธีในการรันเซิร์ฟเวอร์การพัฒนา ที่ดีที่สุดคือโปรแกรมอรรถประโยชน์บรรทัดคำสั่งของขวดแต่คุณยังสามารถใช้
Flask.run()
วิธีการต่อบรรทัดคำสั่ง
ขวดสคริปต์บรรทัดคำสั่ง (บรรทัดคำสั่ง Interface) ขอแนะนำอย่างยิ่งสำหรับการพัฒนาเพราะมีประสบการณ์ที่เหนือกว่าโหลดเนื่องจากวิธีการโหลดแอพลิเคชัน การใช้งานพื้นฐานมีดังนี้:
$ export FLASK_APP=my_application $ export FLASK_DEBUG=1 $ flask run
- เพิ่ม
flask
และflask.cli
โมดูลเพื่อเริ่มต้นเซิร์ฟเวอร์ดีบักโลคัลผ่านระบบคลิก CLI แนะนำให้ใช้กับflask.run()
วิธีเก่าเนื่องจากทำงานได้เร็วขึ้นและเชื่อถือได้มากขึ้นเนื่องจากมีการออกแบบที่แตกต่างและแทนที่Flask-Script
ด้วย
จนถึงตอนนี้ฉันไม่ได้สังเกตุว่า "ประสบการณ์รีโหลดที่เหนือกว่า" ฉันไม่เห็นจุดใช้ CLI เหนือสคริปต์ที่กำหนดเอง
ถ้าใช้Flask.run
ฉันก็จะเขียนไฟล์หลาม:
#!/usr/bin/env python3
from my_app import app
if __name__ == '__main__':
app.run(debug=True)
หากใช้ CLI จะต้องระบุตัวแปรสภาพแวดล้อม ในเอกสารของ CLI ระบุว่าสิ่งนี้สามารถรวมเข้ากับactivate
สคริปต์ของ virtualenvwrapper ส่วนตัวฉันถือว่านี่เป็นส่วนหนึ่งของแอปพลิเคชันและคิดว่ามันควรจะอยู่ภายใต้การควบคุมเวอร์ชัน อนิจจาจำเป็นต้องใช้เชลล์สคริปต์:
#!/usr/bin/env bash
export FLASK_APP=my_app:app
export FLASK_DEBUG=1
flask run
แน่นอนว่าสิ่งนี้จะมาพร้อมกับสคริปต์ค้างคาวเพิ่มเติมทันทีที่ผู้ใช้ Windows คนใดคนหนึ่งเริ่มทำงานร่วมกัน
นอกจากนี้ตัวเลือกแรกยังอนุญาตให้ติดตั้งเขียนใน Python ก่อนเริ่มแอพจริง
สิ่งนี้ยอมให้ตัวอย่าง
- เพื่อแยกอาร์กิวเมนต์บรรทัดคำสั่งใน Python
- เพื่อตั้งค่าการบันทึกก่อนเรียกใช้แอพ
ดูเหมือนว่าพวกเขาส่งเสริมว่าเป็นไปได้ที่จะเพิ่มคำสั่งที่กำหนดเอง ฉันล้มเหลวที่จะดูว่าทำไมสิ่งนี้จึงดีกว่าการเขียนสคริปต์ Python แบบง่าย ๆ ซึ่งมีทางเลือกให้เปิดเผยผ่านจุดเข้าใช้งาน
ตัวอย่างเอาต์พุตการบันทึกเมื่อใช้ตัวบันทึกที่กำหนดค่าโดยใช้สคริปต์การเรียกใช้ 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
ตัวอย่างเอาต์พุตการบันทึกเมื่อใช้ตัวบันทึกที่กำหนดค่าโดยใช้ CLI: โปรดสังเกตว่าตัวบันทึกรากไม่สามารถตั้งค่าได้เร็วพอในกระบวนการ
$ ./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
คำถามจริงของฉันคือ:
ทำไมขวด CLI ถึงแนะนำมากกว่าFlask.run
?