Requests/Routing

GET should be idempotent and append things to a querystring POST is for data to be processed

Code
Contains

request.args

the key/value pairs in the URL query string

request.form

the key/value pairs in the body, from a HTML post form, or JavaScript request that isn't JSON encoded

request.values

combined args and form, preferring args if keys overlap

request.files

files in the body, which Flask keeps separate from form. HTML forms must use enctype=multipart/form-data or files will not be uploaded.

request.data

mimetype Flask does not handle as string

request.get_json()

Get JSON body from a post request

SIMPLE GET ROUTES

Default methods is just get

@app.route('/users/<userid>', methods = ['GET'])
def api_users(userid):
    users = {'1':'john', '2':'steve', '3':'bill'}

    if userid in users:
        return jsonify({userid:users[userid]})
    else:
        return not_found()

SIMPLE POST REQUESTS

Query String

request.args.get('uid')

Data sent

from flask import json

@app.route('/messages', methods = ['POST'])
def api_message():
	if not request.is_json:
  	return jsonify({"msg": "Missing JSON in request"}), 400
  
  token = request.json.get('token', None)

Combo

@app.route('/login', methods=['POST', 'GET'])
def login():
    error = None
    if request.method == 'POST':
        if valid_login(request.form['username'],
                       request.form['password']):
            return log_the_user_in(request.form['username'])
        else:
            error = 'Invalid username/password'
    # the code below is executed if the request method
    # was GET or the credentials were invalid
    return render_template('login.html', error=error)

Last updated