Flask AttributeError:模块“flask.json”没有属性“JSONEncoder”

Sha*_*e S 14 python flask

我的烧瓶应用程序在升级之前可以正常工作。当忘记重置密码时,我在发送电子邮件时遇到了问题。为了尝试解决这个问题,我最近升级了我的 Flask 应用程序的一些模块。我使用当前版本升级的模块是:

  • 电子邮件验证器==2.0.0.post2
  • 烧瓶==2.3.1
  • 危险==2.1.2

我现在收到的回溯错误是:

Traceback (most recent call last):
File "C:\Users\my_folder\sales\app.py", line 1, in <module>
from product import app
File "C:\Users\my_folder\sales\product\__init__.py", line 56, in <module>
from product.agents.views import agents_bp
File "C:\Users\my_folder\sales\product\agents\views.py", line 7, in <module>
from product.agents.forms import RegistrationForm, LoginForm, UpdateAccountForm, ResetPasswordForm, RequestResetForm
File "C:\Users\my_folder\sales\product\agents\forms.py", line 1, in <module>
from flask_wtf import FlaskForm
File "C:\Users\my_folder\flask_env\lib\site-packages\flask_wtf\__init__.py", line 4, in <module>
from .recaptcha import Recaptcha
File "C:\Users\my_folder\flask_env\lib\site-packages\flask_wtf\recaptcha\__init__.py", line 1, in <module>
from .fields import RecaptchaField
File "C:\Users\my_folder\flask_env\lib\site-packages\flask_wtf\recaptcha\fields.py", line 3, in <module>
from . import widgets
File "C:\Users\my_folder\flask_env\lib\site-packages\flask_wtf\recaptcha\widgets.py", line 6, in <module>
JSONEncoder = json.JSONEncoder
AttributeError: module 'flask.json' has no attribute 'JSONEncoder'
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

Sha*_*e S 12

我找到的解决方案是卸载 Flask 并安装旧版本。

pip uninstall Flask  
Run Code Online (Sandbox Code Playgroud)
pip install Flask==2.2.3 
Run Code Online (Sandbox Code Playgroud)

此解决方案的问题是在 POST 上仍然出现忘记重置密码的错误。希望以后有人找到新的更好的解决方案。

更新

我想推荐在此页面上找到的 Kacey Saff 的解决方案/sf/answers/5342804561/ 这是我最终转向的解决方案。

  • 它适用于 Flask==2.2.5 (4认同)

小智 12

Python 至少从 3.2 开始就有内置的 JSONEncoder,这使得 Flask 的版本变得多余。所以删除也是合理的。

如果这是您控制的模块,您可以将您的线路替换JSONEncoder = json.JSONEncoder

from json import JSONEncoder
Run Code Online (Sandbox Code Playgroud)

由于您不控制该库,因此您应该注意哪个库试图包含它,在您的情况下是flask_wtf. 当您检查 PyPi 中的该库时,您会看到有一些最新版本,这表明您应该尝试的第一件事是在 Flask-WTF 上更新该版本。


小智 6

这些属性已从 Flask 版本 2.3.0 中删除,请参阅此发行说明:https://flask.palletsprojects.com/en/2.3.x/changes/#version-2-3-0


小智 5

错误消息中的特定行提供了线索:

from flask_wtf import FlaskForm
Run Code Online (Sandbox Code Playgroud)

将 Flask-WTF 包升级到最新版本解决了我的问题:

Flask-WTF~=1.1.1
Run Code Online (Sandbox Code Playgroud)