How to delete items from database using a Flask framework?

10,204

Solution 1

If you are going to use a POST request the variable will be available under flask's request.form. If you stay with DELETE I think you need to change your uri. For example:

@app.route('/delete/<int:postID>', methods=['DELETE'])

Solution 2

To get the postID use this {{ loop.revindex }}

This is my code,it works!!

In the .py:

@app.route('/delete', methods=['POST'])
def delete_entry():
    if not session.get('logged_in'):
        abort(401)
    db = get_db()
    db.execute('delete from entries where id = ?'[request.form['entry_id']])
    db.commit()
    flash('Entry deleted')
    return redirect(url_for('show_entries'))

In the HTML:

<form action="{{ url_for('delete_entry') }}" method=post class=delete-entry>
          <input type="hidden" name="entry_id" value="{{ loop.revindex }}">
          <input type="submit" value="Delete" />
</form>
Share:
10,204
Hayley van Waas
Author by

Hayley van Waas

Updated on June 17, 2022

Comments

  • Hayley van Waas
    Hayley van Waas almost 2 years

    I'm working with a Flask framework, and am trying to delete an entry from the database. The code below gives this error: "The method is not allowed for the requested URL."

    In the html:

    <form action="{{ url_for('delete_entry', id=entry.id) }}" method="POST">
         <input type="hidden" name="_method" value="DELETE" />
         <input type="submit" value="Delete entry" />
    </form>
    

    In the py:

    @app.route('/delete', methods=['DELETE'])
    def delete_entry(postID):
        if not session.get('logged_in'):
            abort(401)
        g.db.execute('delete from entries WHERE id = ?', [postID])
        flash('Entry was deleted')
        return redirect(url_for('show_entries'))
    

    How do I then get the correct postID from the html to the py?