Flask-Restful 插件

Flask 学习笔记

一、Flask-Restful 插件


1.1、介绍

        Flask-Restful 是一个专门用来写 restful api 的一个插件。使用他可以快速的集成 restful api 功能。在 app 的后台以及纯 api 的后台中,这个插件可以帮助我们节省很多时间。当然,如果在普通的网站中,这个插件就显得有些鸡肋了,因为在普通的网页开发中,是需要去渲染 html 代码的,而 Flask-Restful 在每个请求中都是返回 json 格式的数据。


1.2、安装

        Flask-Restful 需要在 Flask 0.8 以上的版本,在 Python2.6 或者 Python3.3 上运行。

	pip install flask-restful

1.3、参数解析

        Flask-Restful 插件提供了类似 WTForms 来验证提交的数据是否合法的包,叫做 reqparse。可使用 add_argument 可以指定字段的名字、数据类型等。

  • default:默认值,如果这个参数没有值,那么将使用这个参数指定的值。

  • required:是否必须。默认为 False,如果设置为 True,那么这个参数就必须提交上来。

  • type:这个参数的数据类型,如果指定,那么将使用指定的数据类型来强制转换提交上来的值。

  • choices:选项。提交上来的值只有满足这个选项中的值才符合验证通过,否则验证不通过。

  • help:错误信息。如果验证失败后,将会使用这个参数指定的值作为错误信息显示。

  • trim:是否要去掉前后的空格。

	from flask_restful import Api, Resource, reqparse, inputs
	
	
	class IndexView(Resource):
	    def post(self):
	        parse = reqparse.RequestParser()
	
	        parse.add_argument('username', type=str, help='用户名验证错误', required=True, trim=True)
	        parse.add_argument('password', type=str, help='密码错误')
	        parse.add_argument('age', type=int, help='年龄错误', default=18)
	        parse.add_argument('gender', type=str, help='性别错误', choices=['男', '女', '保密'])
	        parse.add_argument('homepage', type=inputs.url, help='URL地址错误')
	        parse.add_argument('telphone', type=inputs.regex(r'1[3|5|8]\d{9}'), help='手机号码错误')
	
	        args = parse.parse_args()
	        # print(args)
	
	        # return {"info": "登录成功"}
	        return args

1.4、输出字段

        对于一个视图函数,你可以指定好一些字段用于返回。以后可以使用 ORM 模型或者自定义的模型的时候,他会自动的获取模型中的相应的字段,生成 json 数据,然后再返回给客户端。这其中需要导入 flask_restful.marshal_with 装饰器。并且需要写一个字典,来指示需要返回的字段,以及该字段的数据类型。

	from flask_restful import Api, Resource, reqparse, inputs, fields, marshal_with
	
	
	class ArticleView(Resource):
	    resource_fields = {
	        'username': fields.String,
	        'password': fields.String
	    }
	
	    @marshal_with(resource_fields)
	    def get(self):
	        return {'username': 'li666'}

get 方法中,为 username 并返回的时候,flask_restful 会自动的读取指定的字段(其值为 null )与其组成一个 json 格式的字符串返回给客户端。


1.5、字段重命名

        很多时候你面向公众的字段名称是不同于内部的属性名。使用 attribute 可以配置这种映射。比如上面的例子想要返回 username 中的值,但是在返回给客户端的时候,想以 user 显示,那么可以这样写:

    resource_fields = {
    	# 原字段名为 username , 重命名为 user
        'user': fields.String(attribute='username')
    }

1.6、字段默认值

        在返回一些字段的时候,有时候可能没有值,那么这时候可以在指定 fields 的时候,使用 default 给定一个默认值:

    resource_fields = {
        'password': fields.String(default='admin')
    }

1.7、输出复杂结构数据

        有时候想要在返回的数据格式中,形成比较复杂的结构。那么可以使用一些特殊的字段来实现。比如要在一个字段中放置一个列表,那么可以使用 fields.List,比如在一个字段下面又是一个字典,那么可以使用 fields.Nested

	from flask import Flask
	from flask_restful import Api, Resource, reqparse, inputs, fields, marshal_with
	
	app = Flask(__name__)
	# 用 Api 来绑定 app
	api = Api(app)
	
	
	class ProfileView(Resource):
	    resource_fields = {
	        'username': fields.String,
	        'age': fields.Integer,
	        'school': fields.String,
	        'tags': fields.List(fields.String),
	        'more': fields.Nested({
	            'signature': fields.String,
	            'email': fields.String
	        }),
	        'class': fields.List(
	            fields.Nested({
	                'teacher': fields.String,
	                'student': fields.String
	            })
	        ),
	    }
	
	    @marshal_with(resource_fields)
	    def get(self):
	        return {
	            'username': 'laohuang', 
	            'tags': [1, 2, 3], 
	            'class': {'username': 'laohuang', 'tags': [1, 2, 3]}
	        }
	
	
	api.add_resource(ProfileView, '/profile/', endpoint='profile')
	
	
	if __name__ == '__main__':
	    app.run(debug=True)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值