一个最小的应用
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
把它保存为 hello.py
(或是类似的),然后在命令行运行:
$ python hello.py * Running on http://127.0.0.1:5000/
现在访问 http://127.0.0.1:5000/ ,你会看见 Hello World 问候。
欲关闭服务器,按 Ctrl+C。
调试模式
虽然 run()
方法适用于启动本地的开发服务器,但是你每次修改代码后都要手动重启它。如果你启用了调试支持,服务器会在代码修改后自动重新载入,并在发生错误时提供一个相当有用的调试器。
有两种途径来启用调试模式。一种是直接在应用对象上设置:
app.debug = True
app.run()
另一种是作为 run
方法的一个参数传入:
app.run(debug=True)
两种方法的效果完全相同。
路由
route()
装饰器的作用是把一个函数绑定到对应的 URL 上。
比如:
@app.route('/hello')
def hello():
return 'Hello World'
以上函数对应的 URL 就是 http://127.0.0.1:5000/hello 。
URL 参数
要给 URL 添加变量部分,你可以把这些特殊的字段标记为 <variable_name>
, 这个部分将会作为 命名参数 传递到你的函数。规则可以用 <converter:variable_name>
指定一个可选的 转换器。
使用 URL 参数:
@app.route('/user/<username>')
def show_user_profile(username):
return '用户名:{}'.format(username)
访问:http://127.0.0.1:5000/user/diego ,就可看到用户名:digo 的页面。
使用转换器:
@app.route('/post/<int:post_id>')
def show_post(post_id):
return '号码:{}'.format(post_id)
转换器有下面几种:
类型 | 说明 |
---|---|
int | 接受整数 |
float | 同 int ,但是接受浮点数 |
path | 和默认的相似,但也接受斜线 |
唯一 URL / 重定向行为
看一下两个例子:
@app.route('/projects/')
def projects():
return 'The project page'
这种情况,/projects
和 /projects/
两个 URL 都能访问到。
@app.route('/about')
def about():
return 'The about page'
这种情况,只能用 /about
这个 URL 来访问。
构建 URL
可以使用函数 url_for()
来根据一个路由函数构建一个 URL,这在重定向的时候经常用到。
from flask import (
Flask,
url_for,
render_template
)
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
@app.route('/login')
def login():
pass
@app.route('/hello/<name>')
def hello(name=None):
pass
以上我们定义了 hello_world()
、login()
和 hello()
两个路由函数,使用 url_for()
方法,我们可以根据函数名得到它们对应的 URL:
>>> url_for('hello_world')
'/'
>>> url_for('login', next='/')
'/login?next=/'
>>> url_for('hello', name='tom')
'/hello/tom'
HTTP方法
默认情况下,路由只会响应 GET 请求, 但是能够通过装饰器提供 methods 参数来改变:
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
do_the_login()
else:
show_the_login_form()