系列文章目录
Python中使用Flask:VsCode调试Flask程序
Python中使用Flask:Flask Web入门实操
Python中使用Flask:Docker发布Flask API
一个小的图像分类模型已经完成,需要一个web的演示环境,Django感觉有点重,了解了一下flask很轻量级,尝试一波,干他一扳手!
推荐flask中文网https://dormousehole.readthedocs.io/en/latest/
- 安装flask环境
pip install flask
- 新建manage.py文件
键入如下代码,开始一个最小的应用
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
- CMD环境开始运行程序
set FLASK_APP=manage
flask run
- 点击链接打开 ,可以看到返回的结果
- 我们也可以使用下面这种__name__快速启部署,正式部署时,需要注意修改默认端口
if __name__ == '__main__':
app.run(host="0.0.0.0", debug=True)
- 演示环境主要是文件上传功能,进行图像判断,那么我们首先需要一个文件上传的接口(参考地址)
@app.route('/uploadfile/', methods=['POST'])
def uploadfile():
if request.method == 'POST':
# check if the post request has the file part
if 'file' not in request.files:
flash('No file part')
return redirect(request.url)
file = request.files['file']
# If the user does not select a file, the browser submits an
# empty file without a filename.
if file.filename == '':
flash('No selected file')
return redirect(request.url)
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
upload_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
file.save(upload_path)
ret=llp.predict(upload_path)
print(ret)
json_dict = {
"type":ret[0],
"probability":str(ret[1]),
"fileurl":"http://127.0.0.1:5000/static/uploads/"+filename#url_for('static', filename='uploads/'+filename)#url_for中加入uploads报错
}
return jsonify(json_dict)#json.dumps(json_dict) 不推荐使用json.dumps()将字典转换成json字符串返回,因为Content-Type还是默认为text/html
return ''
- 但是这样所有的文件是分散的,看起来怪怪的,没有一个项目的样子,这样不方便后期维护和开发,我们修改一个项目的基本结构(大型应用作为一个包)
wwxcweb
│──app.py 启动主文件
│
└─wwxcweb
│ fileupload.py 文件上传接口路由文件
│ returnhtml.py 返回静态页面路由文件
│ __init__.py 主文件,导入其他路由界面 初始化flask文件
│
└─static 静态文件夹
│ index.html 静态页面
│
└─uploads 文件上传路径
-
我们将各个模块的路由写到对应的文件中,在__init__.py中集中导入,批量管理和配置,这样就使我们的项目更加规范了。
-
附关键代码
-
wwxcweb 代码
from setuptools import setup
setup(
name='wwxcweb',
packages=['wwxcweb'],
include_package_data=True,
install_requires=[
'flask',
],
)
- init.py 代码
from flask import Flask
app = Flask(__name__)
import wwxcweb.fileupload
import wwxcweb.returnhtml