鱼C论坛

 找回密码
 立即注册
查看: 2165|回复: 0

[作品展示] 走进flask:路由和视图

[复制链接]
发表于 2017-10-10 16:58:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我们在前面的文章介绍了一个简单的 Flask 程序是怎么运行的。其中,有三行代码,我们并没有深入讲解。在这里,我们就对它们进行深入解析。回顾这三行代码:

  1. @app.route("/")
  2. def hello():
  3.     return "Hello World!"
复制代码

这三行代码的意思就是:如果浏览器要访问服务器程序的根地址("/"),那么 Flask 程序实例就会执行函数 hello() ,返回『Hello World!』。

也就是说,上面三行代码定义了一个 URL 到 Python 函数的映射关系,我们将处理这种映射关系的程序称为『路由』,而 hello() 就是视图函数。

动态路由

假设服务器域名为 https://hello.com, 我们来看下面一个路由:

  1. @app.route("/ethan")
  2. def hello():
  3.     return '<h1>Hello, ethan!</h1>'
复制代码

再来看一个路由:

  1. @app.route("/peter")
  2. def hello():
  3.     return '<h1>Hello, peter!</h1>'
复制代码

可以看到,上面两个路由的功能是当用户访问 https://hello.com/<user_name> 时,网页显示对该用户的问候。按上面的写法,如果对每个用户都需要写一个路由,那么 100 个用户岂不是要写 100 个路由!这当然是不能忍受的,实际上一个路由就够了!且看下面:

  1. @app.route("/<user_name>")
  2. def hello(user_name):
  3.     return '<h1>Hello, %s!</h1>' % user_name
复制代码

现在,任何类似 https://hello.com/<user_name> 的 URL 都会映射到这个路由上,比如 https://hello.com/ethan-funnyhttps://hello.com/torvalds,访问这些 URL 都会执行上面的路由程序。

也就是说,Flask 支持这种动态形式的路由,路由中的动态部分默认是字符串,像上面这种情况。当然,除了字符串,Flask 也支持在路由中使用 int、float,比如路由 /articles/ 只会匹配动态片段 id 为整数的 URL,例如匹配 https://hello.com/articles/100https://hello.com/articles/101,但不匹配 https://hello.com/articles/the-first-article 这种 URL。


选自CTOLib.com
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 10:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表