flask restful
阿新 • • 發佈:2018-11-30
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/