Introdução
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 classeFlaske 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.
@app.route('/')
def index():
return 'Index Page'
@app.route('/hello')
def hello():
return 'Hello, World'
- Criando um ponto de entrada
maindo script para iniciar a aplicação Flask na porta 5000, habilitando o mododebug.
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 classeFlaskeescape, e então crie uma instância da classeFlask.
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
maindo script para iniciar a aplicação Flask na porta 5001, habilitando o mododebug.
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/1epath/some/path. Para o sufixopost/1, ele exibe a mensagem Post 1. Para o sufixopath/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 classeFlaske 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 chamadaprojects.
@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
/aboutcom uma função de visualização chamadaabout.
@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
maindo script para iniciar a aplicação Flask na porta 5002, habilitando o mododebug.
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.pye, primeiro, importe a classeFlaskeurl_for. Também não se esqueça de criar uma instância da classeFlask.
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.
@app.route('/')
def index():
return 'index'
@app.route('/login')
def login():
return 'login'
@app.route('/user/<username>')
def profile(username):
return f'{username}\'s profile'
- Usamos o método
test_request_context()para testarurl_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çãoindex, resultando em/.url_for('login')gera uma URL para a função de visualizaçãologin, resultando em/login.url_for('login', next='/')gera uma URL para a função de visualizaçãologine inclui um parâmetro de consulta adicionalnext, resultando em/login?next=/.url_for('profile', username='John Doe')gera uma URL para a função de visualizaçãoprofilecom a variável username definida comoJohn Doe, resultando em/user/John%20Doe
- Execute diretamente o arquivo
url_building.pyem 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.



