flask restful
restful的思想:站在资源的角度 观察整个网络
对资源的操作映射成HTTP的各种请求方法
比如:查询 对应get
更新对应 put/patch
创建对应post
删除对应delete
如何操作:
首先要有参数解析 from flask_restful import reqparse
处理逻辑 是一个继承自Resource类 里面写各种HTTP请求方式名对应的函数
输出字段 from flask_restful import fields
eg:
one_fields = {
"id": fields.Integer,
# "name": fields.String
"ch_name": fields.String(attribute="name")
}
one_parse = reqparse.RequestParser()
one_parse.add_argument("name", required=True, help="name 字段是必填", location="form")
one_parse.add_argument("age", type=int, required=True, help="age is needed", location="form")
class HumenNewAPI(Resource):
@marshal_with(one_fields)
def post(self):
# 创建数据
# 解析参数
args = one_parse.parse_args()
humen = Humen(
name=args.get("name"),
age=args.get("age")
)
return humen
@marshal_with(one_fields)
def put(self):
# 更新数据
# 解析参数
args = dict(two_parse.parse_args())
id = args.get("id")
# 找要查的数据
humen = Humen.query.get_or_404(id)
# get("age", humen.age)
print(args)
print(type(args))
humen.age = args.get("age") if args.get("age") else humen.age
humen.name = args.get("name") if args.get("name") else humen.name
db.session.add(humen)
db.session.commit()
return humen
def delete(self):
# 解析参数
args = three.parse_args()
# 找到数据
humen = Humen.query.get_or_404(args.get("id"))
# 删除数据
db.session.delete(humen)
db.session.commit()
return {"code": 1}
参数解析:
from flask_restful import reqparse
实例化
one_parse = reqparse.RequestParser()
添加对应的参数 和参数对应的配置required是要求必填 location是说明参数从哪里解析 help当参数解失败给出的提示 type 指定参数的类型
one_parse.add_argument("name", required=True, help="name 字段是必填", location="form")
one_parse.add_argument("age", type=int, required=True, help="age is needed", location="form")
copy函数可以复制已有的reqparse
two_parse = one_parse.copy()
two_parse.add_argument("id", type=int, required=True)
替换原来的参数
two_parse.replace_argument("name", location="form")
two_parse.replace_argument("age", type=int, location="form")
three = two_parse.copy()
删除原来的参数
three.replace_argument("name")
three.remove_argument("age")
APIView
renderer_classes 渲染的
parser_classes 解析参数的
authentication_classes认证的
throttle_classes 节流的
permission_classes 权限的
content_negotiation_class 内容的
metadata_class 元信息的
versioning_class 版本的
initial: 要做认证 要做权限校验 要做节流判断
as_view 复写了django里的View 做了csrf_exempt豁免
initialize_request 返回了一个APIView包装过的Request的对象
https://q1mi.github.io/Django-REST-framework-documentation/tutorial/2-requests-and-responses_zh/