[FIXED] Flask Error: "Method Not Allowed The method is not allowed for the requested URL"

Issue

When I try to submit data to the Flask form, I get the following error:

Method not allowed Method not allowed for requested URL.
 

I think there is a problem with return redirect(url_for('database')) that I am doing. I also tried return render_template('database.html) . I’m trying to call a database page once a form entry has been submitted to the database.

Here’s the relevant part of the code:

@app.route('/entry', Methods=['GET', 'POST'])
def entry_page():
    If request.method == 'POST':
        date = request.form['date']
        Title = request.form['blog_title']
        post = request.form['blog_main']
        post_entry = models.BlogPost(date = date, title = title, post = post)
        db.session.add(post_entry)
        Decibel. session. commit()
        return redirect(url_for('database'))
    other than that:
        return render_template('entry.html')

@app.route('/database')
Database definition ():
    query = []
    for i in session.query(models.BlogPost):
        query.append((i.title, i.post, i.date))
    return render_template('database.html', query = query)
 

entry.html is…

This is a blog entry page

blog:

    
date title main

and database.html…

Here is the query:

{{query}}
 

Solution

What is happening here is that database route does not accept any url methods.

I would try putting the url methods in the app route just like you have in the entry_page function:

@app.route('/entry', methods=['GET', 'POST'])
def entry_page():
    if request.method == 'POST':
        date = request.form['date']
        title = request.form['blog_title']
        post = request.form['blog_main']
        post_entry = models.BlogPost(date = date, title = title, post = post)
        db.session.add(post_entry)
        db.session.commit()
        return redirect(url_for('database'))
    else:
        return render_template('entry.html')

@app.route('/database', methods=['GET', 'POST'])        
def database():
    query = []
    for i in session.query(models.BlogPost):
        query.append((i.title, i.post, i.date))
    return render_template('database.html', query = query)

Answered By – Wondercricket

Answer Checked By – Terry (Easybugfix Volunteer)

Leave a Reply

(*) Required, Your email will not be published