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
- 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)
| File | Size | Uploaded | |
|---|---|---|---|
| tinyrouter-0.2.1.tar.gz | 5.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|