基于类的视图URL 路由注册在路由系统中定义规则可以的方法可以概括为三种: - 使用
flask.Flask.route() 装饰器 - 使用
flask.Flask.add_url_rule() 函数 - 直接访问暴露为
flask.Flask.url_map 的底层的 Werkzeug 路由系统
路由中的变量部分可以用尖括号指定( /user/<username> )。默认情况下,URL 中的变量部分接受任何不带斜线的字符串,而 <converter:name> 也可以指定不 同的转换器。 变量部分以关键字参数传递给视图函数。 下面的转换器是可用的: string | 接受任何不带斜线的字符串(默认的转换器) | int | 接受整数 | float | 同 int ,但是接受浮点数 | path | 和默认的相似,但也接受斜线 |
这里是一些例子: @app.route('/')
def index():
pass
@app.route('/<username>')
def show_user(username):
pass
@app.route('/post/<int:post_id>')
def show_post(post_id):
pass
需要注意的一个重要细节是 Flask 处理结尾斜线的方式。你可以应用下面两个 规则来保证 URL 的唯一: - 如果规则以斜线结尾,当用户以不带斜线的形式请求,用户被自动重定向到 带有结尾斜线的相同页面。
- 如果规则结尾没有斜线,当用户以带斜线的形式请求,会抛出一个 404 not found 。
这与 web 服务器处理静态文件的方式一致。这使得安全地使用相对链接地址成为 可能。 你可以为同一个函数定义多个规则。无论如何,他们也要唯一。也可以给定默认值。 这里给出一个接受可选页面的 URL 定义: @app.route('/users/', defaults={'page': 1})
@app.route('/users/page/<int:page>')
def show_users(page):
pass
这指定了 /users/ 为第一页的 URL ,/users/page/N 为第 N 页的 URL 。 以下是 route() 和 add_url_rule() 接受的参数。两者唯一的区别是,带有路由参数的视图函数用装饰器定义,而不是 view_func 参数。 rule | URL 规则的字符串 | endpoint | 注册的 URL 规则的末端。如果没有显式地规定,Flask 本身假设 末端的名称是视图函数的名称,。 | view_func | 当请求呈递到给定的末端时调用的函数。如果没有提供,可以 在用在 view_functions 字典中以末端 作为键名存储,来在之后设定函数。 | defaults | 规则默认值的字典。上面的示例介绍了默认值如何工作。 | subdomain | 当使用子域名匹配的时候,为子域名设定规则。如果没有给定,假 定为默认的子域名。 | **options | 这些选项会被推送给底层的 Rule 对象。一个 Werkzeug 的变化是 method 选项的处理。methods是 这个规则被限定的方法列表( GET , POST 等等)。默认情 况下,规则只监听 GET (也隐式地监听 HEAD )。从 Flask 0.6 开始,OPTIONS 也被隐式地加入,并且做标准的请求处理。 它们需要作为关键字参数来给定。 |
|