質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.53%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Q&A

解決済

1回答

270閲覧

Flask-debugtoolbarを入れたらエラー発生

yasuuu

総合スコア9

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

0グッド

0クリップ

投稿2023/11/03 01:18

編集2023/11/03 18:41

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • flask runでアプリ起動

前提

『Python FlaskによるWebアプリ開発入門』を読み進めています。
flask-debugtoolbarをインストール後(本書p67)にflask runすると、以下のエラーメッセージが発生しました。

解消法が分かる方はいらっしゃいますでしょうか?><

発生している問題・エラーメッセージ

Error: While importing 'apps.minimalapp.app', an ImportError was raised: Traceback (most recent call last): File "/Users/xxxxx/flaskbook/venv/lib/python3.12/site-packages/flask/cli.py", line 219, in locate_app __import__(module_name) File "/Users/xxxxx/flaskbook/apps/minimalapp/app.py", line 13, in <module> from flask_debugtoolbar import DebugToolbarExtension File "/Users/xxxxx/flaskbook/venv/lib/python3.12/site-packages/flask_debugtoolbar/__init__.py", line 5, in <module> from flask.globals import _request_ctx_stack ImportError: cannot import name '_request_ctx_stack' from 'flask.globals' (/Users/xxxxx/flaskbook/venv/lib/python3.12/site-packages/flask/globals.py)

ソースコード

import logging from email_validator import validate_email, EmailNotValidError from flask import ( Flask, render_template, url_for, current_app, g, request, redirect, flash ) from flask_debugtoolbar import DebugToolbarExtension app = Flask(__name__) app.config["SECRET_KEY"] = "2AZSMss3p5QPbcY2hBsJ" app.logger.setLevel(logging.DEBUG) app.config["DEBUG_TB_INTERCEPT_REDIRECTS"] = False toolbar = DebugToolbarExtension(app) @app.route("/") def index(): return "Hello, Flaskbook!" @app.route("/hello/<name>", methods=["GET", "POST"], endpoint="hello-endpoint") def hello(name): return f"Hello, {name}!" @app.route("/name/<name>") def show_name(name): return render_template("index.html", name=name) @app.route("/contact") def contact(): return render_template("contact.html") @app.route("/contact/complete", methods=["GET", "POST"]) def contact_complete(): if request.method == "POST": username = request.form["username"] email = request.form["email"] description = request.form["description"] is_valid = True if not username: flash("ユーザ名は必須です") is_valid = False if not email: flash("メールアドレスは必須です") is_valid = False try: validate_email(email) except EmailNotValidError: flash("メールアドレスの形式で入力してください") is_valid = False if not description: flash("問い合わせ内容は必須です") is_valid = False if not is_valid: return redirect(url_for("contact")) # メールを送る(最後に実装) flash("問い合わせ内容はメールにて送信されました。問い合わせありがとうございます。") return redirect(url_for("contact_complete")) return render_template("contact_complete.html") with app.test_request_context(): # / print(url_for("index")) # /hello/world print(url_for("hello-endpoint", name="world")) # /name/ichiro?page=1 print(url_for("show_name", name="ichiro", page=1)) with app.test_request_context("/users?updated=true"): print(request.args.get("updated"))

補足情報(FW/ツールのバージョンなど)

Flaskのバージョン情報など

1Name: Flask 2Version: 3.0.0 3Summary: A simple framework for building complex web applications. 4Home-page: 5Author: 6Author-email: 7License: 8Location: /Users/yasu/flaskbook/venv/lib/python3.12/site-packages 9Requires: blinker, click, itsdangerous, Jinja2, Werkzeug 10Required-by: Flask-DebugToolbar

FlaskDebugToolbarのバージョン情報など

1Name: Flask-DebugToolbar 2Version: 0.13.1 3Summary: A toolbar overlay for debugging Flask applications. 4Home-page: https://github.com/flask-debugtoolbar/flask-debugtoolbar 5Author: Michael van Tellingen 6Author-email: michaelvantellingen@gmail.com 7License: UNKNOWN 8Location: /Users/yasu/flaskbook/venv/lib/python3.12/site-packages 9Requires: Blinker, Flask, itsdangerous, werkzeug 10Required-by:

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Flask-DebugToolbar は Flask Ver3.0.x以上では動作しないようです。

動かしたいだけなら、以下を実行すると動かせます。

  1. Flaskをversion 2.3.3を指定してインストールする(pip install Flask==2.3.3)
    Flaskがインストールされている場合は、新しいvenvを作成するか、全部消してから実行してください。
    (全部: Flaskをインストールすると、clickとか、jinja2とかが勝手に入るので、削除してください。面倒なので、venv作り直すのが楽です。)
  2. 2.3.3を指定してインストールすると、Werkzeug==3.0.1がインストールされ、動いてくれないので、一旦Werkzeugをアンインストールする(pip uninstall werkzeug)
  3. Flask==2.3.3で動作するwerkzeugをインストールする(pip install werkzeug==2.3.7)
  4. Flask-DebugToolbarをインストールする( pip install flask-debugtoolbar)

動作したサンプルも置いておきます。

app.py

python

1from flask import Flask, render_template 2from flask_debugtoolbar import DebugToolbarExtension 3 4app = Flask(__name__) 5 6app.debug = True 7app.config['SECRET_KEY'] = '<replace with a secret key>' 8 9toolbar = DebugToolbarExtension(app) 10 11 12@app.route('/') 13def hello_world(): # put application's code here 14 return render_template('index.html') 15 16 17if __name__ == '__main__': 18 app.run() 19

templates/index.html

html

1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6</head> 7<body> 8sample 9</body> 10</html>

投稿2023/11/03 04:14

FiroProchainezo

総合スコア2385

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yasuuu

2023/11/03 09:41

ありがとうございます。 flask2.3.3をインストールし、上記の手順をやったところ、動きました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.53%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問