Skip to main content

Tiny Router

Tiny Router é um roteador de caminhos para aplicações Flask. A biblioteca centraliza a definição e gerenciamento das rotas utilizadas na aplicação, criar, editar, remover ou trocar controladores facilmente evitando conflitos.

Criando rotas

Uma rota é representada pela classe Route. Ela possui os seguinte atributos:

  • endpoint - Nome utilizado para identificar a rota. Em caso de endpoints com múltiplos termos, recomendado separá-los por ponto ou sublinhado.
  • rule - Caminho para um recurso específico
  • view - Função ou classe que irá manipular a requisição
  • methods - Métodos HTTP para chamada da rota (Default: {'GET'})
  • parameters - Parâmetros que podem ser passados na url.

Ao criar uma rota apenas são obrigatórios endpoint, rule e view.

Exemplo de uma rota simples:

from tinyrouter import Route
from views import user_index

Route('user.index', '/user', user_index)

Por padrão, as rotas são definidas para aceitas apenas o método GET. Entretanto outros métodos podem ser definidos, ou até mais de um.

from tinyrouter import Route
from views import user_index

# Definição dos métodos
methods = ['GET', 'POST']

Route('user.index', '/user', user_index, methods)

Registrando as rotas

Primeiro cria-se uma instância do roteador

from flask import Flask
from tinyrouter import Router

app = Flask(__name__)
router = Router(app)

E invoca o método register passando a lista de rotas que deseja registrar na aplicação

'''
Importaçãoes anteriores
'''
from my_app.routes import routes

'''
 Instância da aplicação e do roteador
'''
router.register(routes)

Pronto! As rotas agora estão registradas na aplicação.

É possível registrar vários grupos de rotas.

from webapp.routes import routes as web_routes
from api.routes import routes as api_routes

router.register(web_routes)
router.register(api_routes)

Ou ainda...

router.register(web_routes, api_routes)

Funções Helper

Métodos HTTP

Criar uma rota que aceite apenas uma método HTTP utilizando Route fica da seguinte forma:

# Importação da view...
from tinyrouter import Route


Route('cliente.create', '/cliente', cliente_create, ['POST'])

Entretanto esse processo pode ser encurtado com os helpers de métodos. Utilizando os helpers, o exemplo acima ficaria assim:

# Importação da view...
from tinyrouter.helpers import route_post as post

post('cliente.create', '/cliente', cliente_create)

O resultado será exatamente o mesmo. Os métodos suportados são:

  • GET
  • POST
  • PUT
  • DELETE

Préfixos

Agrupar rotas de acordo com o recurso ou contexto utilizando o Route pode ser um pouco verboso, como por exemplo, rotas associadas ao recurso Cliente.

[GET] - /cliente/ (Lista todos os Clientes)
[POST] - /cliente/ (Cria um novo registro de Cliente)
[GET] - /cliente/{id} (Recupera um registro específico de Cliente)
[PUT] - /cliente/{id} (Atualiza um registro específico de Cliente)
[DELETE] - /cliente/{id} (Deleta um registro específico de Cliente )

É possível notar que para cada um dos endpoints foi necessário pôr o nome do recurso (Cliente) como préfixo. Utilizando o helper de préfixo esse trabalho não será mais necessário. A função recebe o préfixo a ser adicionado e as rotas que receberão o mesmo. Exemplo:

# Importação das views
from tinyrouter.helpers import route_prefix as prefix
from tinyrouter.helpers import (route_get as get,\
                                route_post as post,\
                                route_put as put,\
                                route_delete as delete)

*prefix('cliente', 
        get('cliente.all', '/', cliente_all),
        post('cliente.create', '/', cliente_create),
        put('cliente.udpate', '/<id>', cliente_update),
        get('cliente.show'), '/<id>', cliente_show),
        delete('cliente.delete', '/<id>', cliente_delete)
    )

NOTA: Ao utilizar o route_prefix é necessário pôr um * na frente da função pois é retornado uma coleção de rotas alteradas, e este artifício garante que as rotas serão "desempacotadas". Entretanto não impede que as novas rotas sejam armazenadas em uma variável.

É possível também utilizar aninhamentos do route_prefix

# Importações...

*prefix('sistema', 
    *prefix('cliente',
        ...
    )
)

Com isso é possível agrupar diversos contextos com um mesmo préfixo sem a necessidade de definir por extenso um a um.

Dicas de Uso

  1. Utilizar um arquivo de rotas para cada parte da aplicação. Exemplo:
# ./clientes/routes.py
from tinyrouter import Route
from .views

routes = [
    *route_prefix('/cliente',
        Route('cliente.index', '/', views.index),
        Route('cliente.show', '/<int:id>', views.show),
        Route('cliente.create', '/create', views.create, ['GET', 'POST'])
    )
]
# ./app.py
from flask import Flask
from tinyrouter import Router
from clientes.routes import routes as rotas_clientes

app = Flask(__name__)
router = Router(app)
router.register(rotas_clientes)

Metadata

Release files for tinyrouter 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tinyrouter 0.2.1
File Size Uploaded
tinyrouter-0.2.1.tar.gz 5.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tinyrouter 0.2.1
File Interpreter ABI Platform
tinyrouter-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 11.4 kB

Release files / tinyrouter-0.2.1.tar.gz

Download URL tinyrouter-0.2.1.tar.gz
Size 5.2 kB
Tags Source
SHA-256 checksum
How to use checksums
5b4ea82a9d2f1a48e45a079e1b1adf242f0ef475e894b6b18afcf76051ae5961
BLAKE2b-256 checksum
How to use checksums
a482f8029b6d9d95e576045829275364d58276333adfc46aebbf4f4fb3e5c0be
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.7.5

Release files / tinyrouter-0.2.1-py3-none-any.whl

Download URL tinyrouter-0.2.1-py3-none-any.whl
Size 6.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f63e56571709c55e4e3ff12a9c2a0617b6d6f274fef984678b26e45ea0ee2b84
BLAKE2b-256 checksum
How to use checksums
b0216c72f86cf15f41b543b3d62a6e15869bb90111aebd90b9b0df5833f2b058
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.7.5

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2

2 release files

0.1.4

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page