Skip to main content

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

  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)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tinyrouter-0.2.1.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

tinyrouter-0.2.1-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

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

Hashes for tinyrouter-0.2.1.tar.gz
Algorithm Hash digest
SHA256 5b4ea82a9d2f1a48e45a079e1b1adf242f0ef475e894b6b18afcf76051ae5961
MD5 5d8b2b521d9e2d246353161b554d09cc
BLAKE2b-256 a482f8029b6d9d95e576045829275364d58276333adfc46aebbf4f4fb3e5c0be

See more details on using hashes here.

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

Hashes for tinyrouter-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f63e56571709c55e4e3ff12a9c2a0617b6d6f274fef984678b26e45ea0ee2b84
MD5 f8abfa37412fc9f2f8519f60da365039
BLAKE2b-256 b0216c72f86cf15f41b543b3d62a6e15869bb90111aebd90b9b0df5833f2b058

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page