Flask-RESTful

基本使用

# pip 安装
pip install flask-restful

# 源码安装
# git clone https://github.com/flask-restful/flask-restful.git
# python setup.py develop

创建Resource实现类

class HelloRESTful(Resource):
    def get(self):
        return {'data':'Hello GET'}
    def post(self):
        return {'data':'Hello POST'}

创建API对象,并注册路由

# 方式一:创建并初始化
api = API(app)
# 方式二:创建,之后初始化
api = API()
api.init_app(app)

# 注册路由
api.add_resource(HelloRESTful, '/')

字段格式化

fields进行定义
marshal_with进行使用
	特性
    	显示我们设计的数据结构
    	默认返回的数据如果在预定义结构中不存在,数据会被自动过滤
    	如果返回的数据在预定义的结构中存在,数据会正常返回
    	如果返回的数据比预定义结构中的字段少,预定义的字段会呈现一个默认值

	定义字段输出
    	使用字典进行定义
    	常用都是基本类型:String,Integer

    	# 格式化字段
    	user_fields = {
            'msg': fields.String,
            'status': fields.Integer,
            'data': fields.String(attribute='private_data'),
            'default_data': fields.String(default='1')
        }

	定义好的格式通过装饰器进行使用
    	@marshal_with(需要返回的数据格式), return 返回字典就ok了

    	class Users(Resource):
            @marshal_with(user_fields)
            def get(self):
                return {'msg':'呵呵', 'data':'没有数据', 'age':'22', 'private_data':'表中数据'}

	级联数据:嵌套字典
    	Nested

        	# 格式化字段
        	usermodel_fileds = {
                'id':fields.Integer,
                'name':fields.String,
            }
        	user2_fields = {
                'msg':fields.String(default='ok'),
                'status':fields.Integer(default=1),
                'data':fields.Nested(usermodel_fields)
            }

	结构允许嵌套列表
    	fields.List(fields.Nested)

        	# 格式化字段
        	usermodel_fields = {
                'id':fields.Integer,
                'name':fields.String,
            }
        	users3_fields = {
                'status': fields.String(default=1),
                'msg': fields.String,
                'data': fields.List(fields.Nested(usermodel_fields))
            }
	

URL

连接字段
	就是将当前数据的操作api暴露出来
	根据提供的url和唯一标识进行数据操作

# 格式化字段
usermodel_fileds = {
    'id': fields.Integer,
    'name': fields.String,
    'url': fields.Url('id', absolute=True)
}

# 在add_resource中提供对应的endpoint
api.add_resource(User4, '/user4/', endpoint='id')

参数解析

可以不通过request.form或request.args获取参数,而是通过request.RequestParser来解析

# 参数转换器
parser = reqparse.RequestParser()
parser.add_argument('name', type=str, action='append') # 支持多个name
parser.add_argument('id', type=int, required=True, help='id是必需的') # 必需参数
parser.add_argument('fldt_active', type=str, location='cookies') # 获取cookies中的数据

class User5Resource(Resource):
    def get(self):
        # 获取参数
        args = parser.parse_args()
        name = args.get('name')
        id = parse.get('id')
        fldt_active = parse.get('fldt_active')
        return {'name': name, 'id':id, 'fldt_active':fldt_active}
posted @   Bruce_JRZ  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示