A classe Routes
implementará uma interface para a definição de rotas da aplicação. Uma rota será representada por três elementos básicos: o método HTTP definido na requisição, o valor de path da URI da requisição e um objeto callable, que será executado quando a rota ser requisitada.
-
O desenvolvedor poderá definir uma nova rota baseada no método GET do protocolo HTTP utilizando o decorador
@routes.get
;routes = Routes() @routes.get('/blog') def blog(request): ...
-
O desenvolvedor poderá definir uma nova rota com quaiquer outros métodos HTTP de forma semelhante ao
GET
, sendo elesHEAD
,POST
,PUT
,DELETE
,CONNECT
,OPTIONS
eTRACE
; -
O desenvolvedor poderá definir uma nova rota baseada em múltiplos métodos HTTP utilizando o decorador
@routes.any
;routes = Routes() @routes.any({'get', 'head'}, '/blog') def blog(request): ...
-
O desenvolvedor poderá definir uma nova rota a partir de métodos personalizados utilizando, também, o decorador
@routes.any
;routes = Routes() @routes.any({'list'}, '/blog') def blog(request): ...
-
O desenvolvedor poderá definir, através do construtor do objeto
routes
, um prefixo de rota, que deverá ser aplicado em todas as rotas definidas pelo objeto;routes = Routes(prefix='site') @routes.get('/blog') def blog(request): ...
-
O desenvolvedor poderá definir rotas dinâmicas baseadas em expressões regulares. As expressões regulares deverão estar entre chaves e dois pontos,
{::}
;a. O conteúdo entre as chaves deverá ser tratado, pela aplicação, como uma string crua;
@routes.get(r'/users/{:/[0-9]*/:}')
b. Cada bloco de expressão regular presente na rota poderá possuir um nome definido entre as chaves, prescedendo a expressão regular, separada desta por sinais de menor e maior,
<>
;@routes.get('/users/{:<id>/[0-9]*/:}')
c. Se só houverem valores não nomeados na rota, todos deverão ser passados para o objeto callable de forma posicional;
@routes.get('/posts/{:/\d{4}/:}/{:/\d{2}/:}/{:/\d{2}/:}') def posts(request, year, month, day): ...
d. Se só houverem valores nomeados na rota, todos deverão ser passados para o objeto callable como parâmetros nomeados;
@routes.get('/posts/{:<day>/\d{2}/:}/{:<month>/\d{2}/:}/{:<year>/\d{4}/:}') def posts(request, year, month, day): ...
e. Se houverem tanto valores nomeados como não nomeados na rota, necessariamente os valores não nomeados deverão estar antes de qualquer valor nomeado e deverão ser passados pela aplicação para o objeto callable de forma posicional. Todos os valores nomeados serão passados como parâmetros nomeados ao objeto callable;
@routes.get('/posts/{:/\d{4}/:}/{:<day>/\d{2}/:}/{:<month>/\d{2}/:}') def posts(request, year, month, day): ...
f. Todos os valores não nomeados da rota poderão ser acessados via
*args
, enquanto todos os valores nomeados poderão ser acessados via**kwargs
;@routes.get('/posts/{:/\d{4}/:}/{:<day>/\d{2}/:}/{:<month>/\d{2}/:}') def posts(request, *args, **kwargs): print(args) # ['2017'] print(kwargs) # {'day': '28', 'month': '11'}