Flask - Error werkzeug.exceptions.BadRequestKeyError -

Flask - Error werkzeug.exceptions.BadRequestKeyError -

Estoy tratando de ejecutar mi primera aplicación de matraz, pero recibo el siguiente error después de enviar la solicitud POST en Postman.

Error: werkzeug.exceptions.BadRequestKeyError: 400 Solicitud incorrecta: el navegador (o proxy) envió una solicitud que este servidor no pudo entender. KeyError: 'objetivo'

El error probablemente provenga de aquí: goal = request.form['goal'] , ya intenté cambiar el request.form a request.jsono form.get sin éxito . :(

¿Alguna idea?

Nota: uso Windows, Visual Studio, Python 3.9 y Postman.


app = Flask(__name__)

@app.route('/create', methods=('GET', 'POST'))

def create():
    if request.method == 'POST':
        goal = request.form['goal']
        content = request.form.get['content']
        
        if not title:
            flash('Goal is required!')
    return calc(goal,content)
    
if __name__ == "__main__":
   app.run(debug=True)

def calc(goal, content):

#rest of the code here...#

    return jsonify({
        "status": 200,
        "message": "Success",
        "data":data
})```
Mostrar la mejor respuesta

Encuentro muy útil en casos como este agregar una impresión (solicitud) al comienzo de su función create(). Eso debería mostrarle qué elementos tiene en el objeto y ayudarlo a determinar sus próximos pasos de depuración.

Gracias por el aporte @JamesMcPherson, agregué las siguientes líneas después de la función create(): print(request.method) print(request.url) print(request.data) print(request.headers) Las impresiones son: POST 127.0.0.1:5000/create b'' Ninguno Agente de usuario: PostmanRuntime/7.28.4 Aceptar: */* Postman-Token: 4c3a-896f-yy8b-a82c -dxxx8c9xx (editado) Host: 127.0.0.1:5000 Aceptar codificación: gzip, deflate, br Conexión: keep-alive Content-Length: 0 Siendo request.data "b''" y Content-Length: 0 Supongo que necesito ajustar la aplicación para recibir la información POST correctamente.

Me parece que no ha creado su página web base inicial (index.html), que contendría su elemento de formulario. Si observa github.com/jmcp/find- my-electorate/blob/master/app.py#L271, verá que la ruta base llama a render_template() con un argumento, que es github.com/jmcp/find-my-electorate/blob/master/templates/…. Eso crea un elemento

que se pasa al método POST. En su fragmento no tiene nada de eso, por lo que no hay ningún objeto de solicitud para pasar.

Gracias por la ayuda @JamesMcPherson, ¡pude recibir la información POST después de crear la página web base inicial! Estoy tratando de aceptar la respuesta, pero no estoy seguro de por qué no muestra la marca de verificación junto a la respuesta/comentario.

Probablemente porque es un comentario en lugar de una respuesta. Lo arreglaré enseguida. Gracias

Me parece que no ha creado su página web base inicial (index.html), que contendría su elemento de formulario.

Si observa https://github .com/jmcp/find-my-electorate/blob/master/app.py#L271, verá que la ruta base llama a render_template() con un argumento, que es https://github.com/jmcp/find-my-electorate /blob/master/templates/index.html. Eso crea un elemento que se pasa al método POST.

En su fragmento no tiene nada de eso, por lo que no hay ningún objeto de solicitud para pasar.