flask-restful学习
-
简介
Flask-RESTful是用于快速构建REST API的Flask扩展。
-
安装
pip install flask-restful
-
简单使用
通过endpoint参数为路由起名
api.add_resource(HelloResource, "/", endpoint='HelloWorld')
使用步骤:
- 导入Resource, Api
- 创建api对象,并关联app
- 定义视图类
- 使用api对象绑定路由和视图
from flask import Flask # 1.导入Resource, Api from flask_restful import Resource, Api app = Flask(__name__) # 2.创建api对象,并关联api api = Api(app) # 3.定义视图 class HelloResource(Resource): def get(self): return { "get":"get请求"} def post(self): return { "post":"post请求"} # 4.使用api对象绑定路由和视图 api.add_resource(HelloResource, "/") # 此处启动对于1.0之后的Flask可有可无 if __name__ == '__main__': app.run()
小结:
用原生也可以写出restful风格的api
用flask-restful,可以更方便。 -
在蓝图中使用flask-restful扩展
使用步骤:
- 创建蓝图对象
- 创建api对象,并关联到蓝图对象
- 定义视图类
- 使用api对象绑定视图类和路由关系
- 把蓝图对象注册到app中
from flask import Flask, Blueprint from flask_restful import Api, Resource app = Flask(__name__) # 1.创建蓝图对象 user_bp = Blueprint('user', __name__) # 2.创建api对象,并关联到蓝图对象 user_api = Api(user_bp) # 3.定义视图类 class BluePrintRestful(Resource): def get(self): return { "get":"get请求"} def post(self): return { "post":"post请求"} # 4.使用api对象绑定视图类和路由关系 # 通过endpoint参数为路由起名 # user_api.add_resource(BluePrintRestful, '/', endpoint="BpRestful") user_api.add_resource(BluePrintRestful, '/') # 5.把蓝图对象注册到app中 app.register_blueprint(user_bp, url_prefix="/user") if __name__ == '__main__': app.run()
-
视图类使用装饰器的方式
在视图类中,有两种方式:
- 以列表的方式,赋值给method_decorators类属性。对所有请求方法有效
method_decorators = [decorator1, decorator2] - 以字典的方式,赋值给method_decorators。分别对请求方法生效
method_decorators = {
‘get’: [decorator1, decorator2],
‘post’: [decorator1]
} - 注意:
装饰器的执行顺序是从右往左。
from flask import Flask # 1.导入Resource, Api from flask_restful import Resource, Api # 定义装饰器1 def decorator1(func): def wrapper(*args, **kwargs): print("装饰器1") return func(*args, **kwargs) return wrapper # 定义装饰器2 def decorator2(func): def wrapper(*args, **kwargs): print("装饰器2") return func(*args, **kwargs) return wrapper app = Flask(__name__) # 2.创建api对象,并关联api api = Api(app) # 3.定义视图类 class Index(Resource): # 1.以列表的方式,为类视图中的所有方法添加装饰器 # method_decorators = [decorator1, decorator2] # 2.以字典的方式,为类视图中不同的方法添加不同的装饰器 method_decorators = { "get":[decorator1, decorator2], "post":[decorator1] } def get(self): return { "get":"get请求"} def post(self): return { "post":"post请求"} # 4.使用api对象绑定路由和视图 api.add_resource(Index, "/") # 此处启动对于1.0之后的Flask可有可无 if __name__ == '__main__': app.run()
执行结果:
- 以列表的方式,赋值给method_decorators类属性。对所有请求方法有效