Method Not Allowed flask error 405

405 method not allowed laravel
405 method not allowed post
method not allowed flask post
http status 405 – method not allowed tomcat
405 method not allowed angular
405 method not allowed web api
405 method not allowed put
failed to load resource: the server responded with a status of 405 (method not allowed)

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?

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.

Method Not Allowed flask error 405, code in your case would be 401 Unauthorized . It indicates the client that the method exists and that they need to login to access it. The message “405 Method Not Allowed” indicates that the client is using an unauthorized HTTP method. Here's how to fix the error code.

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".

Should I return a 401 or a 405 response code to a REST API user , is an HTTP status code for "method not allowed" and is generated when a request of a resource is made by a request method not supported by that resource. The 405 Method Not Allowed is an HTTP response status code indicating that the specified request HTTP method was received and recognized by the server, but the server has rejected that particular method for the requested resource.

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.

What is 405?, 405 Method Not Allowed is a common error that beginners get while using Flask. In this Duration: 3:54 Posted: Apr 10, 2016 I am trying to post but I'm getting ERROR 405 method not allowed. My server is running pretty good. Are there some more details needed to be added in python? This is my python code using flask. f

Avoiding the "405 Method Not Allowed" Error in Flask, <form action="" method="post"> <label>Gender {{ form.gender }} it redirects to 405 Method not Allowed although I have in this:. 405 Method not allowed in flask So I am creating a login portal for file upload including the session handling for each session creating a folder for the user and storing the uploaded file in that folder.

405 Method not Alllowed in Flask : Forums : PythonAnywhere, html page, I get a 405 error "Method not allowed". Help please? EDIT: better format for this post. EDIT2: even better format. EDIT3: When I go to the /welcome.​html  405 Method not allowed is coming from the server and it is related to GET/POST/etc. Make sure the "action" value is set correctly. It should be "/log". If there are ".pyc" files for your .py files, delete them, restart the server and try again.

[Ask Flask] Help on finding why I get the 405 error. : flask, Flask - POST Error 405 Method Not Allowed. I'm just starting to learn Flask, and I am trying to create a form which will allow a POST method. Here's my method: The / route doesn't accept POST, by default only GET, HEAD and OPTIONS are allowed. Adjust your form accordingly: <form action="/data" autocomplete="on" method="POST"> Take into account that Flask does not reload your source unless you enable debugging:

  • methods=['POST'] is quite incompatible with if request.method == 'POST': (...) else:
  • so. you receive a method no allowed error, and you are doing a GET request on a route that was declared to accept only POST. do you understand why now?
  • yes and I add @app.route('/registrazione', methods=['GET', 'POST']) but now I receive error 500 Internal Server Error
  • probably because {{ username }} is not defined, but you have the logs, so you should know.
  • I think the username. data is wrong. Just using username = request.form.username should work.
  • Thanks, now work. But if I edit def registration(): if request.method == 'POST': username= return render_template('registration.html', username=username) else : return render_template('registration.html') I receive Internal Server Error
  • @Matteo that's a different problem, please create a new question and include the stack trace.
  • Why do you try to answer something that's already been solved clearly a few years ago. I'm afraid your "understanding" is wrong.
  • Because I had the same problem or at least it seems similar to me, because I got the same error message and for me the provided solutions doesn't worked. But if I render the template with the form in my project first and then try to access the form data with a new function and post method everything worked fine. So I thought I can't post to something that doesn't exists. Why shouldn't I post my solution If the other's doesn't wirkt for me?