RESTful:
配置:
在urls_apis_v1.py中:
#导包
from flask_restful import Api
#实例化Api
api = Api()
#写一个注册api的函数
def init_api(app):
api.init_app(app)
为了防止循环引用所以就不在__init__()中注册
在__init__.py中:
#导包
from myapp.urls_apis_v1 import init_api
def create_app(env_name):
。。。。。。
#注册
init_api(app)
return app
使用:
在api_v1.py中:
#导包
from flask_restful import Resource
class Addadd(Resource):
#请求方式相关的函数
def get(self):
return "ok"
在urls_apis_v1.py中:
from flask_restful import Api
#导包
from myapp.apis_v1 import *
api = Api()
def init_api(app):
api.init_app(app)
#给这个类创建一个路由
api.add_resource(Addadd, "/addadd")
使用get请求访问就可以访问到ok
输出字段样式:
在apis_v1.py中:
class NewOneApi(Resource):
#调用样式
@marshal_with(one_fields)
def get(self, *args, **kwargs):
id = int(request.args.get("id", 1))
news = News.query.get_or_404(id)
return news
@marshal_with(样式名)
在fields_api.py中:
from flask_restful import fields
#整个是个字典
one_fields = {
"id": fields.Integer,
#给title改名为name
"name": fields.String(attribute="title"),
#返回字符串,默认是lalala
"hehe": fields.String(default="lalala")
}
two_fields = {
"name": fields.String(default="tom"),
#返回一个列表,里面是字符串
"hobby": fields.List(fields.String)
}
three_fields = {
"code": fields.Integer(default=1),
"msg": fields.String(default="ok"),
#返回一个字典,里面包含one_fields的内容数据
"data": fields.Nested(one_fields)
}
four_fields = {
"code": fields.Integer(default=1),
"msg": fields.String(default="ok"),
#返回一个列表,里面是个字典,里面又包含one_fields的内容数据
"data": fields.List(fields.Nested(one_fields))
}
# "data":[
# {
# "name":"震惊6下课是不可能",
# "hehe":"lalala",
# "id":6
# },
# {
# "name":"震惊7下课是不可能",
# "hehe":"lalala",
# "id":7
# }
# ],
# "code":2,
# "msg":"OK"
# }
对原有fields的修改:
four_fields = three_fields #先赋值
four_fields["data"] = fields.List(fields.Nested(one_fields)) #再修改类型
four_fields.pop("msg") #把不需要字段 弹出去
four_fields["hehe"] = fields.String
four_field和three_fields实质是个字典,可以用字典的增删改查方法。
解析参数:
在apis_v1.py中:
class FiveApi(Resource):
def get(self):
#返回一个参数列表
my_args = my_params.parse_args()
#应该是个对象(关于参数)
print(type(my_params))
#返回一个参数列表
print(my_args)
return {"msg": "ok"}
在args_apis_v1.py中:
#导包
from flask_restful import reqparse
#实例化
my_params = reqparse.RequestParser()
#添加参数
my_params.add_argument("name", dest="my_name")
my_params.add_argument("id", type=int, required=True, help="必填")
my_params.add_argument("hobby", required=True, action="append")
约束:
type 指定类型
required 当指定成True的是 说明此参数是必填项
location 参数解析的位置 值有form ages cookies headers files等等
help 当解析出错的时候的提示文字
choices 参数值的约束
action=“append” 可以解析获得参数名对应多个值
dest=“my_name” 给参数起别名
解析器继承:
#复制
three_args = my_params.copy()
#替换
three_args.replace_argument("id",required=True, help="新的")
#移除
three_args.remove_argument("hobby")
#添加
three_args.add_argument("age", required=True, type=int)