TGViewer
About Python [ru] About Python [ru] @python_tesst · 6.44K subscribers
Post #2124 787
👩‍💻 Мини-роутер с поддержкой path-параметров

Реализуйте класс MiniRouter, который позволяет регистрировать и вызывать обработчики HTTP-путей с динамическими параметрами. Поддерживаемые шаблоны маршрутов:

• /users/:id — параметр id

• /posts/:post_id/comments/:comment_id — вложенные параметры

Метод add_route(path_template, handler) регистрирует обработчик. Метод resolve(path) вызывает нужный обработчик и передаёт ему параметры в виде словаря.

Если путь не совпадает ни с одним шаблоном — выбрасывается ValueError.

Решение задачи🔽

class MiniRouter:
def __init__(self):
self.routes = []

def add_route(self, path_template, handler):
parts = path_template.strip('/').split('/')
self.routes.append((parts, handler))

def resolve(self, path):
path_parts = path.strip('/').split('/')

for route_parts, handler in self.routes:
if len(route_parts) != len(path_parts):
continue

params = {}
matched = True

for route_part, path_part in zip(route_parts, path_parts):
if route_part.startswith(':'):
params[route_part[1:]] = path_part
elif route_part != path_part:
matched = False
break

if matched:
return handler(params)

raise ValueError("No route matched")

# Пример использования:
router = MiniRouter()

def user_handler(params):
return f"User ID: {params['id']}"

def comment_handler(params):
return f"Post {params['post_id']}, Comment {params['comment_id']}"

router.add_route('/users/:id', user_handler)
router.add_route('/posts/:post_id/comments/:comment_id', comment_handler)

print(router.resolve('/users/42')) # ➜ User ID: 42
print(router.resolve('/posts/100/comments/55')) # ➜ Post 100, Comment 55
  • 👍 1
More from @python_tesst
  1. Oct 4, 2026Cache Control в Claude Code Советую поставить Cache Control в Claude Code. Причём настойчи…
  2. Oct 2, 2026Post #3218
  3. Oct 2, 2026😅 Айтишник отправил в одну компанию три одинаковых резюме и только одно дошло до финала О…
  4. Oct 2, 2026🤣 Правильно расставленные приоритеты в моей жизни би лайк: 💥 xCode Journal
  5. Oct 1, 2026🤯 Люди взбунтовались против «пыточной для ИИ» На GitHub заметили открытый проект AI Tortu…
  6. Sep 30, 2026Google закинули AI-агента в 20+ чатов живых команд. На 5 месяцев. Вышло забавно. Агенту да…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →