python flask_restful接口开发入门

python基础

浏览数:236

2020-6-17

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,如果看不懂可以先看看基础知识

作者:马明瑞