简介 Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。 flask中文文档 Jinja 文档 Werkzeug 文档 1、安装Flask
代码语言:javascript复制pip install Flask
2、最小的Flask 应用
为了测试 Flask 安装,请在编辑器中将以下代码输入 Hello.py:
代码语言:javascript复制from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World’
if __name__ == '__main__':
app.run()
运行上述程序,Python Hello.py
flask默认的是5000端口,在浏览器打开http://127.0.0.1:5000即可访问
外部可访问的服务器
代码语言:javascript复制app.run(host='0.0.0.0')
调试模式
有两种途径来启用调试模式。一种是直接在应用对象上设置:
代码语言:javascript复制app.debug = True
app.run()
另一种是作为 run 方法的一个参数传入:
代码语言:javascript复制app.run(debug=True)
路由
代码语言:javascript复制from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Index Page'
@app.route('/hello')
def hello():
return 'Hello World'
if __name__ == '__main__':
app.run()
路由变量规则
要给 URL 添加变量部分,可以把这些特殊的字段标记为 <variable_name> , 这个部分将会作为命名参数传递到你的函数。规则可以用 <converter:variable_name> 指定一个可选的转换器。
代码语言:javascript复制from flask import Flask
app = Flask(__name__)
@app.route('/user/<username>')
def show_user_profile(username):
# show the user profile for that user
return 'User %s' % username
@app.route('/post/<int:post_id>')
def show_post(post_id):
# show the post with the given id, the id is an integer
return 'Post %d' % post_id
if __name__ == '__main__':
app.run()
转换器有下面几种:
int | 接受整数 |
---|---|
float | 同 int ,但是接受浮点数 |
path | 和默认的相似,但也接受斜线 |
静态文件
动态 web 应用也会需要静态文件,通常是 CSS 和 JavaScript 文件。理想状况下, 你已经配置好 Web 服务器来提供静态文件,但是在开发中,Flask 也可以做到。 只要在你的包中或是模块的所在目录中创建一个名为 static 的文件夹,在应用中使用 /static 即可访问。
给静态文件生成 URL ,使用特殊的 'static' 端点名:
代码语言:javascript复制url_for('static', filename='style.css')
这个文件应该存储在文件系统上的 static/style.css 。
模板渲染
用 Python 生成 HTML 十分无趣,而且相当繁琐,因为你必须手动对 HTML 做转义来保证应用的安全。为此,Flask 配备了 Jinja2 模板引擎。
你可以使用 render_template() 方法来渲染模板。你需要做的一切就是将模板名和你想作为关键字的参数传入模板的变量。这里有一个展示如何渲染模板的简例:
代码语言:javascript复制from flask import render_template
@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
return render_template('hello.html', name=name)
Flask 会在 templates 文件夹里寻找模板。所以,如果你的应用是个模块,这个文件夹应该与模块同级;如果它是一个包,那么这个文件夹作为包的子目录:
情况 1: 模块:
代码语言:javascript复制/application.py
/templates
/hello.html
情况 2: 包:
代码语言:javascript复制/application
/__init__.py
/templates
/hello.html
关于模板,你可以发挥 Jinja2 模板的全部实例。更多信息请见 Jinja2 模板文档 。
模板实例:
代码语言:javascript复制<!doctype html>
<title>Hello from Flask</title>
{% if name %}
<h1>Hello {{ name }}!</h1>
{% else %}
<h1>Hello World!</h1>
{% endif %}