[Solved] Method Not Allowed flask error 405

I am developing a flask registration form, and I receive an error:

error 405 method not found.


import os
# Flask
from flask import Flask, request, session, g, redirect, url_for, abort, 
     render_template, flash, Markup, send_from_directory, escape
from werkzeug import secure_filename

from cultura import app

# My app
from include import User

def index():
    return render_template('hello.html')

@app.route('/registrazione', methods=['POST']) 
def registration():
    if request.method == 'POST':
        return render_template('registration.html', username=username)
    else :
        return render_template('registration.html')


<head> <title>Form di registrazione </title>

    {{ username }}
    <form id='registration' action='/registrazione' method='post'>
    <fieldset >
    <legend>Registrazione utente</legend>
    <input type='hidden' name='submitted' id='submitted' value='1'/>
    <label for='name' >Nome: </label> 
    <input type='text' name='name' id='name' maxlength="50" /> <br>
    <label for='email' >Indirizzo mail:</label>
    <input type='text' name='email' id='email' maxlength="50" />
    <label for='username' >UserName*:</label>
    <input type='text' name='username' id='username' maxlength="50" />
    <label for='password' >Password*:</label>
    <input type='password' name='password' id='password' maxlength="50" />
    <input type='submit' name='Submit' value='Submit' />


when I visit localhost:5000/registrazione, I receive the error. What am I doing wrong?

Enquirer: Matteo


Solution #1:

This is because you only allow POST requests when defining your route.

When you visit /registrazione in your browser, it will do a GET request first. Only once you submit the form your browser will do a POST. So for a self-submitting form like yours, you need to handle both.


@app.route('/registrazione', methods=['GET', 'POST']) 

should work.

Respondent: Lukas Graf

Solution #2:

Example of a flask app using wsgi with JQuery, Ajax and json:

from flask import Flask, jsonify

application = Flask(__name__, static_url_path='')

def activecalls():
    return application.send_static_file('activecalls/active_calls_map.html')

@application.route('/_getData', methods=['GET', 'POST'])
def getData():
    #hit the data, package it, put it into json.
    #ajax would have to hit this every so often to get latest data.
    arr = {}
    arr["blah"] = []

    return jsonify(response=arr)

if __name__ == '__main__':

Javascript json, /static/activecalls/active_calls_map.html:

<script src="">

    //url : "",
    url : "",
    type: "POST",
    data : formData,
    datatype : "jsonp",
    success: function(data, textStatus, jqXHR)
        //data - response from server
         alert("'" + data.response.blah + "'");
    error: function (jqXHR, textStatus, errorThrown)
         alert("error: " + errorThrown);


When you run this. The alert box prints: “stuff”.

Respondent: Eric Leschinski

Solution #3:

Just for people reading on it now.
You have to render the /registrazione first, befor you can access the form data. Just write.

    def render_registrazione() -> "html":
        return render_template("registrazione.html")

before you define def registration(). Sequence is key. You can’t access data before the even are available. This is my understanding of the problem.

Respondent: nullbyte

Solution #4:

change name of method registration

@app.route('/registrazione', methods=['POST']) 
def registrazione(): 
    if request.method == 'POST':
       return render_template('registration.html', username=username)
   else :
       return render_template('registration.html')
Respondent: RADHE

The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .

Most Popular

To Top
India and Pakistan’s steroid-soaked rhetoric over Kashmir will come back to haunt them both clenbuterol australia bossier man pleads guilty for leadership role in anabolic steriod distribution conspiracy