Flask 基于类的视图

2021-08-11 11:16 更新

0.7 新版功能.

URL 路由注册

在路由系统中定义规则可以的方法可以概括为三种:

  1. 使用 flask.Flask.route() 装饰器
  2. 使用 flask.Flask.add_url_rule() 函数
  3. 直接访问暴露为 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 的唯一:

  1. 如果规则以斜线结尾,当用户以不带斜线的形式请求,用户被自动重定向到 带有结尾斜线的相同页面。
  2. 如果规则结尾没有斜线,当用户以带斜线的形式请求,会抛出一个 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是 这个规则被限定的方法列表( GETPOST 等等)。默认情 况下,规则只监听 GET (也隐式地监听 HEAD )。从 Flask 0.6 开始,OPTIONS 也被隐式地加入,并且做标准的请求处理。 它们需要作为关键字参数来给定。
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号