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.

Separe la ruta de Flask del método GET del método POST.

Tengo una ruta siguiente para la carga de archivo.

¿Cómo separar esta ruta, para que pueda tener métodos GET y POST en funciones diferentes con ruta común como sigue?

@app.route("/upload", methods=["GET"])
def upload_file_get():
    return render_template(...)

@app.route("/upload", methods=["POST"])
def upload_file_post():
    form = FileUploadForm()
    ...
    return redirect(...)
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para separar la ruta y tener funciones separadas para los métodos GET y POST con una ruta común, puedes hacer lo siguiente:

    @app.route("/upload", methods=["GET"])
    def upload_file_form():
        form = FileUploadForm()
        return render_template("upload_file.html", form=form)
    
    @app.route("/upload", methods=["POST"])
    def upload_file_submit():
        form = FileUploadForm()
        if form.validate_on_submit():
            file = form.document.data
            file_name = secure_filename(file.filename)
            save_path = get_user_uploads_folder(current_user) / file_name
            file.save(save_path)
            return redirect(url_for("list_user_files"))
        return redirect(url_for("upload_file_form"))
    

    Esto crea dos funciones separadas, upload_file_form y upload_file_submit, ambas con la misma ruta de /upload, pero con diferentes métodos HTTP de GET y POST respectivamente.

    upload_file_form simplemente renderiza el formulario de carga, mientras que upload_file_submit procesa el envío del formulario, valida la entrada, guarda el archivo y redirige al usuario a la página list_user_files tras una presentación exitosa. Si la validación falla, el usuario es redirigido de vuelta al formulario de carga.

Comments are closed.