引言 本文将使用Flask的第3方库(flask-restful)创建基于restful风格的Flask应用。 学习内容:

  1. 【安装】flask-restful
  2. 【最小(简)构造】flask-restful的示例
  3. 【代码Diff】非restful与restful
  4. 【整合】蓝图+flask-restful+tornado

1.Flask-Restful基础

1.安装flask-restful

  1. pipenv install flask-restful

2.【最简】flask-restful的结构

1.构造步骤

3.Flask-Restful - 图1

2.代码实现

  1. #!/usr/bin/env pytho
  2. # -*- coding: utf-8 -*-
  3. """
  4. @author:cooling
  5. @file:rest01.py
  6. @time:2022/04/19
  7. """
  8. from flask_restful import Resource, Api # 【step1】导入flask_restful相关包
  9. from flask import Flask,request
  10. from flask_cors import CORS
  11. app = Flask(__name__)
  12. CORS(app)
  13. # 【step2】创建组件对象
  14. api = Api(app)
  15. # 【step3】定义类视图(继承:Resource)
  16. class index(Resource):
  17. def get(self):
  18. return "index-rest"
  19. class helloworld(Resource):
  20. def get(self):
  21. return "rest-get-hello"
  22. def post(self):
  23. body = request.get_json()
  24. return {"body": body}, 201
  25. # 【step4】组件:添加类视图及设置路由
  26. api.add_resource(index, '/')
  27. api.add_resource(helloworld, '/hello')
  28. if __name__ == '__main__':
  29. app.run(host="0.0.0.0", port=8806, debug=True)

3.运行结果

image.png

2.【代码Diff】非restful与restful

image.png

3.【整合】蓝图+flask-restful+tornado

1.构造步骤

3.Flask-Restful - 图4

2.代码实现

1.restful-code

  1. #!/usr/bin/env pytho
  2. # -*- coding: utf-8 -*-
  3. """
  4. @author:cooling
  5. @file:rest02.py
  6. @time:2022/04/19
  7. """
  8. from flask import request
  9. from flask_restful import Resource,Api #【step1】导入flask_restful相关包
  10. from flask import Blueprint as bp #【step2】导入flask_蓝图相关包
  11. #【step3】定义蓝图对象
  12. restApp=bp("restApp",__name__,url_prefix="/rest")
  13. # 【step4】创建组件对象(传入--蓝图对象restApp)
  14. api=Api(restApp)
  15. class user(Resource):
  16. def get(self):
  17. return "rest-get-user"
  18. # 【step5】定义类视图(继承:Resource)
  19. class user(Resource):
  20. def get(self):
  21. return "rest-get-user"
  22. class helloworld(Resource):
  23. def get(self):
  24. return "rest-get-hello"
  25. def post(self):
  26. body=request.get_json()
  27. return {"body":body},201
  28. #【step6】组件:添加类视图及设置路由
  29. api.add_resource(user,'/user')
  30. api.add_resource(helloworld,'/hello')
  31. #
  32. # if __name__ == '__main__':
  33. # app.run(host="0.0.0.0",port=8806,debug=True)

2.flask-main

  1. #!/usr/bin/env pytho
  2. # -*- coding: utf-8 -*-
  3. """
  4. @author:cooling
  5. @file:restMain.py
  6. @time:2022/04/19
  7. """
  8. import resource.flaskConfig as config1
  9. from flask import Flask
  10. from flask_cors import CORS
  11. from restful.rest02 import restApp # 导入:蓝图
  12. app = Flask(__name__)
  13. # CORS(app) # 解决跨域
  14. app.register_blueprint(restApp) # 绑定蓝图对象
  15. app.debug = True
  16. def myApp():
  17. return app
  18. @app.get("/")
  19. def index():
  20. return "index-rest-flask"
  21. #
  22. # if __name__ == '__main__':
  23. # pass

3.【tornado】runFlask

  1. #!/usr/bin/env pytho
  2. # -*- coding: utf-8 -*-
  3. """
  4. @author:cooling
  5. @file:runFlask.py
  6. @time:2022/04/16
  7. """
  8. from tornado.wsgi import WSGIContainer
  9. from tornado.httpserver import HTTPServer
  10. from tornado.ioloop import IOLoop
  11. # from main import app
  12. from restful.restMain import app # 导入restful的main入口
  13. flaskPort=8806
  14. def runFlask():
  15. print("init-flask")
  16. http_server= HTTPServer(WSGIContainer(app))
  17. http_server.listen(flaskPort)
  18. print("start-flask")
  19. IOLoop.instance().start()
  20. if __name__ == '__main__':
  21. runFlask()

4.代码截图

image.png