需要从 Werkzeug==3.0.0 降级到 Werkzeug==2.3.7 以避免 werkzeug/http.py TypeError: 无法在类似字节的对象上使用字符串模式

问题描述 投票:0回答:2

我有一个 docker 镜像 Flask Web 应用程序,在重建 docker 镜像并从中部署 docker 容器后,该应用程序生成以下错误。 今天之前,使用 docker 文件和requirements.txt 文件构建的镜像中的容器运行时没有任何错误。 我怀疑我今天构建的映像中可能有最近的 python 模块更新,导致出现以下错误。

Python版本是Python 3.12.0

pip list 的输出如下所示。

root@8015f43d01aa:/# pip list
Package            Version
------------------ ---------
blinker            1.6.2
cachelib           0.10.2
certifi            2023.7.22
charset-normalizer 3.3.0
click              8.1.7
Flask              2.3.3
Flask-PyMongo      2.3.0
Flask-Session      0.5.0
gunicorn           21.2.0
idna               3.4
itsdangerous       2.1.2
Jinja2             3.1.2
MarkupSafe         2.1.3
packaging          23.2
pika               1.3.2
pip                23.2.1
psycopg2           2.9.8
pyasn1             0.5.0
pyasn1-modules     0.3.0
pymongo            3.12.3
python-dateutil    2.8.2
python-ldap        3.4.3
redis              5.0.1
requests           2.31.0
setuptools         68.2.2
six                1.16.0
urllib3            2.0.6
Werkzeug           3.0.0
wheel              0.41.2

错误信息。

Traceback (most recent call last):
  File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 2213, in __call__
    return self.wsgi_app(environ, start_response)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 2193, in wsgi_app
    response = self.handle_exception(e)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 2190, in wsgi_app
    response = self.full_dispatch_request()
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 1487, in full_dispatch_request
    return self.finalize_request(rv)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 1508, in finalize_request
    response = self.process_response(response)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 2005, in process_response
    self.session_interface.save_session(self, ctx.session, response)
  File "/usr/local/lib/python3.12/site-packages/flask_session/sessions.py", line 454, in save_session
    response.set_cookie(app.config["SESSION_COOKIE_NAME"], session_id,
  File "/usr/local/lib/python3.12/site-packages/werkzeug/sansio/response.py", line 224, in set_cookie
    dump_cookie(
  File "/usr/local/lib/python3.12/site-packages/werkzeug/http.py", line 1303, in dump_cookie
    if not _cookie_no_quote_re.fullmatch(value):
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: cannot use a string pattern on a bytes-like object

从 Werkzeug==3.0.0 降级到 Werkzeug==2.3.7 解决了上述错误。 Werkzeug==3.0.0 于 2023 年 9 月 30 日发布。

python flask flask-session
2个回答
1
投票

从 Werkzeug==3.0.0 降级到 Werkzeug==2.3.7 解决了上述错误。 Werkzeug==3.0.0 于 2023 年 9 月 30 日发布。


0
投票

确保传递给

set_cookie()
的 cookie 值被转换为字符串。类似字节的对象以前可以工作,但在最新的 Werkzeug 版本中会导致此错误。

© www.soinside.com 2019 - 2024. All rights reserved.