使用flask 构建基本的 restful api

来源:互联网 发布:闺蜜 网络语 编辑:程序博客网 时间:2024/05/01 10:57

基本的restful api

#!flask/bin/pythonfrom flask import Flask, jsonify,abort,make_responsefrom flask import request,url_forfrom flask.ext.httpauth import HTTPBasicAuthauth = HTTPBasicAuth()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    }]@auth.get_passworddef get_password(username):    if username == 'shenzhan':        return 'pythonxx'    return None@auth.error_handlerdef unauthorized():    return make_response(jsonify({'error': 'Unauthorized access'}), 403)@app.errorhandler(404)def not_found(error):    return make_response(jsonify({'error':'Not found'}),404)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@app.route('/todo/api/v1.0/tasks',methods=['GET'])@auth.login_requireddef 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.route('/todo/api/v1.0/tasks',methods = ['POST'])def create_task():    if not request.json or not 'title' in request.json :        print('create fail',request.json)        abort(404)    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('/')def index():    return "wellcome to super world"if __name__ == '__main__':    app.run(debug=True)
0 0
原创粉丝点击