zoukankan      html  css  js  c++  java
  • python flask demo

    from flask import Flask, jsonify
    from flask import abort
    from flask import make_response
    from flask import request
    from flask_httpauth import HTTPBasicAuth
    from flask import url_for
    auth = HTTPBasicAuth()
    app = Flask(__name__)
    
    
    
    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
    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('/')
    def index():
        return "Hello, World!"
    
    @app.route('/todo/api/v1.0/tasks', methods=['GET'])
    def get_tasks():
        return jsonify({'tasks': tasks})
    
    
    @app.route('/todo/api/v1.0/tasks/<int:task_id>', methods=['GET'])
    def get_task(task_id):
        task = list(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:
            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': tasks}), 201
    
    @app.route('/todo/api/v1.0/tasks/<int:task_id>', methods=['PUT'])
    def update_task(task_id):
        task = list(filter(lambda t: t['id'] == task_id, tasks))
        if len(task) == 0:
            abort(404)
        if not request.json:
            abort(400)
        print(type(request.json['title']))
        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 = list(filter(lambda t: t['id'] == task_id, tasks))
        if len(task) == 0:
            abort(404)
        tasks.remove(task[0])
        return jsonify({'result': True})
    
    @app.errorhandler(404)
    def not_found(error):
        return make_response(jsonify({'error': 'Not found'}), 404)
    
    @auth.get_password
    def get_password(username):
        if username == 'ok':
            return 'python'
        return None
    @auth.error_handler
    def unauthorized():
        return make_response(jsonify({'error': 'Unauthorized access'}), 403)
    @auth.error_handler
    def unauthorized():
        return make_response(jsonify({'error': 'Unauthorized access'}), 401)
    if __name__ == '__main__':
        app.run(debug=True)

  • 相关阅读:
    揭示同步块索引(下):总结
    关于.NET技术体系的思维导图
    嵌入式Linux中摄像头使用简要整理
    Tslib和Qt 4.8.4与在开发板上的移植
    图像处理经典图片Lena背后的故事
    Linux 下编译安装OpenCV
    Linux 下编译、安装、配置 QT
    Qt Creator的配置和开发初步测试
    OpenCV的第一个小程序:读取图像并显示
    转:智能手机Flash/DRAM选择、配置与价格大全
  • 原文地址:https://www.cnblogs.com/sea-stream/p/10333397.html
Copyright © 2011-2022 走看看