URLs Significativas para Aplicações Web Dinâmicas

PythonBeginner
Pratique Agora

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.

  1. Abra o arquivo route_decorator.py, importe a classe Flask e crie uma instância dela.
from flask import Flask
app = Flask(__name__)
  1. 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'
  1. 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)
  1. 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.

Flask route decorator example

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>.

  1. 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__)
  1. 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
  1. 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)
  1. 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.

Flask dynamic URL example

Então a página exibirá a mensagem User Alice.

  1. 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.

  1. Abra o arquivo redirection_behavior.py, importe a classe Flask e crie uma instância dela.
from flask import Flask
app = Flask(__name__)
  1. 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/).

  1. 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.

  1. 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)
  1. 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.

Flask projects route example

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:

404 error page display

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.

  1. 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__)
  1. 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'
  1. 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
  1. 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.