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.

¿Por qué no puedo enviar mensajes desde Flask HTML a Flask Python?

He estado trabajando en un programa en Flask que te permite buscar en una base de datos. Aún no he codificado la parte de encontrar cosas en la base de datos ni nada, pero no lo necesito en este momento, y la base de datos no afecta nada por ahora. No he podido encontrar la manera de pasar lo que el usuario escribe en el formulario al programa de Python. Se ejecuta sin errores, pero cuando reviso lo que recibí obtengo None. ¿Hay algo que estoy haciendo mal? Este es mi código, es muy desordenado y es solo un archivo.

main.py

from flask import Flask, render_template
from flask import request
import pdfkit, time

def go(letters):
  data = open('data.txt','r')
  return letters

app = Flask(__name__)

@app.route("/path/", methods=['GET','POST'])
def search():
  time.sleep(1)
  data=request.get_data()
  print(data)
  return go(data)

@app.route('/')
def index():
  return render_template('index.html')

if __name__ == "__main__":
    from waitress import serve
    serve(app, host="0.0.0.0", port=8080)
    app.run(debug=True)

templates/index.html

<!DOCTYPE html>
<html lang="en">
<h1>Welcome!</h1><br>
<p>Type to search the database.</p>
<br><form name='this' onsubmit='letsgo()' class='text' action='/path/' method='post'><input id='hey' type='text'> <input type='submit' value='search'></form>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
var test = document.getElementById('hey').value;
  const xhr = new XMLHttpRequest();
function letsgo() {

const data = document.getElementById("hey").value;
  alert(data);
$.ajax({
  type : 'POST',
  url : "{{'https://file-encrypter.ashwinchera.repl.co/path/'}}",
  dataType: 'data',
  data : {'data':data}
});

};
</script>

Además, estoy trabajando con un amigo, así que no sé para qué es algunas de estas cosas aquí. ¿Alguien puede decirme cómo puedo enviar estos datos? He estado intentando cosas de otras preguntas, pero no funcionan.
¡Gracias de antemano!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en la forma en que se pasa la información desde el formulario al programa de Python. En la función search() en main.py, se está utilizando request.get_data() para recuperar los datos del formulario, pero esto puede no funcionar como se espera.

    En cambio, intenta utilizar request.form para obtener los datos del formulario de la siguiente manera:

    @app.route("/ruta/", methods=['GET','POST'])
    def search():
      if request.method == 'POST':
        data = request.form['data'] # asumiendo que el nombre del campo de entrada del formulario es 'data'
        return go(data)
      return render_template('index.html')
    

    Luego, en el archivo index.html, la función $.ajax debe actualizarse para pasar los datos como parte del cuerpo de la solicitud, de la siguiente manera:

    <script>
      function letsgo() {
        const data = document.getElementById("hey").value
        alert(data)
        $.ajax({
          type: 'POST',
          url: "{{ url_for('search') }}",
          data: { data: data },
          success: function(response) {
            // maneja la respuesta aquí
          }
        });
        return false; // evita que el formulario se envíe
      }
    </script>
    

    Observa el uso de {{ url_for('search') }} en el parámetro url de $.ajax – esto generará la URL correcta para la función search basada en el decorador @app.route.

    ¡Espero que esto te ayude!

Comments are closed.