Aplicações web modernas utilizam URLs significativas para auxiliar os usuários. É mais provável que os usuários gostem de uma página e retornem a ela se a página usar uma URL significativa que eles possam lembrar e usar para visitar diretamente uma página. Neste laboratório, focaremos em como implementar URLs dinâmicas e anexar múltiplas regras a uma função no Flask.
Decorador de Rota (Route Decorator)
Neste passo, você usará o decorador route() para associar múltiplas funções de visualização (view functions) com múltiplas URLs.
Abra o arquivo route_decorator.py, importe a classe Flask e crie uma instância dela.
from flask import Flask
app = Flask(__name__)
Em seguida, usamos o decorador route() para criar duas rotas, / e /hello, associando as funções de visualização correspondentes, fazendo com que elas retornem Index Page e Hello, World, respectivamente.
Criando um ponto de entrada main do script para iniciar a aplicação Flask na porta 5000, habilitando o modo debug.
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000, debug=True)
Para executar a aplicação, primeiro use os seguintes comandos para iniciar a aplicação Flask no terminal:
python3 route_decorator.py
Em seguida, abra a aba "Web 5000" localizada no topo da interface, atualize a página e você poderá ver a mensagem Index Page.
Para a rota /hello, você pode adicionar o sufixo hello diretamente na barra de URL acima.
Então a página exibirá a mensagem Hello, World.
Regras com Variáveis
Neste passo, você adicionará seções variáveis a uma URL marcando seções com <nome_da_variável>. Opcionalmente, você pode usar um conversor para especificar o tipo do argumento, como <conversor:nome_da_variável>.
Abra o arquivo variable_rules.py, primeiro importe a classe Flask e escape, e então crie uma instância da classe Flask.
from flask import Flask
from markupsafe import escape
app = Flask(__name__)
No decorador route(), adicione os padrões <nome_da_variável> e <conversor:nome_da_variável> para criar URLs dinâmicas com seções variáveis. Faça com que as funções de visualização retornem strings formatadas.
@app.route('/user/<username>')
def show_user_profile(username):
## show the user profile for that user
return f'User {escape(username)}'
@app.route('/post/<int:post_id>')
def show_post(post_id):
## show the post with the given id, the id is an integer
return f'Post {post_id}'
@app.route('/path/<path:subpath>')
def show_subpath(subpath):
## show the subpath after /path/
return f'Subpath {escape(subpath)}'
Abaixo está uma tabela de tipos de conversores comuns:
Tipo
Função
string
(padrão) aceita qualquer texto sem uma barra
int
aceita inteiros positivos
float
aceita valores de ponto flutuante positivos
path
como string, mas também aceita barras
uuid
aceita strings UUID
Criando um ponto de entrada main do script para iniciar a aplicação Flask na porta 5001, habilitando o modo debug.
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5001, debug=True)
Para executar a aplicação, primeiro use os seguintes comandos para iniciar a aplicação Flask em um novo terminal:
python3 variable_rules.py
Em seguida, abra a aba "Web 5001" localizada no topo da interface, adicione o sufixo user/Alice diretamente na barra de URL acima.
Então a página exibirá a mensagem User Alice.
Você também pode repetir as mesmas operações para os sufixos post/1 e path/some/path. Para o sufixo post/1, ele exibe a mensagem Post 1. Para o sufixo path/some/path, ele exibe a mensagem Subpath some/path.
Comportamento de Redirecionamento
Neste passo, você aprenderá duas regras que diferem no uso de uma barra final.
Abra o arquivo redirection_behavior.py, importe a classe Flask e crie uma instância dela.
from flask import Flask
app = Flask(__name__)
Use o decorador route() para criar uma rota chamada /projects/ com uma função de visualização chamada projects.
@app.route('/projects/')
def projects():
return 'The project page'
A URL canônica para o endpoint projects tem uma barra final. É semelhante a uma pasta em um sistema de arquivos. Se você acessar a URL sem uma barra final (/projects), o Flask redirecionará você para a URL canônica com a barra final (/projects/).
Crie outra rota chamada /about com uma função de visualização chamada about.
@app.route('/about')
def about():
return 'The about page'
A URL canônica para o endpoint about não tem uma barra final. É semelhante ao nome do caminho de um arquivo. Acessar a URL com uma barra final (/about/) produz um erro 404 Not Found. Isso ajuda a manter as URLs únicas para esses recursos, o que ajuda os mecanismos de busca a evitar indexar a mesma página duas vezes.
Criando um ponto de entrada main do script para iniciar a aplicação Flask na porta 5002, habilitando o modo debug.
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5002, debug=True)
Para executar a aplicação, primeiro use os seguintes comandos para iniciar a aplicação Flask em um novo terminal:
python3 redirection_behavior.py
Em seguida, abra a aba "Web 5002" localizada no topo da interface, adicione o sufixo projects diretamente na barra de URL acima.
Então a página exibirá a mensagem The project page, porque ela redireciona para a rota /projects/.
Adicione outro sufixo about/ em vez de projects:
Você deve ver a mensagem Not Found, que indica um erro 404. Mude o sufixo para about, então ele pode exibir a mensagem correta The about page.
Construção de URLs
Neste passo, você usará a função url_for() para construir uma URL para uma função específica. Ela aceita o nome da função como seu primeiro argumento e qualquer número de argumentos de palavra-chave, cada um correspondendo a uma parte variável da regra da URL. Partes variáveis desconhecidas são anexadas à URL como parâmetros de consulta.
Abra o arquivo url_building.py e, primeiro, importe a classe Flask e url_for. Também não se esqueça de criar uma instância da classe Flask.
from flask import Flask, url_for
app = Flask(__name__)
Use o decorador route() para criar três rotas e definir as funções de visualização correspondentes.
Usamos o método test_request_context() para testar url_for(). Ele diz ao Flask para se comportar como se estivesse lidando com uma requisição, mesmo enquanto usamos um shell Python.
with app.test_request_context():
print(url_for('index'))
print(url_for('login'))
print(url_for('login', next='/'))
print(url_for('profile', username='John Doe'))
url_for('index') gera uma URL para a função de visualização index, resultando em /.
url_for('login') gera uma URL para a função de visualização login, resultando em /login.
url_for('login', next='/') gera uma URL para a função de visualização login e inclui um parâmetro de consulta adicional next, resultando em /login?next=/.
url_for('profile', username='John Doe') gera uma URL para a função de visualização profile com a variável username definida como John Doe, resultando em /user/John%20Doe
Execute diretamente o arquivo url_building.py em um novo terminal:
python3 url_building.py
ele deve exibir:
/
/login
/login?next=/
/user/John%20Doe
Resumo
Neste laboratório, aprendemos vários métodos para criar URLs significativas, o que é muito importante ao projetar uma aplicação web. Ao usar habilmente os recursos de roteamento do Flask, você pode criar URLs organizadas e intuitivas que aprimoram a experiência do usuário.