Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Diferenca entre parametros da query

Ola,

fiquei na duvida porque na rota "atualizar" ele utilizou essa variavel:

@app.route('/atualizar', methods = ['POST'])

def atualizar():
    jogo = Jogos.query.filter_by(**id=request.form['id']**).first()

Enquanto na rota "deletar" ele incluiu o query.filter_by(id = id)

@app.route('/deletar/<int:id>')
def deletar(id):
    if 'usuario_logado' not in session or session['usuario_logado'] is None:
        return redirect(url_for('login'))

    Jogos.query.filter_by(**id=id**).delete()

Tem alguma diferenca entre eles? E porque tambem nao incluiu em um variavel como na rota atualizar?

Obrigado.

1 resposta
solução!

Olá Alessandro. Tudo bem?

A diferença entre os dois casos que você mencionou está relacionada à forma como os parâmetros são passados para a função filter_by.

Na rota "atualizar", você está utilizando request.form['id'] para obter o valor do ID a partir de um formulário enviado via método POST. Isso significa que o ID está sendo enviado como parte dos dados do formulário, e você precisa acessá-lo dessa maneira. A variável jogo é utilizada para armazenar o resultado da consulta, permitindo que você trabalhe com esse objeto posteriormente na função.

@app.route('/atualizar', methods=['POST'])
def atualizar():
    jogo = Jogos.query.filter_by(id=request.form['id']).first()

Já na rota "deletar", o ID é passado diretamente na URL como um parâmetro de rota. Isso é indicado por <int:id> na definição da rota, o que significa que o Flask automaticamente captura esse valor e o passa como argumento para a função deletar. Nesse caso, você não precisa acessar o ID através de request.form, pois ele já é recebido como um parâmetro da função.

@app.route('/deletar/<int:id>')
def deletar(id):
    if 'usuario_logado' not in session or session['usuario_logado'] is None:
        return redirect(url_for('login'))

    Jogos.query.filter_by(id=id).delete()
    db.session.commit()
    flash('Jogo deletado com sucesso!')
    return redirect(url_for('index'))

A razão pela qual o resultado da query não é armazenado em uma variável na rota "deletar" é porque o objetivo dessa rota é simplesmente deletar o registro correspondente, e não manipular ou exibir os dados antes de deletá-los. Assim, não há necessidade de armazenar o resultado em uma variável.

Espero ter ajudado.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!