Flask example with POST Flask example with POST python python

Flask example with POST


Before actually answering your question:

Parameters in a URL (e.g. key=listOfUsers/user1) are GET parameters and you shouldn't be using them for POST requests. A quick explanation of the difference between GET and POST can be found here.

In your case, to make use of REST principles, you should probably have:

http://ip:5000/usershttp://ip:5000/users/<user_id>

Then, on each URL, you can define the behaviour of different HTTP methods (GET, POST, PUT, DELETE). For example, on /users/<user_id>, you want the following:

GET /users/<user_id> - return the information for <user_id>POST /users/<user_id> - modify/update the information for <user_id> by providing the dataPUT - I will omit this for now as it is similar enough to `POST` at this level of depthDELETE /users/<user_id> - delete user with ID <user_id> 

So, in your example, you want do a POST to /users/user_1 with the POST data being "John". Then the XPath expression or whatever other way you want to access your data should be hidden from the user and not tightly couple to the URL. This way, if you decide to change the way you store and access data, instead of all your URL's changing, you will simply have to change the code on the server-side.

Now, the answer to your question:Below is a basic semi-pseudocode of how you can achieve what I mentioned above:

from flask import Flaskfrom flask import requestapp = Flask(__name__)@app.route('/users/<user_id>', methods = ['GET', 'POST', 'DELETE'])def user(user_id):    if request.method == 'GET':        """return the information for <user_id>"""        .        .        .    if request.method == 'POST':        """modify/update the information for <user_id>"""        # you can use <user_id>, which is a str but could        # changed to be int or whatever you want, along        # with your lxml knowledge to make the required        # changes        data = request.form # a multidict containing POST data        .        .        .    if request.method == 'DELETE':        """delete user with ID <user_id>"""        .        .        .    else:        # POST Error 405 Method Not Allowed        .        .        .

There are a lot of other things to consider like the POST request content-type but I think what I've said so far should be a reasonable starting point. I know I haven't directly answered the exact question you were asking but I hope this helps you. I will make some edits/additions later as well.

Thanks and I hope this is helpful. Please do let me know if I have gotten something wrong.


Here is the example in which you can easily find the way to use Post,GET method and use the same way to add other curd operations as well..

#libraries to includeimport osfrom flask import request, jsonifyfrom app import app, mongoimport loggerROOT_PATH = os.environ.get('ROOT_PATH')<br>@app.route('/get/questions/', methods=['GET', 'POST','DELETE', 'PATCH'])    def question():    # request.args is to get urls arguments     if request.method == 'GET':        start = request.args.get('start', default=0, type=int)        limit_url = request.args.get('limit', default=20, type=int)        questions = mongo.db.questions.find().limit(limit_url).skip(start);        data = [doc for doc in questions]        return jsonify(isError= False,                    message= "Success",                    statusCode= 200,                    data= data), 200# request.form to get form parameter    if request.method == 'POST':        average_time = request.form.get('average_time')        choices = request.form.get('choices')        created_by = request.form.get('created_by')        difficulty_level = request.form.get('difficulty_level')        question = request.form.get('question')        topics = request.form.get('topics')    ##Do something like insert in DB or Render somewhere etc. it's up to you....... :)