flask restful

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/

猜你喜欢

转载自blog.csdn.net/m0_37906230/article/details/84643291