-1

I'm very new to using Flask and I'm trying to make a simple script to visualize the data I have stored in my database (basically a bunch of products, categories and some other things, all from vending machines), I did the main menu page and the 'categorias' (category) page, where I'm able to see all the categories (of products) in my system, and since categories can have sub-categories I made another page where I can see all the 'sub_categorias' (sub-categories) of the category I want.

For this I made a link from my 'categorias.html' file to 'categorias/sub_categorias?nome={{ record[0] }}', ('nome' being name in my language, and being the name of the "super category" of this sub-category), like so:

<a href="categorias/sub_categorias?nome={{ record[0] }}"> Sub categorias </a>

and it works fine, linking to a new page where the form "nome" is correct, like so:

Category page working just fine

Sub category page not working

but as you can see I get a Bad request error, that I think happens because in my python code, when I do request.form["nome"] it for some reason doesn't get anything, when it should get Sopa. Here's my code:

# Show all the sub-categories of a catgory.
@app.route("/categorias/sub_categorias")
def show_sub_categories():
  dbConn = None
  cursor = None

  try:
    dbConn = psycopg2.connect(DB_CONNECTION_STRING)
    cursor = dbConn.cursor(cursor_factory = psycopg2.extras.DictCursor)

    # Gets all the sub-categories of the super category given.
    query = "SELECT categoria FROM tem_outra WHERE super_categoria=%s;"
    # Gets the data we need from the URL query string.
    data = (request.form["nome"])

    cursor.execute(query, data)

    return render_template("sub_categorias.html", cursor = cursor, params = request.args)

  except Exception as e:
    return str(e)

  finally:
    cursor.close()
    dbConn.close()

For extra context here's my 'categorias.html' file body (although I'm almost certain the problem comes from here):

<h1> Categorias </h1>

        <div id="table">
            <button onclick="window.location.href='menu'"> Menu principal </button>
            <button onclick="window.location.href='categorias/inserir_categoria'"> Inserir categoria </button>
            <button onclick="window.location.href='categorias/remover_categoria'"> Remover categoria </button>

            <table id="Category_table">
                <thead>
                    <tr>
                        <th> Nome </th>
                        <th> Gerir </th>
                    </tr>
                </thead>
                
                <!-- For loop to fetch all the system's categories. -->

                {% for record in cursor %}
                <tr>
                    <td> {{ record[0] }} </td>
                    <td> 
                        <a href="categorias/sub_categorias?nome={{ record[0] }}"> Sub categorias </a>
                    </td>
                </tr>
                {% endfor %}

            </table>
        </div>

I really don't know what I'm doing wrong, so if someone could help me I'd very much appreciate it, Thanks.

1 Answers1

0

When you want to obtain the value of a GET request, you need to do:

nome = request.args.get('nome')

You use request.form when process a POST request

Gonzalo Odiard
  • 1,238
  • 12
  • 19