Π Π΅Π»ΠΈΠ· 1.0.0, Π²ΡΠΏΡΡΠ΅Π½Π½ΡΠΉ 2 ΡΠ°ΡΠ° Π½Π°Π·Π°Π΄, ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄Π»Ρ Π»ΡΠ΄Π΅ΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ flask. ΠΠ΅ ΡΠ²Π΅ΡΠ΅Π½, Π±ΡΠ» Π»ΠΈ ΡΡΠΎ ΠΆΠ΅Π»Π°Π΅ΠΌΡΠΉ ΡΡΡΠ΅ΠΊΡ, ΠΈ flask Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΊΡΠ΅ΠΏΠΈΡΡ ΡΠ²ΠΎΡ Π²Π΅ΡΡΠΈΡ ΠΈΠ»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΡΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅.
ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΠ΅ ΠΏΠΎΠ»Π½ΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ Π² Flask, ΠΈ Werkzeug Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΡΠΎΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΉ ΠΈΠΌΠΏΠΎΡΡ. 0.16 ΡΠΆΠ΅ 5 ΠΌΠ΅ΡΡΡΠ΅Π² Π²ΡΠ΄Π°Π΅Ρ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΎΠ± ΡΡΡΠ°ΡΠ΅Π²Π°Π½ΠΈΠΈ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΡ Π²Π΅ΡΡΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π³Π°, ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠΏΠΎΡΡ Π±ΡΠ» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΌΠΎΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΠΌ ΠΈ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌ, ΠΎΡΠΊΡΡΠ² Π²ΠΎΠΏΡΠΎΡ ΠΈΠ»ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΈΠ² PR Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅.
Traceback (most recent call last):
File "/usr/local/bin/pytest", line 8, in <module>
sys.exit(main())
File "/usr/local/lib/python3.7/site-packages/_pytest/config/__init__.py", line 73, in main
config = _prepareconfig(args, plugins)
File "/usr/local/lib/python3.7/site-packages/_pytest/config/__init__.py", line 224, in _prepareconfig
pluginmanager=pluginmanager, args=args
File "/usr/local/lib/python3.7/site-packages/pluggy/hooks.py", line 286, in __call__
return self._hookexec(self, self.get_hookimpls(), kwargs)
File "/usr/local/lib/python3.7/site-packages/pluggy/manager.py", line 93, in _hookexec
return self._inner_hookexec(hook, methods, kwargs)
File "/usr/local/lib/python3.7/site-packages/pluggy/manager.py", line 87, in <lambda>
firstresult=hook.spec.opts.get("firstresult") if hook.spec else False,
File "/usr/local/lib/python3.7/site-packages/pluggy/callers.py", line 203, in _multicall
gen.send(outcome)
File "/usr/local/lib/python3.7/site-packages/_pytest/helpconfig.py", line 89, in pytest_cmdline_parse
config = outcome.get_result()
File "/usr/local/lib/python3.7/site-packages/pluggy/callers.py", line 80, in get_result
raise ex[1].with_traceback(ex[2])
File "/usr/local/lib/python3.7/site-packages/pluggy/callers.py", line 187, in _multicall
res = hook_impl.function(*args)
File "/usr/local/lib/python3.7/site-packages/_pytest/config/__init__.py", line 794, in pytest_cmdline_parse
self.parse(args)
File "/usr/local/lib/python3.7/site-packages/_pytest/config/__init__.py", line 1000, in parse
self._preparse(args, addopts=addopts)
File "/usr/local/lib/python3.7/site-packages/_pytest/config/__init__.py", line 948, in _preparse
self.pluginmanager.load_setuptools_entrypoints("pytest11")
File "/usr/local/lib/python3.7/site-packages/pluggy/manager.py", line 299, in load_setuptools_entrypoints
plugin = ep.load()
File "/usr/local/lib/python3.7/site-packages/importlib_metadata/__init__.py", line 94, in load
module = import_module(match.group('module'))
File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "/usr/local/lib/python3.7/site-packages/_pytest/assertion/rewrite.py", line 143, in exec_module
exec(co, module.__dict__)
File "/usr/local/lib/python3.7/site-packages/pytest_flask/plugin.py", line 14, in <module>
from werkzeug import cached_property
ImportError: cannot import name 'cached_property' from 'werkzeug' (/usr/local/lib/python3.7/site-packages/werkzeug/__init__.py)
ΠΡΠΎ pytest-flask, Π²Ρ Π·Π°Ρ ΠΎΡΠΈΡΠ΅ Ρ Π½ΠΈΠΌΠΈ ΡΠ²ΡΠ·Π°ΡΡΡΡ. ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ pytest-flask 0.15.1 ΡΠΆΠ΅ Π²ΡΠΏΡΡΠ΅Π½ Ρ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ.
+1, ΠΈΠΌΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ:
packages/flask_wtf/recaptcha/widgets.py", line 5, in <module>
from werkzeug import url_encode
ImportError: cannot import name 'url_encode'
+1 ΡΡΠΎΡ Π½ΠΎΠ²Π΅ΠΉΡΠΈΠΉ Π²ΡΠΏΡΡΠΊ ΡΠ°ΠΊΠΆΠ΅ Π»ΠΎΠΌΠ°Π΅Ρ Π½Π°ΡΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° V1.0.0
`` ΠΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ (ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π²ΡΠ·ΠΎΠ² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ):
Π€Π°ΠΉΠ» "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask/cli.py", ΡΡΡΠΎΠΊΠ° 240, Π² locate_app
__import __ (ΠΈΠΌΡ_ΠΌΠΎΠ΄ΡΠ»Ρ)
Π€Π°ΠΉΠ» "/home/ec2-user/butter_web/butter.py", ΡΡΡΠΎΠΊΠ° 1, Π²
ΠΈΠ· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, db
Π€Π°ΠΉΠ» "/home/ec2-user/butter_web/app/__init__.py", ΡΡΡΠΎΠΊΠ° 8, Π²
ΠΈΠ· flask_admin.contrib.sqla ΠΈΠΌΠΏΠΎΡΡ ModelView
Π€Π°ΠΉΠ» "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask_admin/contrib/sqla/__init__.py", ΡΡΡΠΎΠΊΠ° 2, Π²
ΠΈΠ· .view ΠΈΠΌΠΏΠΎΡΡΠ° ModelView
Π€Π°ΠΉΠ» "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask_admin/contrib/sqla/view.py", ΡΡΡΠΎΠΊΠ° 19, Π²
ΠΈΠ· flask_admin.model ΠΈΠΌΠΏΠΎΡΡ BaseModelView
Π€Π°ΠΉΠ» "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask_admin/model/__init__.py", ΡΡΡΠΎΠΊΠ° 2, Π²
ΠΈΠ· .base import BaseModelView
Π€Π°ΠΉΠ» "/home/ec2-user/butter_web/venv/lib64/python3.6/site-packages/flask_admin/model/base.py", ΡΡΡΠΎΠΊΠ° 8, Π²
ΠΈΠ· werkzeug ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ secure_filename
ImportError: Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠΌΡ secure_filename
ΠΠ°ΠΊΠΎΠ΅ Π·Π΄Π΅ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅? Π―Π²Π½Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° 0.16.1 Π½Π΅ ΡΠ΅ΡΠ°Π΅Ρ ΡΡΠΎΠ³ΠΎ.
@ tjohnson4 Π‘ΠΌ. ΠΌΠΎΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π²ΡΡΠ΅, ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ, ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ. ΠΡΠΈΠ±ΠΊΠ°, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»ΠΈ ΠΏΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ Flask, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ.
ΠΡΠΎ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΡΠΆΠ°ΡΠ½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΎΠΏΡΡ. Flask-WTF 0.14.3 Ρ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΠΌΠΈ Π±ΡΠ» Π²ΡΠΏΡΡΠ΅Π½ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΠΎΠ² Π½Π°Π·Π°Π΄. ΠΠ°ΠΊ ΠΌΡ Π²ΡΠΏΡΡΠΊΠ°Π΅ΠΌ Π²ΡΠΏΡΡΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π»ΠΈΡΠ°Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ³ΡΠΎΠΌΠ½ΡΠ΅ ΡΠ°ΡΡΠΈ ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΡ Π½Π΅ Π±ΡΠ»ΠΈ Π³ΠΎΡΠΎΠ²Ρ ΠΊ ΡΡΠΎΠΌΡ?
Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΡΠΎ ΡΡΠ΅ΡΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΏΠΎΠ΄Π΄ΠΎΠ½ΠΎΠ² ΡΠ»ΠΎΠΌΠ°Π»ΠΎ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ» Π·Π°ΠΏΡΡΠ΅Π½, ΠΌΠ΅Π½Π΅Π΅ ΡΠ΅ΠΌ Π·Π° ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΡΡΠ΅Π².
Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°
Traceback (most recent call last):
File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/home/ubuntu/swagger-codegen/samples/server/petstore/flaskConnexion/swagger_server/__main__.py", line 3, in <module>
import connexion
File "/home/ubuntu/.local/lib/python3.6/site-packages/connexion/__init__.py", line 3, in <module>
from .apis import AbstractAPI # NOQA
File "/home/ubuntu/.local/lib/python3.6/site-packages/connexion/apis/__init__.py", line 1, in <module>
from .abstract import AbstractAPI # NOQA
File "/home/ubuntu/.local/lib/python3.6/site-packages/connexion/apis/abstract.py", line 14, in <module>
from ..operation import Operation
File "/home/ubuntu/.local/lib/python3.6/site-packages/connexion/operation.py", line 7, in <module>
from .decorators import validation
File "/home/ubuntu/.local/lib/python3.6/site-packages/connexion/decorators/validation.py", line 9, in <module>
from werkzeug import FileStorage
ImportError: cannot import name 'FileStorage'
ΠΎΠ±Ρ
ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΡΡ
Π΄ΠΎΠ±Π°Π²ΠΈΡΡ werkzeug == 0.16.1
Π² requirements.txt ΡΠ΅ΡΠΈΠ» ΡΡΠΎ Π·Π° ΠΌΠ΅Π½Ρ
Π‘Π²ΡΠ·Ρ @ Abdelsalam-Abbas ΠΈΡΠΏΡΠ°Π²ΠΈΠ»Π° ΡΡΠΎΡ ΠΈΠΌΠΏΠΎΡΡ Π΅ΡΠ΅ Π² ΠΎΠΊΡΡΠ±ΡΠ΅ 2019 Π³ΠΎΠ΄Π° - ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ, Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΡΠ°ΡΡΡ Π²Π΅ΡΡΠΈΡ?
https://github.com/zalando/connexion/releases/tag/2.4.0
ΠΡΠ»ΠΈ Π²Π°Ρ Flask-Session Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ:
File "/usr/local/lib/python3.8/site-packages/flask_session/__init__.py", line 61, in init_app
app.session_interface = self._get_interface(app)
File "/usr/local/lib/python3.8/site-packages/flask_session/__init__.py", line 90, in _get_interface
session_interface = FileSystemSessionInterface(
File "/usr/local/lib/python3.8/site-packages/flask_session/sessions.py", line 313, in __init__
from werkzeug.contrib.cache import FileSystemCache
ModuleNotFoundError: No module named 'werkzeug.contrib'
ΠΠΎΠ±Π°Π²ΠΈΡΡ werkzeug == 0.16.1
Π² requirements.txt ΡΠ΅ΡΠΈΠ»ΠΎ ΡΡΠΎ Π·Π° ΠΌΠ΅Π½Ρ
ΠΡΠ»ΠΈ Π²Π°Ρ Flask-RestPlus Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ:
Traceback (most recent call last):
File "/export/home/hysdsops/sciflo/lib/python3.7/site-packages/flask/cli.py", line 240, in locate_app
__import__(module_name)
File "/export/home/hysdsops/sciflo/ops/pele/app.py", line 4, in <module>
from pele import create_app, db
File "/export/home/hysdsops/sciflo/ops/pele/pele/__init__.py", line 5, in <module>
from flask_restplus import apidoc
File "/export/home/hysdsops/sciflo/lib/python3.7/site-packages/flask_restplus/__init__.py", line 4, in <module>
from . import fields, reqparse, apidoc, inputs, cors
File "/export/home/hysdsops/sciflo/lib/python3.7/site-packages/flask_restplus/fields.py", line 17, in <module>
from werkzeug import cached_property
ImportError: cannot import name 'cached_property' from 'werkzeug' (/export/home/hysdsops/sciflo/lib/python3.7/site-packages/werkzeug/__init__.py)
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ werkzeug == 0.16.1
Π² requirements.txt ΡΠ΅ΡΠΈΠ»ΠΎ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π·Π° ΠΌΠ΅Π½Ρ.
ΠΠ΅ ΠΌΠΎΠ³ Π±Ρ ΠΊΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π΄Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΌΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π·Π°ΠΏΡΠΎΡΠ° ΡΠ»ΡΠ³ΠΈ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½ΡΠΉ ΠΈΠ· werkzeug
LocalProxy
ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ Π΄ΡΡΠ³ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ, ΡΠ΅ΠΌ ΡΠ°, ΡΡΠΎ Ρ ΠΌΠ΅Π½Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ?
ΠΠ°ΡΠΈΠ½Π°Ρ Ρ ΡΡΠΎΠ³ΠΎ Π²ΡΠΏΡΡΠΊΠ° Ρ ΠΏΠΎΠ»ΡΡΠ°Ρ ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ:
File "/Users/lucas/Software/anaconda3/envs/pytest/lib/python3.6/site-packages/flask/json.py", line 251, in jsonify
if current_app.config['JSONIFY_PRETTYPRINT_REGULAR'] and not request.is_xhr:
File "/Users/lucas/Software/anaconda3/envs/pytest/lib/python3.6/site-packages/werkzeug/local.py", line 347, in __getattr__
return getattr(self._get_current_object(), name)
AttributeError: 'Request' object has no attribute 'is_xhr'
is_xhr
- ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ»ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΎ Π² Flask 1.0
, Π½ΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ Ρ ΠΌΠ΅Π½Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ 0.12.2
. Π§ΡΠΎΠ±Ρ Π±ΡΡΡ ΡΡΠ½ΡΠΌ, Ρ ΠΏΡΠ±Π»ΠΈΠΊΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π·Π΄Π΅ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π΅Ρ Π²ΠΎ Flask, ΡΠΊΠΎΡΠ΅Π΅ Ρ ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΠΏΠΎΡΠ΅ΠΌΡ / ΠΊΠ°ΠΊ LocalProxy
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Flask, ΡΠΎΠ³Π΄Π° Ρ ΠΎΠΆΠΈΠ΄Π°Ρ.
@LucasLLC is_xhr
Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²Ρ
ΠΎΠ΄ΠΈΠ» Π² ΡΠΎΡΡΠ°Π² Flask Π½Π°ΠΏΡΡΠΌΡΡ (Π΅ΡΡΡ Π»ΠΈ ΡΡΡΠ»ΠΊΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ, ΡΡΠΎ ΠΎΠ½ Π±ΡΠ» ΡΠ΄Π°Π»Π΅Π½ Π² Flask 1.0? Π― Π½Π΅ Π²ΠΈΠΆΡ ΡΡΠΎΠ³ΠΎ Π² ΠΆΡΡΠ½Π°Π»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ), ΡΠΊΠΎΡΠ΅Π΅ ΡΡΠΎ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ» API Werkzeug, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Flask. Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ Werkzeug, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΠΎΠ½ ΡΠ΄Π°Π»Π΅Π½ Π² 81e10efbf3a83daf09c55cd7cc13ac6c6464d405.
ΠΡΠ»ΠΈ Π²Ρ Π΅ΡΠ΅ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠ΄Π΅Π»Π°Π»ΠΈ, Ρ Π±Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» Π·Π°ΠΊΡΠ΅ΠΏΠΈΡΡ Π²Π°ΡΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ - ΡΡΡΠΈΠ½Π½Π°Ρ ΡΠ°Π±ΠΎΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°ΠΊΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠ°ΠΊ ΠΏΠΎΡΠ·ΠΈΡ .
@pgjones, Π² ΠΈΠ΄Π΅Π°Π»Π΅, ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ Π²ΡΠΏΡΡΠΊ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π΄Π»Ρ flask 0.12, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅Ρ werkzeug ΠΊ <1.0.0. Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², ΡΡΠΎ ΠΏΠ»ΠΎΡ ΠΎΠΉ Π·Π½Π°ΡΠΎΠΊ Π² Flask.
Π’Π°ΠΊΠΆΠ΅ Π΄Π°, ΡΡΠΎΡ API ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ Flask API, ΠΈ ΠΎΠ½ Π±ΡΠ» Π·Π°Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ ΡΠ°ΠΊΠΎΠ²ΠΎΠΉ: https://flask.palletsprojects.com/en/0.12.x/api/#flask.Request.is_xhr
@LucasLLC
is_xhr
Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²Ρ ΠΎΠ΄ΠΈΠ» Π² ΡΠΎΡΡΠ°Π² Flask Π½Π°ΠΏΡΡΠΌΡΡ (Π΅ΡΡΡ Π»ΠΈ ΡΡΡΠ»ΠΊΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ, ΡΡΠΎ ΠΎΠ½ Π±ΡΠ» ΡΠ΄Π°Π»Π΅Π½ Π² Flask 1.0? Π― Π½Π΅ Π²ΠΈΠΆΡ ΡΡΠΎΠ³ΠΎ Π² ΠΆΡΡΠ½Π°Π»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ), ΡΠΊΠΎΡΠ΅Π΅ ΡΡΠΎ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ» API Werkzeug, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Flask. Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ Werkzeug, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΠΎΠ½ ΡΠ΄Π°Π»Π΅Π½ Π² 81e10ef .
ΠΡ , ΠΌΠΎΡ ΠΎΡΠΈΠ±ΠΊΠ°. Π― ΡΡΡΠ»Π°Π»ΡΡ Π½Π° ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΡΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ, ΠΈ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π», ΡΡΠΎ ΠΎΠ½ΠΎ ΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΡ Werkzeug, ΡΡΠΎ ΠΈΠΌΠ΅Π΅Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»ΡΡΠΈΠΉ ΡΠΌΡΡΠ».
ΠΡΠ»ΠΈ Π²Ρ Π΅ΡΠ΅ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠ΄Π΅Π»Π°Π»ΠΈ, Ρ Π±Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» Π·Π°ΠΊΡΠ΅ΠΏΠΈΡΡ Π²Π°ΡΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ - ΡΡΡΠΈΠ½Π½Π°Ρ ΡΠ°Π±ΠΎΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°ΠΊΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠ°ΠΊ ΠΏΠΎΡΠ·ΠΈΡ .
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΡΠΎΠ²Π΅Ρ! ΠΠ°Π³Π»ΡΠ½Π΅ΠΌ Π² ΡΡΠΈΡ ΠΈ.
ΠΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ odoo12:
import werkzeug.contrib.fixers
ImportError: No module named 'werkzeug.contrib'
ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ΅ΡΠΈΠ» ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
Werkzeug==0.16.1
ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π°
ModuleNotFoundError: Π½Π΅Ρ ΠΌΠΎΠ΄ΡΠ»Ρ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ 'werkzeug.contrib'
Π’Π°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΊΠΎΠ»Π±ΠΎΠΉ
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Werkzeug==0.16.1
ΡΡΡΡΠ°Π½ΠΈΠ»Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
`` ''
ΠΈΠ· flask_admin.contrib.sqla ΠΈΠΌΠΏΠΎΡΡ ModelView
Π€Π°ΠΉΠ» "/usr/local/lib/python3.6/site-packages/flask_admin/contrib/sqla/__init__.py", ΡΡΡΠΎΠΊΠ° 2, Π²
ΠΈΠ· .view ΠΈΠΌΠΏΠΎΡΡΠ° ModelView
Π€Π°ΠΉΠ» "/usr/local/lib/python3.6/site-packages/flask_admin/contrib/sqla/view.py", ΡΡΡΠΎΠΊΠ° 18, Π²
ΠΈΠ· flask_admin.model ΠΈΠΌΠΏΠΎΡΡ BaseModelView
Π€Π°ΠΉΠ» "/usr/local/lib/python3.6/site-packages/flask_admin/model/__init__.py", ΡΡΡΠΎΠΊΠ° 2, Π²
ΠΈΠ· .base import BaseModelView
Π€Π°ΠΉΠ» "/usr/local/lib/python3.6/site-packages/flask_admin/model/base.py", ΡΡΡΠΎΠΊΠ° 8, Π²
ΠΈΠ· werkzeug ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ secure_filename
ImportError: Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠΌΡ secure_filename
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΡΠΎ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΡΠΆΠ°ΡΠ½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΎΠΏΡΡ. Flask-WTF 0.14.3 Ρ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΠΌΠΈ Π±ΡΠ» Π²ΡΠΏΡΡΠ΅Π½ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΠΎΠ² Π½Π°Π·Π°Π΄. ΠΠ°ΠΊ ΠΌΡ Π²ΡΠΏΡΡΠΊΠ°Π΅ΠΌ Π²ΡΠΏΡΡΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π»ΠΈΡΠ°Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ³ΡΠΎΠΌΠ½ΡΠ΅ ΡΠ°ΡΡΠΈ ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΡ Π½Π΅ Π±ΡΠ»ΠΈ Π³ΠΎΡΠΎΠ²Ρ ΠΊ ΡΡΠΎΠΌΡ?
Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΡΠΎ ΡΡΠ΅ΡΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΏΠΎΠ΄Π΄ΠΎΠ½ΠΎΠ² ΡΠ»ΠΎΠΌΠ°Π»ΠΎ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ» Π·Π°ΠΏΡΡΠ΅Π½, ΠΌΠ΅Π½Π΅Π΅ ΡΠ΅ΠΌ Π·Π° ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΡΡΠ΅Π².