คุณตั้งใจจะแก้ไขข้อผิดพลาดใน Flask อย่างไร? พิมพ์ไปที่คอนโซล? ข้อความแฟลชไปยังเพจ? หรือมีตัวเลือกที่ทรงพลังกว่านี้เพื่อดูว่าเกิดอะไรขึ้นเมื่อมีอะไรผิดพลาด?
คุณตั้งใจจะแก้ไขข้อผิดพลาดใน Flask อย่างไร? พิมพ์ไปที่คอนโซล? ข้อความแฟลชไปยังเพจ? หรือมีตัวเลือกที่ทรงพลังกว่านี้เพื่อดูว่าเกิดอะไรขึ้นเมื่อมีอะไรผิดพลาด?
คำตอบ:
การเรียกใช้แอปในโหมดการพัฒนาจะแสดงการย้อนกลับแบบโต้ตอบและคอนโซลในเบราว์เซอร์เมื่อมีข้อผิดพลาด หากต้องการเรียกใช้ในโหมดการพัฒนาให้ตั้งค่าFLASK_ENV=development
ตัวแปรสภาพแวดล้อมจากนั้นใช้flask run
คำสั่ง (อย่าลืมชี้FLASK_APP
ไปที่แอปของคุณด้วย)
สำหรับ Linux, Mac, Linux Subsystem สำหรับ Windows, Git Bash บน Windows ฯลฯ :
export FLASK_APP=myapp
export FLASK_ENV=development
flask run
สำหรับ Windows CMD ให้ใช้set
แทนการส่งออก:
set FLASK_ENV=development
สำหรับ PowerShell ให้ใช้$env
:
$env:FLASK_ENV = "development"
ก่อนหน้า Flask 1.0 สิ่งนี้ถูกควบคุมโดยFLASK_DEBUG=1
ตัวแปรสภาพแวดล้อมแทน
หากคุณใช้app.run()
วิธีนี้แทนflask run
คำสั่งให้ส่งผ่านdebug=True
เพื่อเปิดใช้งานโหมดดีบัก
ระบบจะพิมพ์ Tracebacks ไปยังเทอร์มินัลที่รันเซิร์ฟเวอร์โดยไม่คำนึงถึงโหมดการพัฒนา
หากคุณใช้ PyCharm, VS Code และอื่น ๆ คุณสามารถใช้ประโยชน์จากดีบักเกอร์เพื่อก้าวผ่านโค้ดด้วยเบรกพอยต์ การกำหนดค่าการรันสามารถชี้ไปที่การเรียกสคริปต์app.run(debug=True, use_reloader=False)
หรือชี้ไปที่venv/bin/flask
สคริปต์และใช้ตามที่คุณต้องการจากบรรทัดคำสั่ง คุณสามารถปล่อยให้ตัวโหลดซ้ำถูกปิดใช้งาน แต่การโหลดซ้ำจะฆ่าบริบทการดีบักและคุณจะต้องจับเบรกพอยต์อีกครั้ง
คุณยังสามารถใช้ pdb, pudb หรือเทอร์มินัลดีบักเกอร์อื่นได้โดยเรียกใช้set_trace
ในมุมมองที่คุณต้องการเริ่มการดีบัก
อย่าใช้กว้างเกินไปยกเว้นบล็อก การล้อมรอบโค้ดทั้งหมดของคุณด้วยการจับทั้งหมดtry... except...
จะปิดเสียงข้อผิดพลาดที่คุณต้องการแก้ไข โดยทั่วไปไม่จำเป็นเนื่องจาก Flask จะจัดการข้อยกเว้นอยู่แล้วโดยการแสดงดีบักเกอร์หรือข้อผิดพลาด 500 และพิมพ์การตรวจสอบย้อนกลับไปยังคอนโซล
คุณสามารถใช้app.run(debug=True)
สำหรับการแก้ไขWerkzeug Debugger ดังที่กล่าวไว้ด้านล่างและฉันควรจะรู้
debug=True
คุณกำลังใช้ดีบักเกอร์ Werkzeug ดังนั้นจึงไม่ใช่อย่างใดอย่างหนึ่งหรือ ;-)
print 'xyz'
จะพิมพ์ไปที่คอนโซล หากคุณต้องการแก้ไขข้อบกพร่องในเบราว์เซอร์คุณจะต้องบังคับให้เกิดข้อผิดพลาดที่คุณต้องการแก้ไขข้อบกพร่อง raise Exception('xyz')
. สิ่งนี้จะทริกเกอร์การดีบักให้แสดงผลในหน้าต่างเบราว์เซอร์
จาก1.1.x
เอกสารประกอบคุณสามารถเปิดใช้งานโหมดดีบักโดยการเอ็กซ์พอร์ตตัวแปรสภาพแวดล้อมไปยังเชลล์พร้อมต์ของคุณ:
export FLASK_APP=/daemon/api/views.py # path to app
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0
คุณยังสามารถใช้ส่วนขยายFlask Debug Toolbarเพื่อรับข้อมูลรายละเอียดเพิ่มเติมที่ฝังอยู่ในหน้าที่แสดงผล
from flask import Flask
from flask_debugtoolbar import DebugToolbarExtension
import logging
app = Flask(__name__)
app.debug = True
app.secret_key = 'development key'
toolbar = DebugToolbarExtension(app)
@app.route('/')
def index():
logging.warning("See this message in Flask Debug Toolbar!")
return "<html><body></body></html>"
เริ่มแอปพลิเคชันดังนี้:
FLASK_APP=main.py FLASK_DEBUG=1 flask run
หากคุณใช้ Visual Studio Code ให้แทนที่
app.run(debug=True)
กับ
app.run()
ปรากฏขึ้นเมื่อเปิดดีบักเกอร์ภายในปิดใช้งานดีบักเกอร์ VS Code
หากคุณต้องการดีบักแอพขวดของคุณให้ไปที่โฟลเดอร์ที่แอพขวดอยู่ อย่าลืมเปิดใช้งานสภาพแวดล้อมเสมือนของคุณและวางบรรทัดในคอนโซลเปลี่ยน "mainfilename" เป็นไฟล์หลักของขวด
export FLASK_APP="mainfilename.py"
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0
หลังจากที่คุณเปิดใช้งานดีบักเกอร์สำหรับแอป flask ข้อผิดพลาดเกือบทั้งหมดจะถูกพิมพ์บนคอนโซลหรือบนหน้าต่างเบราว์เซอร์ หากคุณต้องการทราบว่าเกิดอะไรขึ้นคุณสามารถใช้คำสั่งพิมพ์อย่างง่ายหรือคุณสามารถใช้ console.log () สำหรับโค้ดจาวาสคริปต์
ติดตั้งpython-dotenv
ในสภาพแวดล้อมเสมือนของคุณ
สร้าง. flaskenv ในรูทโปรเจ็กต์ของคุณ ตามรูทโปรเจ็กต์ฉันหมายถึงโฟลเดอร์ที่มีไฟล์ app.py ของคุณ
ภายในไฟล์นี้เขียนสิ่งต่อไปนี้:
FLASK_APP=myapp
FLASK_ENV=development
ตอนนี้ออกคำสั่งต่อไปนี้:
flask run
ในการเปิดใช้งานโหมดดีบักในขวดคุณเพียงแค่พิมพ์ set FLASK_DEBUG=1
บนCMD
windows ของคุณและส่งออกFLASK_DEBUG=1
บน Linux termial จากนั้นรีสตาร์ทแอพของคุณและคุณก็พร้อมแล้ว !!
เคล็ดลับด่วน - หากคุณใช้ PyCharm ให้ไปที่Edit Configurations
=> Configurations
และเปิดใช้งานFLASK_DEBUG
ช่องทำเครื่องหมายรีสตาร์ทไฟล์Run
.
ใช้ตัวบันทึกและคำสั่งการพิมพ์ในสภาพแวดล้อมการพัฒนาคุณสามารถใช้ยามในกรณีของสภาพแวดล้อมการผลิต
สำหรับผู้ใช้ Windows:
เปิด Powershell และ cd ในไดเรกทอรีโครงการของคุณ
ใช้คอมมานโดเหล่านี้ใน Powershell สิ่งอื่น ๆ ทั้งหมดจะไม่ทำงานใน Powershell
$env:FLASK_APP = "app"
$env:FLASK_ENV = "development"
หากคุณกำลังเรียกใช้งานในเครื่องและต้องการที่จะก้าวผ่านรหัส:
python -m pdb script.py
app.run()
(ไม่ว่าจะเปิดหรือปิดการแก้ปัญหา) Flask ทำงานเหมือนแอปพลิเคชัน python อื่น ๆ ดังนั้นคุณสามารถดีบักได้เช่นเดียวกับที่คุณแก้ปัญหาแอปพลิเคชัน Python หากคุณต้องการใช้การบันทึกให้ใช้การบันทึก หากต้องการพิมพ์ให้ใช้ภาพพิมพ์ คุณยังสามารถใช้ดีบักเกอร์ได้หากต้องการ