Cara debug aplikasi Flask

134

Bagaimana maksud Anda men-debug kesalahan dalam Flask? Cetak ke konsol? Pesan kilat ke halaman? Atau apakah ada opsi yang lebih kuat yang tersedia untuk mencari tahu apa yang terjadi ketika terjadi kesalahan?

Kimmy
sumber
5
Tidak ada yang ajaib tentang app.run()(baik dengan men-debug on atau off). Flask berperilaku seperti aplikasi python lainnya, sehingga Anda dapat men-debugnya dengan cara yang sama Anda men-debug aplikasi Python. Jika Anda ingin menggunakan pencatatan, gunakan pencatatan. Jika Anda ingin mencetak, gunakan cetakan. Anda bahkan dapat menggunakan debugger jika Anda mau.
Mark Hildreth

Jawaban:

128

Menjalankan aplikasi dalam mode pengembangan akan menunjukkan traceback dan konsol interaktif di browser ketika ada kesalahan. Untuk menjalankan dalam mode pengembangan, atur FLASK_ENV=developmentvariabel lingkungan lalu gunakan flask runperintah (ingat juga untuk menunjuk FLASK_APPke aplikasi Anda).

Untuk Linux, Mac, Subsistem Linux untuk Windows, Git Bash pada Windows, dll .:

export FLASK_APP=myapp
export FLASK_ENV=development
flask run

Untuk Windows CMD, gunakan setalih-alih ekspor:

set FLASK_ENV=development

Untuk PowerShell, gunakan $env:

$env:FLASK_ENV = "development"

Sebelum ke Flask 1.0, ini dikendalikan oleh FLASK_DEBUG=1variabel lingkungan sebagai gantinya.

Jika Anda menggunakan app.run()metode alih-alih flask runperintah, operasikan debug=Trueuntuk mengaktifkan mode debug.

Tracebacks juga dicetak ke terminal yang menjalankan server, terlepas dari mode pengembangan.

Jika Anda menggunakan PyCharm, VS Code, dll., Anda dapat memanfaatkan debugger-nya untuk menelusuri kode dengan breakpoints. Konfigurasi run dapat menunjuk ke pemanggilan skrip app.run(debug=True, use_reloader=False), atau mengarahkannya ke venv/bin/flaskskrip dan menggunakannya seperti yang Anda lakukan dari baris perintah. Anda dapat membiarkan reloader dinonaktifkan, tetapi reload akan mematikan konteks debugging dan Anda harus menangkap breakpoint lagi.

Anda juga dapat menggunakan pdb, pudb, atau terminal debugger lainnya dengan memanggil set_tracetampilan tempat Anda ingin memulai debugging.


Pastikan untuk tidak menggunakan terlalu luas kecuali blok. Mengitari semua kode Anda dengan catch-all try... except...akan membungkam kesalahan yang ingin Anda debug. Ini tidak perlu secara umum, karena Flask sudah akan menangani pengecualian dengan menunjukkan kesalahan debugger atau 500 dan mencetak traceback ke konsol.

davidisme
sumber
38

Anda dapat menggunakan app.run(debug=True)untuk mengedit Werkzeug Debugger seperti yang disebutkan di bawah ini, dan saya seharusnya tahu.

bnlucas
sumber
7
Sebenarnya, ketika Anda menjalankan dengan debug=TrueAnda sebenarnya menggunakan debuger Werkzeug sehingga itu bukan-atau ;-)
Sean Vieira
Ha, kamu benar. Saya kira saya harus melihat setup.py Flask untuk persyaratan. Saya menggunakan salinan yang dimodifikasi untuk bekerja di bawah GAE di mana Anda harus menginisialisasi Werkzeug secara manual.
bnlucas
Saya telah mengatur app.run (debug = True), jika saya mencetak xyz ke mana ia mencetak, terima kasih
Kimmy
Menggunakan print 'xyz'akan mencetak ke konsol. Jika Anda ingin men-debug di browser, Anda harus memaksakan kesalahan di mana Anda ingin melakukan debug. raise Exception('xyz'). Ini akan memicu debug ke output di jendela browser.
bnlucas
25

Dari 1.1.xdokumentasi , Anda dapat mengaktifkan mode debug dengan mengekspor variabel lingkungan ke prompt shell Anda:

export FLASK_APP=/daemon/api/views.py  # path to app
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0
Édouard Lopez
sumber
4
Jawaban ini akan lebih membantu jika menjelaskan apa sebenarnya mode debug. Apakah itu lebih dari sekadar mengizinkan debugging di browser? Sayangnya, karena saya sedang mengerjakan REST API, itu tidak banyak membantu saya.
Michael Scheper
Di mana saya meletakkan potongan itu?
mLstudent33
1
@ mLstudent33 dalam shell
Édouard Lopez
16

Anda juga dapat menggunakan ekstensi Flask Debug Toolbar untuk mendapatkan informasi yang lebih terperinci tertanam di halaman yang diberikan.

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

Mulai aplikasi sebagai berikut:

FLASK_APP=main.py FLASK_DEBUG=1 flask run
turdus-merula
sumber
12

Jika Anda menggunakan Visual Studio Code, ganti

app.run(debug=True)

dengan

app.run()

Itu muncul ketika menyalakan debugger internal menonaktifkan debugger Kode VS.

Eman4real
sumber
3
Bisakah Anda membagikan contoh pengaturan yang berfungsi? Saya sudah mendefinisikan FLASK_APP di env saya dan konfigurasi default tidak akan berfungsi. Saya mencoba yang satu ini - pastebin.com/v8hBQ2vv dan sejumlah permutasi yang serupa, tetapi tidak berhasil.
Brandon Dube
12

Jika Anda ingin men-debug aplikasi labu Anda maka pergi saja ke folder tempat aplikasi labu itu. Jangan lupa untuk mengaktifkan lingkungan virtual Anda dan menempelkan garis-garis di konsol ganti "mainfilename" menjadi flask file utama.

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

Setelah Anda mengaktifkan debugger untuk aplikasi labu, hampir setiap kesalahan akan dicetak di konsol atau di jendela browser. Jika Anda ingin mengetahui apa yang terjadi, Anda dapat menggunakan pernyataan cetak sederhana atau Anda juga dapat menggunakan console.log () untuk kode javascript.

omkar yadav
sumber
6

Instal python-dotenvdi lingkungan virtual Anda.

Buat .flaskenv di root proyek Anda. Dengan root proyek, maksud saya folder yang memiliki file app.py Anda

Di dalam file ini tulis yang berikut ini:

FLASK_APP=myapp 
FLASK_ENV=development

Sekarang jalankan perintah berikut:

flask run
MSS
sumber
Tidak berfungsi untuk saya ... tetap menampilkan mode Debug: off
Federico Gentile
3

Untuk mengaktifkan mode debug di dalam flask, Anda cukup mengetik FLASK_DEBUG=1di CMDwindows Anda dan mengekspor FLASK_DEBUG=1di Linux termial kemudian restart aplikasi Anda dan Anda siap pergi !!

Zahid
sumber
2

Kiat cepat - jika Anda menggunakan PyCharm, buka Edit Configurations=> Configurationsdan aktifkan FLASK_DEBUGkotak centang, mulai ulang Run.

Sgryt87
sumber
2
Anda mungkin ingin menambahkan bahwa kotak centang ini hanya tersedia di PyCharm Professional. Referensi: jetbrains.com/help/pycharm/…
cyroxx
1

Gunakan penebang dan pernyataan cetak di Lingkungan Pengembangan, Anda dapat pergi untuk penjaga jika lingkungan produksi.

iniayush
sumber
1

Untuk pengguna Windows:

Buka Powershell dan cd ke direktori proyek Anda.

Gunakan komando ini di Powershell, semua hal lain tidak akan berfungsi di Powershell.

$env:FLASK_APP = "app"  
$env:FLASK_ENV = "development"
sn98
sumber
-1

Jika Anda menjalankannya secara lokal dan ingin dapat menelusuri kode:

python -m pdb script.py

rstackhouse
sumber
Ini tidak berlaku untuk aplikasi labu sama sekali
CornSmith