Passo 4: Conexão ao banco de dados durante uma requisição

Já sabemos como abrir uma conexão de banco de dados para uso em um script ou no console interativo, mas como podemos fazê-lo de modo elegante a cada requisição Web? A conexão com o banco de dados será usada em várias funções então faz sentido abrir a conexão antes de tratar cada requisição e fechar depois.

Flask permite que façamos isto com os decoradores de função before_request(), after_request() e teardown_request():

@app.before_request
def pre_requisicao():
    g.bd = conectar_bd()

@app.teardown_request
def encerrar_requisicao(exception):
    g.bd.close()

Funções marcadas com before_request() são invocadas antes de uma requisição e não recebem argumentos. Funções marcads com after_request() são invocadas após uma requisição e recebem o objeto response que será enviado ao cliente. Elas têm que devolver este objeto response ou um objeto response diferente. Entretanto sua invocação não é garantida caso seja levantada uma exceção no tratamento da requisição. É para isso que servem as funções marcadas com teardown_request(). Elas são invocadas depois que a resposta é construída. Elas não podem modificar a requisição, e qualquer valor devolvido por elas é ignorado. Se uma exceção aconteceu duranteo o processamento da requisição, cada função marcada com teardown_request recebe a exceção; do contrário, elas recebem None.

Armazenamos a conexão de banco de dados aberta no objeto especial g que o Flask fornece. Este objeto armazena informaçõoes apenas pela duração de uma requisição e está disponível para cada uma de suas funções. Nunca armazene tais coisas em outros objetos, pois poderá ter problemas em ambientes multi-thread. O objeto g faz algumas mágicas por baixo dos panos para garantir que tudo funcione.

Continue com Passo 5: As funções de view.

Hint

Onde eu coloco este código?

Se você vem acompanhando este tutorial, talvez esteja em dúvida sobre onde colocar o código deste passo e o do próximo. Um lugar lógico é agrupar estas funções e colocar as novas pre_requisicao e encerrar_requisicao abaixo da função criar_bd (se você está seguindo o tutorial linha por linha).

Se precisar se localizar, veja como o exemplo traduzido está organizado, assim como o exemplo original. No Flask, você pode colocar todo o código da sua aplicação em um único módulo Python. Mas você não é obrigado a fazer isto, e se a sua aplicação ficar grande, é uma boa idéia organizar o código em vários arquivos separados.

Previous topic

Passo 3: Criando o banco de dados

Next topic

Passo 5: As funções de view

This Page