1. 前言
在上一节中,我们使用到了静态路由,即一个路由规则对应一个 URL。而在实际应用中,更多使用的则是动态路由,它的 URL是可变的。
2. 定义一个很常见的路由地址
@app.route('/user/<username>')
def user(username):
return 'User %s' % username
username 作为参数,传入 user() 函数当中。
需要记住的是,在定义路由的参数名时一定要与定义函数的变量名一致,否则就会引发异常。
3. Flask 提供了三种转换器
- int:整型;
- float:浮点数;
- path:路径。
虽不包含正则表达式,但是可以手动添加。
from werkzeug.routing import BaseConverter
class RegexConverter(BaseConverter):
def __init__(self, url_map, *items):
super(RegexConverter, self).__init__(url_map)
self.regex = items[0]
app.url_map.converters['regex'] = RegexConverter
@app.route('/user/<regex("[a-z]{3}"):user_id>')
def user(user_id):
return 'User %s' % user_id
这里代码块就添加了一个正则表达式,要求三个字符。
4. 比较友好的路由定义方式
@app.route('/projects/')
def projects():
return 'The project page'
路径后面加一个斜杠。
5. 也可以多个定义,同时指向同一个页面
@app.route('/works/')
@app.route('/projects/')
def projects():
return 'The project page'
6. http方法
在路由定义里面也同样包括 http 的方法,即 GET、POST 等。
@app.route('/login', methods=['GET', 'POST'])
常见的 http 方法:
GET:浏览器告知服务器,只获取页面上的信息并发送给我。这是最常用的方法。POST:浏览器告诉服务器,想在 URL 上发布新消息。并且服务器必须确保数据已存储且仅存储一次。这是 HTML 表单通常发送数据到服务器的方法。
PUT:类似 POST,但服务器可能多次触发了存储过程,并且多次覆盖掉旧值。你可能会问这有什么用,当然这是有原因的。考虑到传输中连接可能会丢失,在这种情况下浏览器和服务器之间的系统可能安全地第二次接收请求,而不破坏其他东西。因为 POST 它只触发一次,所以用 POST 是不可能的。
DELETE:删除给定位置的信息。
HEAD:浏览器告诉服务器,欲获取数据,但是只关心消息头。应像 GET 请求一样来处理它,但是不分发实际内容。在 Flask 中你完全无需人工干预,底层的
Werkzeug
库已经帮你打点好了。OPTIONS:给客户端提供一个敏捷的途径来弄清这个 URL 支持哪些 http 方法。从 Flask 0.6 开始,实现了自动处理。