Web库Flask
1. 简介
Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手,其强大的插件库可以让用户实现个性化的网站定制,开发出功能强大的网站。
文档地址:https://dormousehole.readthedocs.io/en/latest/quickstart.html
本文涉及的部分代码见XEdu帮助文档配套项目集:https://www.openinnolab.org.cn/pjlab/project?id=64f54348e71e656a521b0cb5&sc=645caab8a8efa334b3f0eb24#public
3. 代码示例
3.1 最简Web服务器
几行代码就能建一个Web服务器。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
代码是什么意思呢?
首先我们导入了 Flask 类。该类的实例将会成为我们的 WSGI 应用。
接着我们创建一个该类的实例。第一个参数是应用模块或者包的名称。 name 是一个适用于大多数情况的快捷方式。有了这个参数, Flask 才能知道在哪里可以找到模板和静态文件等东西。
然后我们使用 route() 装饰器来告诉 Flask 触发函数 的 URL 。
函数返回需要在用户浏览器中显示的信息。默认的内容类型是 HTML ,因此字符串中的 HTML 会被浏览器渲染。
3.2 上传一个文件
from flask import Flask, request
import os
app = Flask(__name__)
UPLOAD_FOLDER = 'uploads'
@app.route('/upload', methods=['POST'])
def upload_file():
if 'file' not in request.files:
return '没有文件上传', 400
file = request.files['file']
if file.filename == '':
return '没有选择文件', 400
if file:
file.save(os.path.join(UPLOAD_FOLDER, file.filename))
return '文件上传成功', 200
if __name__ == '__main__':
if not os.path.exists(UPLOAD_FOLDER):
os.makedirs(UPLOAD_FOLDER)
app.run(debug=True)
3.3 一个简单的WebAPI
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/api', methods=['GET'])
def api():
name = request.args.get('name', 'World')
return jsonify({'message': f'Hello, {name}!'})
if __name__ == '__main__':
app.run(debug=True)
4. 借助Flask部署智能应用
因为算力的限制,在很多应用场景中,负责采集数据的终端往往没有办法直接部署MMEdu或者其他的人工智能应用框架,也就是说没有办法在终端上直接推理。那么,先在服务器(或者一台算力较好的PC机)部署一个AI应用,提供WebAPI接口,让终端发送数据到这个服务器,服务器推理后返回推理结果。
这种做法和很多智能终端的工作原理是一样的。如小度、天猫精灵和小爱音箱等,自己都没有处理数据的能力,都要靠网络传送数据到服务器,然后才能正确和用户交流。目前中小学的很多AI应用,都是借助百度AI开放平台的。
