1. 程式人生 > >flask restful

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/