Created
October 31, 2013 20:46
-
-
Save thejat/7256857 to your computer and use it in GitHub Desktop.
RESTful API on Flask: Followed a tutorial on miguelgrinberg.com
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/Users/theja/Downloads/local/anaconda/anaconda/bin/python | |
| # from flask import Flask | |
| # app = Flask(__name__) | |
| # @app.route('/') | |
| # def index(): | |
| # return "Hello, World!" | |
| # if __name__ == '__main__': | |
| # app.run(debug = True) | |
| from flask import Flask, jsonify, abort, make_response, request,url_for | |
| app = Flask(__name__) | |
| tasks = [ | |
| { | |
| 'id': 1, | |
| 'title': u'Buy groceries', | |
| 'description': u'Milk, Cheese, Pizza, Fruit, Tylenol', | |
| 'done': False | |
| }, | |
| { | |
| 'id': 2, | |
| 'title': u'Learn Python', | |
| 'description': u'Need to find a good Python tutorial on the web', | |
| 'done': False | |
| } | |
| ] | |
| @app.route('/todo/api/v1.0/tasks', methods = ['GET']) | |
| def get_tasks(): | |
| return jsonify( { 'tasks': map(make_public_task, tasks) } ) | |
| @app.route('/todo/api/v1.0/tasks/<int:task_id>', methods = ['GET']) | |
| def get_task(task_id): | |
| task = filter(lambda t: t['id'] == task_id, tasks) | |
| if len(task) == 0: | |
| abort(404) | |
| return jsonify( { 'task': task[0] } ) | |
| @app.errorhandler(404) | |
| def not_found(error): | |
| return make_response(jsonify( { 'error': 'Not found' } ), 404) | |
| @app.route('/todo/api/v1.0/tasks', methods = ['POST']) | |
| def create_task(): | |
| if not request.json or not 'title' in request.json: | |
| abort(400) | |
| task = { | |
| 'id': tasks[-1]['id'] + 1, | |
| 'title': request.json['title'], | |
| 'description': request.json.get('description', ""), | |
| 'done': False | |
| } | |
| tasks.append(task) | |
| return jsonify( { 'task': task } ), 201 | |
| @app.route('/todo/api/v1.0/tasks/<int:task_id>', methods = ['PUT']) | |
| def update_task(task_id): | |
| task = filter(lambda t: t['id'] == task_id, tasks) | |
| if len(task) == 0: | |
| abort(404) | |
| if not request.json: | |
| abort(400) | |
| if 'title' in request.json and type(request.json['title']) != unicode: | |
| abort(400) | |
| if 'description' in request.json and type(request.json['description']) is not unicode: | |
| abort(400) | |
| if 'done' in request.json and type(request.json['done']) is not bool: | |
| abort(400) | |
| task[0]['title'] = request.json.get('title', task[0]['title']) | |
| task[0]['description'] = request.json.get('description', task[0]['description']) | |
| task[0]['done'] = request.json.get('done', task[0]['done']) | |
| return jsonify( { 'task': task[0] } ) | |
| @app.route('/todo/api/v1.0/tasks/<int:task_id>', methods = ['DELETE']) | |
| def delete_task(task_id): | |
| task = filter(lambda t: t['id'] == task_id, tasks) | |
| if len(task) == 0: | |
| abort(404) | |
| tasks.remove(task[0]) | |
| return jsonify( { 'result': True } ) | |
| def make_public_task(task): | |
| new_task = {} | |
| for field in task: | |
| if field == 'id': | |
| new_task['uri'] = url_for('get_task', task_id = task['id'], _external = True) | |
| else: | |
| new_task[field] = task[field] | |
| return new_task | |
| if __name__ == '__main__': | |
| app.run(debug = True) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment