4
respostas

bad request

Eu to numa parte muito semelhante a descrita no vídeo. Mas eu to obtendo bad request na parte comentada do código. Alguém sabe o que há? Só obtenho o resultado esperado se eu manter o código assim. E não consigo capturar nada do meu html.

@app.route('/cars/novo', methods=["POST",])
def addCarro():
    '''
    marca = request.form['marca']

    modelo = request.form['modelo']
    placa = request.form['placa']
    data_apreensao = request.form['data_apreensao']
    motivo = request.form['motivo']
    situacao = request.form['situacao']
    '''    
    #apreensao = Apreensao(marca,modelo, placa, data_apreensao, motivo, situacao, apreensao)
    return render_template('apreensaoForm.html', titulo='Nova Apreensao')
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Formulário de Apreensao</title>
</head>
<body>
    <div class="container">
      <div class="page-header">
          <h1>{{ titulo }}</h1>
      </div>
      <form action="/cars/novo" method="POST">
        <fieldset>
          <div class="form-group">
            <label for="marca">marca</label>
            <input type="text" id="marca" name="marca" class="form-control">
          </div>

          <div class="form-group">
            <label for="modelo">modelo</label>
            <input type="text" id="modelo" name="modelo" class="form-control">
          </div>

          <div class="form-group">
            <label for="placa">placa</label>
            <input type="text" id="placa" name="placa" class="form-control">
          </div>

          <div class="form-group">
            <label for="data-apreensao">data da apreensão</label>
            <input type="date" id="data-apreensao" name="data-apreensao" class="form-control">
          </div>

          <div class="form-group">
            <label for="motivo">motivo</label>
            <input type="text" id="motivo" name="motivo" class="form-control">
          </div>

          <div class="form-group">
            <label for="situacao">situação</label>
            <input type="text" id="situacao" name="situacao" class="form-control">
          </div>

          <button type="submit" class="btn btn-primary btn-salvar">Salvar</button>
        </fieldset>
      </form>
    </div>
</body>
</html>
4 respostas

Quando eu adiciono, methods=['POST']:

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

Para de funcionar.

quando eu ponho GET vejo o formulario. Mas da problema se eu descomentar o código. Nem o postman sai do erro 400

@app.route('/cars/novo', methods=['GET','POST',])

Opa Marcos, tudo bem?

Você precisa dividir essas operações em duas funções: uma para renderizar o formulário e outra para receber as informações deste.

Vi no seu código que no HTML no campo de data está com o hífen separando(name="data-apreensao"), enquanto que no código Python, você está esperando com o underscore separando as palavras (request.form['data_apreensao'])

Bem, a solução que encontrei foi a seguinte, separamos em duas funções diferentes e mudamos o separador do código Python para um hífen também:

@app.route('/cars/add', methods=['POST'])
def add():
    marca = request.form['marca']

    modelo = request.form['modelo']
    placa = request.form['placa']
    data_apreensao = request.form['data-apreensao']
    motivo = request.form['motivo']
    situacao = request.form['situacao']
    #apreensao = Apreensao(marca,modelo, placa, data_apreensao, motivo, situacao, apreensao)
    return redirect('/cars/novo')

@app.route('/cars/novo', methods=["GET"])
def addCarro():    
    return render_template('./novo.html', titulo='Nova Apreensao')

Ah sim, precisamos mudar o action no HTML também

<form action="/cars/add" method="POST">

eu vi tudo isso essa manhã. Mas eu resolvi isso assim:

@app.route('/cars/novo', methods=['GET','POST'])
def addCarro():

    # HERE I GOT THE PROBLEM
    if request.method == 'POST':
        marca = request.form['marca']
        modelo = request.form['modelo']
        placa = request.form['placa']
        motivo = request.form['motivo']
        situacao = request.form['situacao']
        #dt = datetime.strftime(request.form['data-apreensao'], '%Y-%m-%d')
        #data_apreensao = request.form['data_apreensao']
        carros.append(Apreensao(marca,modelo, placa, motivo, situacao))
        return redirect('/cars')

Mas não sei se está adequado. Por hora ficará assim Mas obrigado