Reputation: 716
I am learning RESTFUL APIs and I am stuck at a problem which only issues request for GET but fails for POST request. The code goes here:
from flask import Flask, request
app = Flask(__name__)
#Make an app.route() decorator here
@app.route("/puppies", methods = ['GET', 'POST'])
def puppiesFunction():
if request.method == 'GET':
#Call the method to Get all of the puppies
return getAllPuppies()
elif request.method == 'POST':
#Call the method to make a new puppy
return makeANewPuppy()
def getAllPuppies():
return "Getting All the puppies!"
def makeANewPuppy():
return "Creating A New Puppy!"
if __name__ == '__main__':
app.debug = True
app.run(host='0.0.0.0', port=5000)
The GET request works fine but error coming up in POST request. The error is:
127.0.0.1 - - [20/May/2016 01:39:34] "POST /puppies/ HTTP/1.1" 404 -
Thanks in advance
Upvotes: 1
Views: 10673
Reputation: 2403
Your code is working fine, not sure what the problem is. i copy pasted your code as follows:
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route("/puppies", methods = ['GET', 'POST'])
def puppiesFunction():
if request.method == 'GET':
#Call the method to Get all of the puppies
return getAllPuppies()
elif request.method == 'POST':
#Call the method to make a new puppy
return makeANewPuppy()
def getAllPuppies():
return "Getting All the puppies!"
def makeANewPuppy():
return "Creating A New Puppy!"
if __name__ == '__main__':
app.run(debug=True)
and the post requests is working as expected. here is what I did using fiddler:
Upvotes: 2
Reputation: 36043
Your POST request has an extra slash at the end of the URL. Here are the curl commands:
$ curl -X POST 0.0.0.0:5000/puppies
Creating A New Puppy
$ curl -X POST 0.0.0.0:5000/puppies/
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>404 Not Found</title>
<h1>Not Found</h1>
<p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>
And here are the Flask logs:
127.0.0.1 - - [20/May/2016 11:17:12] "POST /puppies HTTP/1.1" 200 -
127.0.0.1 - - [20/May/2016 11:17:20] "POST /puppies/ HTTP/1.1" 404 -
And indeed in your question you used /puppies/
.
Upvotes: 6