es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Manejo de 2 solicitudes POST a través de la misma ruta con Flask

Estoy intentando manejar 2 solicitudes POST diferentes en la misma página. El código que tengo actualmente maneja correctamente meterID = request.form.get('add_meterId'), pero en la cláusula else, meterID = request.form.get('del_meterId') devuelve una Nonetype cuando se envía un valor. A continuación se muestra el código de Python y el código HTML para las 2 solicitudes POST. Cualquier sugerencia sería muy apreciada.

@app.route(‘/administrar-medidores’, methods=[‘GET’, ‘POST’])
@login_required
def administrar_medidores():
if request.method == ‘POST’ and request.form[“form-group”]==”add_meterId”:
meterID = request.form.get(‘add_meterId’)
return redirect(url_for(‘auth.administrar_medidores’))
else:
meterID = request.form.get(‘del_meterId’)
return redirect(url_for(‘auth.administrar_medidores’))

Añadir ID del Medidor


Eliminar ID del Medidor


Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Manejo de múltiples pedidos POST en la misma página

    El código en Python y el código HTML proporcionados contienen dos pedidos POST que deben ser manejados usando la misma función manage_meters(). El primer pedido POST permite agregar una ID de medidor, mientras que el segundo permite eliminar una ID de medidor.

    El problema reportado es que la variable meterID establecida en la cláusula else de manage_meters() retorna un valor de tipo NoneType cuando se envía una ID de medidor para eliminar. A diferencia del primer pedido POST, que establece correctamente meterID usando request.form.get('add_meterId'), el segundo pedido POST usa request.form.get('del_meterId').

    Una posible solución a este problema es asegurarse de que el atributo name del campo de entrada en el segundo pedido POST coincida con el nombre del campo utilizado al recuperar el valor enviado en la función Python. Actualmente, el nombre se establece en del_MeterId mientras que la función Python espera del_meterId. Cambiar el nombre del campo de entrada a del_meterId debería resolver el problema.

    Además, como ambos pedidos POST redirigen a la misma página con la misma función de vista, puede ser útil diferenciar el comportamiento de la función dependiendo del pedido POST que se haya enviado usando declaraciones condicionales o funciones separadas.

    @auth.route('/manage-meters', methods=['GET', 'POST'])
    @login_required
    def manage_meters():
        if request.method == 'POST':
            form_group = request.form.get("form-group")
            if form_group == "add_meterId":
                meterID = request.form.get('add_meterId')
                # Manejar la adición de la ID de medidor
            elif form_group == "del_meterId":
                meterID = request.form.get('del_meterId')
                # Manejar la eliminación de la ID de medidor
        return render_template('manage-meters.html')
    

    Al usar la variable form_group para identificar qué pedido POST se está enviando, podemos manejar cada operación por separado en lugar de redirigir a la misma página sin distinción entre ellas.

Comments are closed.