No project description provided
Project description
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)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file tinyrouter-0.2.1.tar.gz
.
File metadata
- Download URL: tinyrouter-0.2.1.tar.gz
- Upload date:
- Size: 5.2 kB
- Tags: Source
- Uploaded using 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
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5b4ea82a9d2f1a48e45a079e1b1adf242f0ef475e894b6b18afcf76051ae5961 |
|
MD5 | 5d8b2b521d9e2d246353161b554d09cc |
|
BLAKE2b-256 | a482f8029b6d9d95e576045829275364d58276333adfc46aebbf4f4fb3e5c0be |
File details
Details for the file tinyrouter-0.2.1-py3-none-any.whl
.
File metadata
- Download URL: tinyrouter-0.2.1-py3-none-any.whl
- Upload date:
- Size: 6.2 kB
- Tags: Python 3
- Uploaded using 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
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f63e56571709c55e4e3ff12a9c2a0617b6d6f274fef984678b26e45ea0ee2b84 |
|
MD5 | f8abfa37412fc9f2f8519f60da365039 |
|
BLAKE2b-256 | b0216c72f86cf15f41b543b3d62a6e15869bb90111aebd90b9b0df5833f2b058 |