在掘金社区发布文章,并在正文的第一句加入“我正在参加「掘金·启航计划」”
相比与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'
我们在浏览器输入:
就可以看到:
说明我们定义的路由生效了。
也可以用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
可以看到:
说明tntxia作为变量传递了。
Flask HTTP方法
Flask也支持指定HTTP方法
@app.route('/method_fixed', methods=['POST'])
def method_fixed():
return 'post method'
直接用GET请求时,会提示“Method Not Allow”
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')
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一个方便的替代方案。