前言

最近接到一个接收前端请求的需求,需要使用python编写,之前没有写过python,很多技术没有用过,在这里做一个学习记录,如有错误,请不了赐教。

Flask Api文档管理

使用Falsk Api可以实现 文档是代码生成的,而不是靠人工维护,如果代码有任何改动,文档也能自动更新。这是一件非常优雅的事,但是对很多文档来说这并不现实,但是对于Api文档来说,实现成本并不高。

Falsk-RestPlus

对于Api来说,Flask-RestPlus是一个优秀的Api文档生成工具,这个包将会替换Flask路由层的编写方式,通过自己的语法来规定Api细节,并生成Api文档。

安装

pip install flask-restplus

这是一个demo

使用Flask-RestPlus时,需要按照这个库的方式编写Api层,包括request的参数解析,以及response的返回格式,一个hello world级的demo:

 1 from flask import Flask
 2 from flask_restplus import Resource,Api
 3 
 4 
 5 app = Flask(__name__)
 6 api = Api(app,prefix="/v1",title="Users",description="Users curd api.")
 7 
 8 @api.route("/users")
 9 class UserApi(Source):
10     def get(self):
11         return ("user":"1")
12    
13 if __name__=="__main__":
14     app.run()

效果图

关于一个flask的服务接口实战(flask-migrate,flask-script,SQLAlchemy)

实践

这里完成一个小小项目来实践和介绍Flask-RestPlus这个库,我们实现一个简单的图书馆订单系统,实现用户、图书和订单的CURD

Model

model可以理解为java中的实体类,大概就是用来描述一个实体的,里面定义了关于这个实体的一些信息。

这里的model和SQLAlchemy的model是不同的概念,这里是一种

用户model,包括id和username。而SQLAlchemy中的model则是用来描述数据库结构的。

  1 from flask import Flask, Blueprint
  2 from flask_restplus import Api, Resource, Namespace, fields
  3 import uuid
  4 import time
  5 
  6 
  7 
  8 class User(object):
  9     user_id = None
 10     username = None
 11 
 12     def __init__(self, username):
 13         self.user_id = str(uuid.uuid4())
 14         self.username = username
 15 
 16 
 17 class Book(object):
 18     book_id = None
 19     book_name = None
 20     price = None
 21 
 22     def __init__(self, book_name, book_price):
 23         self.book_id = str(uuid.uuid4())
 24         self.book_name = book_name
 25         self.price = book_price
 26 
 27 
 28 class Order(object):
 29     order_id = None
 30     user_id = None
 31     book_id = None
 32     created_at = None
 33 
 34     def __init__(self, user_id, book_id):
 35         self.order_id = str(uuid.uuid4())
 36         self.user_id = user_id
 37         self.book_id = book_id
 38         self.created_at = int(time.time())
 39 
 40 # 蓝图实例
 41 api_blueprint = Blueprint("api", __name__,url_prefix="/pages")
 42 #api实例
 43 api = Api(api_blueprint, version="1.0", description="THe Open Api Service")
 44 # namespace实例
 45 ns = Namespace("users", description="Users CURD api")
 46 
 47 ns2 = Namespace("Order",description="Order CURD api")
 48 # 将api实例添加到名字名字空间中
 49 api.add_namespace(ns)
 50 api.add_namespace(ns2)
 51 
 52 app = Flask(__name__)
 53 
 54 # 一定是最后app再向蓝图注册,不然会404
 55 app.register_blueprint(api_blueprint)
 56 
 57 # 定义model
 58 user_model = ns.model("UserModel", {
 59     "user_id": fields.String(readOnly=True, description="The user unique identifier"),
 60     "username": fields.String(required=True, description="The user nickname")
 61 })
 62 user_list_model = ns.model("UserListModel", {
 63     "users": fields.List(fields.Nested(user_model)),
 64     "total": fields.Integer
 65 })
 66 
 67 order_model = ns2.model("OrderModel", {
 68     "order_id": fields.String(readOnly=True,description="The oder unique identifier")
 69 })
 70 
 71 order_list_model = ns2.model("OrderListModel",{
 72     "order": fields.List(fields.Nested(order_model)),
 73     "total": fields.Integer
 74 })
 75 
 76 
 77 @ns.route("/")
 78 class UserListApi(Resource):
 79     users = [User("HanMeiMei"), User("LiLei")]
 80 
 81     @ns.doc("get_user_list")
 82     @ns.marshal_with(user_list_model)
 83     def get(self):
 84         return{
 85             "users": self.users
 86         }
 87 
 88 @ns2.route("/")
 89 class OrderApi(Resource):
 90 
 91     orders = [Order(1111,22222),Order(33333,4444)]
 92 
 93     @ns2.doc("get_order_list")
 94     @ns2.marshal_with(order_list_model)
 95     def get(self):
 96         return{
 97             "order":self.orders
 98         }
 99 
100 if __name__ == "__main__":
101     app.run(debug=True)
View Code

相关文章:

  • 2021-12-25
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-17
  • 2022-12-23
  • 2021-09-19
  • 2021-12-07
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-03-07
  • 2022-12-23
  • 2022-12-23
  • 2021-06-30
  • 2021-06-24
相关资源
相似解决方案