Como você viu, mapeamos nossas páginas de acordo com o nome da aplicação e os respectivos controller e função da página que abrimos. Porém, quando formos deixar essa aplicação acessível ao público, vamos querer uma URL simples e de fácil entendimento. Por isso, podemos alterar o mapeamento de rotas para as nossas páginas, de forma a deixar nossas URLs mais agradáveis.
As rotas podem ser alteradas a partir de um arquivo routes.py que deve ficar na raiz da pasta descompactada do web2py. É possível encontrar uma base para esse arquivo em examples/routes.parametric.example.py ou examples/routes.patterns.example.py, dependendo da opção de roteamento que escolher.
Admita que tenhamos , em um controller default, a página registrar_gato.
É a primeira forma que temos de reescrever nossas rotas. Com esse sistema, é possível omitir a aplicação e o controller padrão da URL, mapear domínios diferentes para diferentes aplicações ou controllers, adicionar um seletor de linguagem na URL, entre outros.
O mais interessante aqui é poder retirar o nome da apliação e do controller da URL, deixando apenas o nome da página visível. Dessa forma, ao invés de uma URL:
http://dominio.com/meu_app/default/registrar_gato
Posso ter apenas:
http://dominio.com/registrar_gato
Isso pode ser feito facilmente reescrevendo o arquivo routes.py da seguinte maneira:
routers = dict(
BASE = dict(default_application='sua_app',
default_controller='default'),
)
Assim, quando a aplicação padrão e o controller padrão forem chamados, ambos serão omitidos da URL.
Esse sistema é recomendado para casos mais complexos, onde não queremos deixar a URL somente limpa e amigável, mas sim promover grandes alterações nela.
Para utilizar o Pattern-based System é necessário definir duas tuplas, uma routes_in
e outra routes_out
. A tupla de routes_in é a tradução da URL digitada em uma função, ou seja, é ela que vai falar para qual função determinada URL aponta. Já a tupla de routes_out faz exatamente o contrário, fala pra qual URL determinada função aponta.
routes_in = (
('/registrar', '/sua_app/default/registrar_gato'),
)
routes_out = (
('/sua_app/default/registrar_gato', '/registrar'),
)
Assim, sempre que acessarmos http://dominio.com/registrar, seremos encaminhados para a função registrar_gatos.
Esse sistema utiliza o padrão de expressões regulares do Python para reescrever as URLs. Por exemplo, caso você queira receber um argumento nessa função:
routes_in = (
('/registrar/$argumento', '/sua_app/default/registrar_gato/$argumento'),
)
routes_out = (
('/sua_app/default/registrar_gato/$argumento', '/registrar/$argumento'),
)