Я разрабатываю RESTful API с помощью Flask и столкнулся с проблемой при попытке создать URL-адреса для своих конечных точек с помощью Flask-Marshmallow. Всякий раз, когда я получаю доступ к маршруту, который использует ma.URLFor в моей схеме Marshmallow, я сталкиваюсь со следующей ошибкой:
C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Scripts\python.exe C:\Users\ferre\PycharmProjects\FlaskAPIflask\api\run.py
* Serving Flask app 'api'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
* Restarting with stat
* Debugger is active!
* Debugger PIN: 108-576-652
127.0.0.1 - - [09/Jul/2024 20:38:58] "GET /cursos HTTP/1.1" 500 -
Traceback (most recent call last):
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask\app.py", line 1498, in __call__
return self.wsgi_app(environ, start_response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask\app.py", line 1476, in wsgi_app
response = self.handle_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_restful\__init__.py", line 298, in error_router
return original_handler(e)
^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_restful\__init__.py", line 295, in error_router
return self.handle_error(e)
^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_restful\__init__.py", line 310, in handle_error
_handle_flask_propagate_exceptions_config(current_app, e)
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask\app.py", line 1473, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask\app.py", line 882, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_restful\__init__.py", line 298, in error_router
return original_handler(e)
^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_restful\__init__.py", line 295, in error_router
return self.handle_error(e)
^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_restful\__init__.py", line 310, in handle_error
_handle_flask_propagate_exceptions_config(current_app, e)
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask\app.py", line 880, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask\app.py", line 865, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_restful\__init__.py", line 489, in wrapper
resp = resource(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask\views.py", line 110, in view
return current_app.ensure_sync(self.dispatch_request)(**kwargs) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_restful\__init__.py", line 604, in dispatch_request
resp = meth(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\api\views\curso_views.py", line 13, in get
return paginate(Curso,cs)
^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\api\paginate.py", line 24, in paginate
'results':schema.dump(page_obj.items)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\marshmallow\schema.py", line 549, in dump
result = self._serialize(processed_obj, many=many)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\marshmallow\schema.py", line 512, in _serialize
self._serialize(d, many=False)
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\marshmallow\schema.py", line 517, in _serialize
value = field_obj.serialize(attr_name, obj, accessor=self.get_attribute)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\marshmallow\fields.py", line 341, in serialize
return self._serialize(value, attr, obj, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_marshmallow\fields.py", line 209, in _serialize
return _rapply(self.schema, _url_val, key=attr, obj=obj)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_marshmallow\fields.py", line 158, in _rapply
return {key: _rapply(value, func, *args, **kwargs) for key, value in d.items()}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_marshmallow\fields.py", line 160, in _rapply
return func(d, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_marshmallow\fields.py", line 168, in _url_val
return val.serialize(key, obj, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\marshmallow\fields.py", line 341, in serialize
return self._serialize(value, attr, obj, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_marshmallow\fields.py", line 124, in _serialize
return url_for(self.endpoint, **param_values)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask\helpers.py", line 220, in url_for
return current_app.url_for(
^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask\app.py", line 1084, in url_for
return self.handle_url_build_error(error, endpoint, values)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask\app.py", line 1073, in url_for
rv = url_adapter.build( # type: ignore[union-attr]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\werkzeug\routing\map.py", line 924, in build
raise BuildError(endpoint, values, method, self)
werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'cursodetail'. Did you forget to specify values ['id']?
myterminalpycharm
Я проверил, что методы HTTP (GET, PUT, DELETE) верны и что конечная точка cursodetail определена с идентификатором параметр. Однако я продолжаю получать вышеупомянутую ошибку при попытке доступа к маршруту. Как я могу решить эту проблему?
Я разрабатываю RESTful API с помощью Flask и столкнулся с проблемой при попытке создать URL-адреса для своих конечных точек с помощью Flask-Marshmallow. Всякий раз, когда я получаю доступ к маршруту, который использует ma.URLFor в моей схеме Marshmallow, я сталкиваюсь со следующей ошибкой: [code]werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'cursodetail'. Did you forget to specify values ['id']? [/code] Вот как я настраиваю схему CursoSchema: [code]from api import ma from ..models import curso_model from marshmallow import fields
class CursoSchema(ma.SQLAlchemyAutoSchema): class Meta: model = curso_model.Curso load_instance = True fields = ("id", "nome", "descricao", "_links")
nome = fields.String(required=True) descricao = fields.String(required=True)
_links = ma.Hyperlinks( { "get": ma.URLFor("cursodetail", id=""), "put": ma.URLFor("cursodetail", id=""), "delete": ma.URLFor("cursodetail", id="") } ) [/code] Мои маршруты определены в curso_views.py следующим образом: [code]from flask import Blueprint, jsonify, request from flask.views import MethodView from api import db, ma from ..models import curso_model from ..schemas import curso_schema
curso_bp = Blueprint('curso', __name__)
class CursoListView(MethodView): def get(self): cursos = curso_model.Curso.query.all() return jsonify(curso_schema.CursoSchema(many=True).dump(cursos))
# Endpoint for course details @curso_bp.route('/cursos/', methods=['GET', 'PUT', 'DELETE']) def cursodetail(id): curso = curso_model.Curso.query.get_or_404(id) if request.method == 'GET': return jsonify(curso_schema.CursoSchema().dump(curso)) elif request.method == 'PUT': # Logic to update the course return jsonify(message='Course updated successfully') elif request.method == 'DELETE': # Logic to delete the course return jsonify(message='Course deleted successfully') [/code] ошибка моего терминала: [code]C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Scripts\python.exe C:\Users\ferre\PycharmProjects\FlaskAPIflask\api\run.py * Serving Flask app 'api' * Debug mode: on WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on http://127.0.0.1:5000 Press CTRL+C to quit * Restarting with stat * Debugger is active! * Debugger PIN: 108-576-652 127.0.0.1 - - [09/Jul/2024 20:38:58] "GET /cursos HTTP/1.1" 500 - Traceback (most recent call last): File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask\app.py", line 1498, in __call__ return self.wsgi_app(environ, start_response) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask\app.py", line 1476, in wsgi_app response = self.handle_exception(e) ^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_restful\__init__.py", line 298, in error_router return original_handler(e) ^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_restful\__init__.py", line 295, in error_router return self.handle_error(e) ^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_restful\__init__.py", line 310, in handle_error _handle_flask_propagate_exceptions_config(current_app, e) File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask\app.py", line 1473, in wsgi_app response = self.full_dispatch_request() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask\app.py", line 882, in full_dispatch_request rv = self.handle_user_exception(e) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_restful\__init__.py", line 298, in error_router return original_handler(e) ^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_restful\__init__.py", line 295, in error_router return self.handle_error(e) ^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_restful\__init__.py", line 310, in handle_error _handle_flask_propagate_exceptions_config(current_app, e) File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask\app.py", line 880, in full_dispatch_request rv = self.dispatch_request() ^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask\app.py", line 865, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_restful\__init__.py", line 489, in wrapper resp = resource(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask\views.py", line 110, in view return current_app.ensure_sync(self.dispatch_request)(**kwargs) # type: ignore[no-any-return] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_restful\__init__.py", line 604, in dispatch_request resp = meth(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\api\views\curso_views.py", line 13, in get return paginate(Curso,cs) ^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\api\paginate.py", line 24, in paginate 'results':schema.dump(page_obj.items) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\marshmallow\schema.py", line 549, in dump result = self._serialize(processed_obj, many=many) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\marshmallow\schema.py", line 512, in _serialize self._serialize(d, many=False) File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\marshmallow\schema.py", line 517, in _serialize value = field_obj.serialize(attr_name, obj, accessor=self.get_attribute) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\marshmallow\fields.py", line 341, in serialize return self._serialize(value, attr, obj, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_marshmallow\fields.py", line 209, in _serialize return _rapply(self.schema, _url_val, key=attr, obj=obj) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_marshmallow\fields.py", line 158, in _rapply return {key: _rapply(value, func, *args, **kwargs) for key, value in d.items()} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_marshmallow\fields.py", line 160, in _rapply return func(d, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_marshmallow\fields.py", line 168, in _url_val return val.serialize(key, obj, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\marshmallow\fields.py", line 341, in serialize return self._serialize(value, attr, obj, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask_marshmallow\fields.py", line 124, in _serialize return url_for(self.endpoint, **param_values) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask\helpers.py", line 220, in url_for return current_app.url_for( ^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask\app.py", line 1084, in url_for return self.handle_url_build_error(error, endpoint, values) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\flask\app.py", line 1073, in url_for rv = url_adapter.build( # type: ignore[union-attr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ferre\PycharmProjects\FlaskAPIflask\.venv\Lib\site-packages\werkzeug\routing\map.py", line 924, in build raise BuildError(endpoint, values, method, self) werkzeug.routing.exceptions.BuildError: Could not build url for endpoint 'cursodetail'. Did you forget to specify values ['id']? [/code] myterminalpycharm Я проверил, что методы HTTP (GET, PUT, DELETE) верны и что конечная точка cursodetail определена с идентификатором параметр. Однако я продолжаю получать вышеупомянутую ошибку при попытке доступа к маршруту. Как я могу решить эту проблему?
Я пытаюсь перенаправить запрос с protected_api() на функцию login() в fastapi. но с сообщениями происходит сбой.
Не удалось получить.
Возможные причины:
CORS
Сбой сети
Схема URL должна быть «http» или «https» для запроса CORS.
в чем может быть...
Я передаю контекстную переменную review_id в приведенной ниже функции представления в шаблон. Предполагается, что переменная контекста будет использоваться при создании URL-адреса с использованием URL-адреса тега шаблона.
views.py
def...
Я делаю проект на Python. У меня есть URL, скажем, Есть еще один такой URL: Итак, оба этих URL-адреса являются дочерними элементами /medal/ (или, как я думал). Теперь есть еще один дочерний URL, например