使用Flask创建Web应用

249 阅读2分钟

在掘金社区发布文章,并在正文的第一句加入“我正在参加「掘金·启航计划」”

相比与Django来说,Flask是轻量级,没有多余的步骤,建立一个返回Hello,World的Web服务只需要如下的代码:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
   return 'Hello World'

if __name__ == '__main__':
   app.run()

这里@app.route标签就可以表示路由。

app.run就可以启动Web服务了。

flask的路由

上面我们讲了,可以通过@app.route这个装饰器来定义路由。

如:

@app.route('/first')
def first():
   return 'my first flask page'

我们在浏览器输入:

127.0.0.1:5000/first

就可以看到:

image.png

说明我们定义的路由生效了。

也可以用add_url_rule来配置路由,如:

def second():
    return 'my second flask page'

app.add_url_rule('/second', 'second', second)

但显然前者更加简洁方便。

flask的变量规则

通过向规则参数添加变量部分,可以动态构建URL。

此变量部分标记为 <variable-name>

它作为关键字参数传递给与规则相关联的函数。

在以下示例中

@app.route('/hello/<name>')
def hello_name(name):
    return 'Hello %s!' % name

在浏览器输入:127.0.0.1:5000/hello/tntxia

可以看到:

image.png

说明tntxia作为变量传递了。

Flask HTTP方法

Flask也支持指定HTTP方法

@app.route('/method_fixed', methods=['POST'])
def method_fixed():
    return 'post method'

直接用GET请求时,会提示“Method Not Allow”

image.png

Flask 模板

Flask也支持模板,模板引擎是Jinja2。

默认模板加载的路径是templates文件夹中,如在文件夹中增加一个choose.html的文件:

<html>
    <head>
        图片识别
    </head>
    <body>

        <form enctype="multipart/form-data" action="result">
            请选择你要识别的图片:<input type="file" name="pic">
        </form>

    </body>
</html>

路由配置:

@app.route('/choose')
def choose():
    return render_template('choose.html')

image.png

Flask 文件上传

使用

pic = request.files['pic']
filename = pic.filename
ext = os.path.splitext(filename)[-1]
u_filename = str(uuid.uuid1())
temp_file = r'temp/'+u_filename+ext
pic.save(temp_file)

通过request.files, 可以从请求中获取上传的文件。

再通过save方法,可以把上传文件保存到当前目录。

总结

Flask虽然简单,但已经有所有Web应用所需的东西了,是Django一个方便的替代方案。