Cách gỡ lỗi ứng dụng Flask


134

Làm thế nào bạn có nghĩa là để sửa lỗi trong Flask? In ra bàn điều khiển? Flash tin nhắn đến trang? Hoặc có một tùy chọn mạnh mẽ hơn có sẵn để tìm hiểu những gì đang xảy ra khi có sự cố?


5
Không có gì kỳ diệu về app.run()(có thể gỡ lỗi hoặc tắt). Flask hoạt động giống như bất kỳ ứng dụng python nào khác, vì vậy bạn có thể gỡ lỗi nó giống như cách bạn gỡ lỗi bất kỳ ứng dụng Python nào. Nếu bạn muốn sử dụng đăng nhập, sử dụng đăng nhập. Nếu bạn muốn in, sử dụng bản in. Bạn thậm chí có thể sử dụng một trình gỡ lỗi nếu bạn muốn.
Đánh dấu Hildreth

Câu trả lời:


128

Chạy ứng dụng trong chế độ phát triển sẽ hiển thị truy nguyên và bảng điều khiển tương tác trong trình duyệt khi có lỗi. Để chạy trong chế độ phát triển, hãy đặt FLASK_ENV=developmentbiến môi trường sau đó sử dụng flask runlệnh (hãy nhớ trỏ FLASK_APPđến ứng dụng của bạn).

Đối với Linux, Mac, Hệ thống con Linux cho Windows, Git Bash trên Windows, v.v.:

export FLASK_APP=myapp
export FLASK_ENV=development
flask run

Đối với Windows CMD, sử dụng setthay vì xuất:

set FLASK_ENV=development

Đối với PowerShell, hãy sử dụng $env:

$env:FLASK_ENV = "development"

Trước Flask 1.0, điều này đã được điều khiển bởi FLASK_DEBUG=1biến môi trường.

Nếu bạn đang sử dụng app.run()phương thức thay vì flask runlệnh, hãy vượt qua debug=Trueđể bật chế độ gỡ lỗi.

Tracebacks cũng được in tới thiết bị đầu cuối chạy máy chủ, bất kể chế độ phát triển.

Nếu bạn đang sử dụng PyCharm, VS Code, v.v., bạn có thể tận dụng trình gỡ lỗi của nó để bước qua mã với các điểm dừng. Cấu hình chạy có thể trỏ đến một lệnh gọi tập lệnh app.run(debug=True, use_reloader=False)hoặc trỏ nó vào venv/bin/flasktập lệnh và sử dụng nó như bạn làm từ dòng lệnh. Bạn có thể để trình tải lại bị vô hiệu hóa, nhưng tải lại sẽ giết bối cảnh gỡ lỗi và bạn sẽ phải bắt lại điểm dừng.

Bạn cũng có thể sử dụng pdb, pudb hoặc trình gỡ lỗi thiết bị đầu cuối khác bằng cách gọi set_tracetrong chế độ xem bạn muốn bắt đầu gỡ lỗi.


Hãy chắc chắn không sử dụng quá rộng trừ các khối. Bao quanh tất cả mã của bạn với một cái bắt tất cả try... except...sẽ làm im lặng lỗi bạn muốn gỡ lỗi. Nói chung, không cần thiết, vì Flask sẽ xử lý các trường hợp ngoại lệ bằng cách hiển thị trình gỡ lỗi hoặc lỗi 500 và in dấu vết lên bảng điều khiển.


38

Bạn có thể sử dụng app.run(debug=True)để chỉnh sửa Trình gỡ lỗi Werkzeug như được đề cập dưới đây và tôi nên biết.


7
Trên thực tế, khi bạn chạy với debug=Truebạn thực sự đang sử dụng trình gỡ lỗi Werkzeug, do đó, đây không phải là một hoặc hoặc ;-)
Sean Vieira

Ha, bạn nói đúng. Tôi đoán tôi nên đã xem thiết lập của Flask cho các yêu cầu. Tôi sử dụng một bản sao đã sửa đổi của nó để làm việc theo GAE nơi bạn phải khởi tạo Werkzeug theo cách thủ công.
bnlucas

Tôi đã đặt app.run (debug = True), nếu tôi in xyz, nó sẽ in ở đâu, cảm ơn
Kimmy

Sử dụng print 'xyz'sẽ in ra bàn điều khiển. Nếu bạn muốn gỡ lỗi trong trình duyệt, bạn sẽ cần phải sửa lỗi về nơi bạn muốn gỡ lỗi. raise Exception('xyz'). Điều này sẽ kích hoạt gỡ lỗi để đầu ra trong cửa sổ trình duyệt.
bnlucas

25

Từ 1.1.xtài liệu này , bạn có thể kích hoạt chế độ gỡ lỗi bằng cách xuất một biến môi trường sang dấu nhắc shell của bạn:

export FLASK_APP=/daemon/api/views.py  # path to app
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0

4
Câu trả lời này sẽ hữu ích hơn nếu nó giải thích chế độ gỡ lỗi thực sự là gì. Nó có làm nhiều hơn là cho phép gỡ lỗi trong trình duyệt không? Thật không may, vì tôi đang làm việc trên API REST, điều đó không thực sự giúp tôi nhiều.
Michael Scheper

Tôi đặt đoạn trích đó ở đâu?
mLstudent33

1
@ mLstudent33 trong một cái vỏ
Édouard Lopez

15

Người ta cũng có thể sử dụng tiện ích mở rộng Thanh công cụ gỡ lỗi Flask để có được thông tin chi tiết hơn được nhúng trong các trang được hiển thị.

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>"

Bắt đầu ứng dụng như sau:

FLASK_APP=main.py FLASK_DEBUG=1 flask run

12

Nếu bạn đang sử dụng Visual Studio Code, hãy thay thế

app.run(debug=True)

với

app.run()

Nó xuất hiện khi bật trình gỡ lỗi nội bộ sẽ vô hiệu hóa trình gỡ lỗi VS Code.


3
Bạn có thể chia sẻ một ví dụ về một thiết lập làm việc? Tôi đã xác định FLASK_APP trong env của mình và cấu hình mặc định sẽ không hoạt động. Tôi đã thử cái này - pastebin.com/v8hBQ2vv và một số hoán vị tương tự, nhưng không có kết quả.
Brandon Dube

12

Nếu bạn muốn gỡ lỗi ứng dụng bình của mình thì chỉ cần vào thư mục chứa ứng dụng bình. Đừng quên kích hoạt môi trường ảo của bạn và dán các dòng trong bảng điều khiển thay đổi "tên chính" vào tệp chính của bình.

export FLASK_APP="mainfilename.py"
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0

Sau khi bạn bật trình gỡ lỗi cho ứng dụng bình, hầu hết mọi lỗi sẽ được in trên bảng điều khiển hoặc trên cửa sổ trình duyệt. Nếu bạn muốn tìm hiểu điều gì đang xảy ra, bạn có thể sử dụng các câu lệnh in đơn giản hoặc bạn cũng có thể sử dụng console.log () cho mã javascript.


5

Cài đặt python-dotenvtrong môi trường ảo của bạn.

Tạo một .flaskenv trong thư mục gốc của dự án của bạn. Theo gốc dự án, ý tôi là thư mục chứa tệp app.txt của bạn

Bên trong tập tin này viết như sau:

FLASK_APP=myapp 
FLASK_ENV=development

Bây giờ ban hành lệnh sau:

flask run

Không hoạt động với tôi ... nó tiếp tục hiển thị chế độ Gỡ lỗi: tắt
Federico Gentile

3

Để kích hoạt chế độ gỡ lỗi trong bình bạn chỉ cần gõ thiết FLASK_DEBUG=1trên của bạn CMDcho các cửa sổ và xuất khẩu FLASK_DEBUG=1trên Linux termial sau đó khởi động lại ứng dụng của bạn và bạn tốt để đi !!


2

Mẹo nhanh - nếu bạn sử dụng PyCharm, hãy truy cập Edit Configurations=> Configurationsvà bật FLASK_DEBUGhộp kiểm, khởi động lại Run.


2
Bạn có thể muốn thêm rằng hộp kiểm này chỉ khả dụng trong PyCharm Professional. Tham khảo: jetbrains.com/help/pycharm/ từ
cyroxx

1

Sử dụng logger và in báo cáo trong Môi trường phát triển, bạn có thể đi gửi trong trường hợp môi trường sản xuất.


1

Đối với người dùng Windows:

Mở Powershell và cd vào thư mục dự án của bạn.

Sử dụng các lệnh này trong Powershell, tất cả những thứ khác sẽ không hoạt động trong Powershell.

$env:FLASK_APP = "app"  
$env:FLASK_ENV = "development"

-1

Nếu bạn đang chạy nó cục bộ và muốn có thể bước qua mã:

python -m pdb script.py


Điều này hoàn toàn không áp dụng cho các ứng dụng bình
CornSmith
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.