路由

使用 route() 装饰器来把函数绑定到 URL

1
2
3
@app.route('/')
def index():
return 'Index Page'

带参数的路由

1
2
3
4
5
6
7
@app.route('/user/<username>')
def show_user_profile(username):
return 'user %s' % escape(username)

@app.route('/post/<int:post_id>')
def show_post(post_id):
return 'post %d' % post_id

转换器类型

类型 说明
string 默认值,接受任何不含斜杠的文本
int 接受正整数
float 接受正浮点数
path 类似 string,可以包含斜杠
uuid 接受 UUID 字符串

重定向行为

1
2
3
4
5
6
7
@app.route('/projects/')
def projects():
return 'The project page'

@app.route('/about')
def about():
return 'The about page'

区别在于尾部的斜杠

URL 构建

url_for(函数名, 参数)

1
2
3
4
5
6
7
8
from falsk import Flask, escape, url_for
app = Flask(__name__)

@app.route('/user/<username>')
def profile(username):
return '{}\'s profile'.format(escape(username))

print(url_for('profile', username = 'John Doe'))

HTTP 方法

默认情况下,一个路由只回应 GET 请求,route() 装饰器的 methods 参数可以处理不同的 HTTP 方法:

1
2
3
4
5
6
7
8
from flask import request

@app.route('/login', methods=['GET','POST'])
def login():
if request.method == 'POST':
return '登录...'
else:
return '登录信息...'

获取静态文件

url_for(‘static’, filename = ‘style.css’)

渲染模板

render_template()

1
2
3
4
5
from flask import render_template

@app.route('hello/<name>')
def hello(name):
return render_template(hello.html, name = name)

情形 1 : 一个模块:

1
2
3
/application.py
/templates
/hello.html

情形 2 : 一个包:

1
2
3
4
/application
/__init__.py
/templates
/hello.html

日志

app.logger.debug()
app.logger.warning()
app.logger.error()

Cookies

读取 cookies:

from flask import request

request.cookies.get(‘username’)

储存 cookies:

resp = make_response(render_template(…))

resp.set_cookie(‘username’, ‘the username’)

重定向和错误

from flask import abort, redirect, url_for

redirect(url_for(‘login’))
abort(401)

JSON

jsonify()

会话

if ‘username’ in session:
return ‘Logged in as %s’ % escape(session[‘username’])

session[‘username’] = request.form[‘username’]

session.pop(‘username’, None)

Flask.secret_key 生成秘钥

UWSGI

from werkzeug.contrib.fixers import LighttpdCGIRootFix
app.wsgi_app = LighttpdCGIRootFix(app.wsgi_app)