Как исправить NoMatchFound для маршрута в приложении Starlette?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как исправить NoMatchFound для маршрута в приложении Starlette?

Сообщение Anonymous »

Я пишу веб-приложение в Starlette, используя шаблоны Jinja2. При написании собственной системы аутентификации по токену я наткнулся на ошибку NoMatchFound.
Итак, я попытался выяснить, почему именно она не работает. В менеджере продолжительности жизни я распечатал каждый маршрут и связанный с ним url_path_for следующим образом:

Код: Выделить всё

@asynccontextmanager
async def lifespan(app):
for route in app.router.routes:
print(route)
if isinstance(route, Mount):
if isinstance(route.app, Router):
for mount_route in route.app.routes:
print(mount_route)
print(mount_route.url_path_for(mount_route.name))
else:
print(route.url_path_for(route.name))
Вывод:

Код: Выделить всё

Route(path='/', name='index', methods=['GET', 'HEAD'])
/
Route(path='/login', name='login', methods=['GET', 'HEAD'])
/login
Route(path='/logout', name='logout', methods=['GET', 'HEAD'])
/logout
Route(path='/token', name='get_token', methods=['POST'])
/token
Mount(path='/admin', name='', app=)
Mount(path='/user', name='', app=)
Mount(path='/static', name='static', app=)
Пока все хорошо.
Затем я вызвал url_path_ еще раз, за ​​исключением непосредственно объекта маршрутизатора приложения:

Код: Выделить всё

print(app.router.url_path_for('token'))
Это результирующая трассировка стека:

Код: Выделить всё

ERROR:    Traceback (most recent call last):
File ".venv\Lib\site-packages\starlette\routing.py", line 693, in lifespan
async with self.lifespan_context(app) as maybe_state:
~~~~~~~~~~~~~~~~~~~~~^^^^^
File "Python\Python313\Lib\contextlib.py", line 214, in __aenter__
return await anext(self.gen)
^^^^^^^^^^^^^^^^^^^^^
File "\main\webapp\main.py", line 30, in lifespan
print(app.router.url_path_for('token'))
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File ".venv\Lib\site-packages\starlette\routing.py", line 662, in url_path_for
raise NoMatchFound(name, path_params)
starlette.routing.NoMatchFound: No route exists for name "token" and params "".
Вместо этого я попробовал оператор печати с «/token» и получил ту же ошибку.
Насколько я могу судить, мне следует получите соответствующий путь. Есть ли что-то, что я делаю здесь неправильно? Или это проблема Starlete?

Подробнее здесь: https://stackoverflow.com/questions/793 ... rlette-app
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как исправить NoMatchFound для маршрута в приложении Starlette?
    Anonymous » » в форуме Python
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Как получить имя маршрута с помощью FastAPI/Starlette?
    Anonymous » » в форуме Python
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Как получить имя маршрута с помощью FastAPI/Starlette?
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Получить параметры URL-адреса из маршрута без указания маршрута @page - Blazor
    Anonymous » » в форуме C#
    0 Ответы
    125 Просмотры
    Последнее сообщение Anonymous
  • Префикс маршрута против маршрута
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»