Python中使用Flask:Flask Web入门实操

234 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一个小的图像分类模型已经完成,需要一个web的演示环境,Django感觉有点重,了解了一下flask很轻量级,尝试一波,干他一扳手! 推荐flask中文网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