Flask 之 RESTful Api


1.Flask-RESTful 概述; javascript


1.1 Flask-RESTful 提供的最主要的基礎就是資源(resources)。資源(Resources)是構建在 Flask 可拔插視圖 之上,只要在你的資源(resource)上定義方法就可以容易地訪問多個 HTTP 方法。一個待辦事項應用程序的基本的 CRUD 資源看起來像這樣:提供的最主要的基礎就是資源(resources)。資源(Resources)是構建在 Flask 可拔插視圖 之上,只要在你的資源(resource)上定義方法就可以容易地訪問多個 HTTP 方法。一個待辦事項應用程序的基本的 CRUD 資源看起來像這樣:html


1.2 思惟導圖;
java

image.png


2.實例代碼;python

from flask import Flask, request
from flask_restful import reqparse, abort, Api, Resource

app = Flask(__name__)
api = Api(app)

opsList = {
    'ops01': {'task': '我是第一系統運維'},
    'ops02': {'task': '我是第二個應用運維'},
    'ops03': {'task': '我是第三個運維開發'}
}


def abort_if_todo_doesnt_exist(ops_id):
    if ops_id not in opsList:
        abort(404, message="OPS {} doesn't exist".format(ops_id))


parser = reqparse.RequestParser()
parser.add_argument('task', type=str)


class Todo(Resource):
    def get(self, ops_id):
        abort_if_todo_doesnt_exist(ops_id)
        return opsList[ops_id]

    def delete(self, ops_id):
        abort_if_todo_doesnt_exist(ops_id)
        del opsList[ops_id]
        return '', 204

    def put(self, ops_id):
        args = parser.parse_args()
        task = {'task': args['task']}
        opsList[ops_id] = task
        return task, 201


class TodoList(Resource):
    def get(self):
        return opsList

    def post(self):
        args = parser.parse_args()
        todo_id = int(max(opsList.keys()).lstrip('todo')) + 1
        todo_id = 'todo%i' % todo_id
        opsList[todo_id] = {'task': args['task']}
        return opsList[todo_id], 201


api.add_resource(TodoList, '/opslist')
api.add_resource(Todo, '/opslist/<todo_id>')

if __name__ == '__main__':
    app.run(
        debug=True)



(1)引入須要的庫名、函數、變量等,並作簡單的Application初始化:json

from flask import Flaskfrom flask_restful import reqparse, abort, Api, Resource
app = Flask(__name__)
api = Api(app)

(2)定義咱們須要操做的資源類型(都是json格式的):flask

TODOS = {
    'todo1': {'task': '我是第一個測試'},
    'todo2': {'task': '我是第二個測試'},
    'todo3': {'task': '我是第三個測試'},
}

(3)Flask-RESTful提供了一個用於參數解析的RequestParser類,相似於Python中自帶的argparse類,能夠很方便的解析請求中的-d參數,並進行類型轉換。api

parser = reqparse.RequestParser()  
parser.add_argument('task')

(4)咱們觀察標準的API接口,這裏的接口能夠分爲兩類:帶有item_id的,和不帶有item_id的。前者是操做單一資源,後者是操做資源列表或新建一個資源。ruby

從操做單一資源開始,繼承Resource類,並添加put / get / delete方法:bash

class Todo(Resource):
    def get(self, ops_id):
        abort_if_todo_doesnt_exist(ops_id)
        return opsList[ops_id]

    def delete(self, ops_id):
        abort_if_todo_doesnt_exist(ops_id)
        del opsList[ops_id]
        return '', 204

    def put(self, ops_id):
        args = parser.parse_args()
        task = {'task': args['task']}
        opsList[ops_id] = task
        return task, 201

(5)繼續操做資源列表,繼承Resource類,並添加get / post方法:restful

class TodoList(Resource):
    def get(self):
        return opsList

    def post(self):
        args = parser.parse_args()
        todo_id = int(max(opsList.keys()).lstrip('todo')) + 1
        todo_id = 'todo%i' % todo_id
        opsList[todo_id] = {'task': args['task']}
        return opsList[todo_id], 201

(6)資源操做類定義完畢以後,須要設置路由,即告訴Python程序URL的對應關係。

api.add_resource(TodoList, '/opslist')
api.add_resource(Todo, '/opslist/<todo_id>')

這樣當咱們請求url時,就能根據url類型,找到相應的資源類,並調用對應方法。


3.Postman 進行測試 


(1).查詢有哪些支持的資源類型;

image.png



(2)支持類型的第一個功能接口;


image.png


(2)支持類型的第二個功能接口;

image.png


(2)支持類型的第三個功能接口;

image.png




參考連接:http://www.pythondoc.com/Flask-RESTful/quickstart.html  中文官網;

相關文章
相關標籤/搜索