Flask 基于类的视图

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接受整数
floatint ,但是接受浮点数
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 参数。

ruleURL 规则的字符串
endpoint注册的 URL 规则的末端。如果没有显式地规定,Flask 本身假设
末端的名称是视图函数的名称,。
view_func当请求呈递到给定的末端时调用的函数。如果没有提供,可以
在用在 view_functions 字典中以末端
作为键名存储,来在之后设定函数。
defaults规则默认值的字典。上面的示例介绍了默认值如何工作。
subdomain当使用子域名匹配的时候,为子域名设定规则。如果没有给定,假
定为默认的子域名。
**options这些选项会被推送给底层的 Rule
对象。一个 Werkzeug 的变化是 method 选项的处理。methods是
这个规则被限定的方法列表( GETPOST 等等)。默认情
况下,规则只监听 GET (也隐式地监听 HEAD )。从 Flask
0.6 开始,OPTIONS 也被隐式地加入,并且做标准的请求处理。
它们需要作为关键字参数来给定。

作者:andy,如若转载,请注明出处:https://www.web176.com/flask2/21633.html

(0)
打赏 支付宝 支付宝 微信 微信
andy的头像andy
上一篇 2023年5月18日
下一篇 2023年5月18日

相关推荐

发表回复

登录后才能评论