flask_restful接口開發入門

python版本:python3.8

首先我們來看一下最簡單的例子:當我們get訪問'/hello'的時候,返回success

app.py

from flask import Flask
app = Flask(__name__)
from flask_restful import Api,Resource

class HelloWorld(Resource):
    def get(self):
        return 'success'

api.add_resource(HelloWorld, '/hello')

if __name__ == '__main__':
    app.run(port=3000)

接下來是升級版本,我們嘗試改成post請求,並且接收一個參數‘user’,並且有簡單的表單驗證

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

class HelloWorld(Resource):
    def post(self):
        parser = reqparse.RequestParser()
        parser.add_argument('user',type=str,help="參數不合法")
        args = parser.parse_args()
        print(args)
        return 'success'

api.add_resource(HelloWorld, '/hello')

if __name__ == '__main__':
    app.run(port=3000)

接下來是如何規範接口的返回數據:我們定義一個GetDatas類,並且通過訪問'/getDatas'獲得數據

from flask import Flask
app = Flask(__name__)
from flask_restful import Api,Resource,reqparse,fields,marshal_with

class GetDatas(Resource):
    resource_fidlds = {
        'title':fields.String,
        'content':fields.String
    }
    @marshal_with(resource_fidlds)
    def get(self):
        return {'title':'我是標題','content':'我是內容'}

api.add_resource(GetDatas, '/getDatas')

if __name__ == '__main__':
    app.run(port=3000)

如果你看到上面的代碼一臉懵逼的話,下面舉個數據庫查詢返回數據的例子

假設我們有一個數據模型如下:這是一個文章的數據模型,簡單定義幾個必須字段

#文章表
class Artcle(db.Model):
    __tablename__ = 'artcle'
    id = db.Column(db.Integer,primary_key=True)
    title = db.Column(db.String(60))
    content = db.Column(db.Text)
    author = db.Column(db.String(10))
    create_time = db.Column(db.DateTime)

接下來,我們模擬查詢數據庫並返回json

from flask import Flask
app = Flask(__name__)
from flask_restful import Api,Resource,reqparse,fields,marshal_with

class GetDatas(Resource):
    resource_fidlds = {
        'title':fields.String,
        'content':fields.String
    }
    @marshal_with(resource_fidlds)
    def get(self):
        result = Artcle.query.all()
        return result

api.add_resource(GetDatas, '/getDatas')

if __name__ == '__main__':
    app.run(port=3000)

這時我們訪問'/getDatas'時,返回的是{ 'title':’xxx‘,'content':’xxx‘ },有過經驗的同學可能發現,省去了一個數據轉化json在返回的過程

本次不是完整Demo,所以不能直接複製粘貼+run,如果看不懂可以先看看基礎知識

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章