断更了几天,我又回来了。
今天我们来讲讲路由。这个路由可不是我们家里用的路由,Flask路由规则都是基于Werkzeug的路由模块的,它还提供了很多强大的功能。现代 web 应用都使用有意义的 URL ,这样有助于用户记忆,网页会更得到用户的青睐, 提高回头率。
从上篇文章我们知道,使用 route()
@app.route('/')
def hello_world():
return 'Hello World!'
@app.route('/index')
def hello_world():
return 'Hello World!'
诶,那有朋友就说,能不能带参数呢?那当然可以,我们一起来看看。
聪明的同学已经猜到了。flask通过把URL的一部分标记为
@app.route('/hi/' )
def show_user_ifno(username):
return 'Hi %s' % username
我们只需要在地址栏中输入 http://127.0.0.1:5000/hi/jack, 你将在页面上看到“Hi jack”的字样。URL路径汇总 /hi/ 后面的参数被作为show_user_info()函数的username 参数传了进来,如下图。
在声明变量时,我们还可以指定变量被映射的类型。使用方法也很简单,我们只需要加一个转换器即可。通过使用
, 为变量指定规则。
比如:
@app.route('/user/' )
def get_user(user_id):
return 'User ID: %d' % user_id
如果你尝试访问 http://127.0.0.1:5000/user/jack, 你会看到404错误,如下图:
这是应为参数类型转换器int:
帮你控制好了传入参数的类型只能是整形。我们来尝试一下访问 http://127.0.0.1:5000/user/123 。页面就会有 “User ID: 123”显示出来。如下图:
我们接着来看看,flask支持哪几种转换器:
|
(缺省值) 接受任何不包含斜杠的文本 |
|
接受正整数 |
|
接受正浮点数 |
|
类似 |
|
接受 UUID 字符串 |
在URL路径中,“/”被用作路径分隔符。当它被写在URL路径的开头时,则表明本路径是一个绝对路径。当它被写在路径中间时 ,它被用作隔离路径的层级。那么,当它被写在最后时,它的作用又是什么呢?
我们来看下面的例子。
@app.route('/hello')
def hello():
return 'Hello World!'
@app.route('/hi/')
def hi():
return 'Hello World!'
第1个路径没有“/”分隔符,它看上去更像是一个文件名;第2个路径的最后有“/”分隔符,它看上去更像是一个目录。两种方式对它们的访问效果可是有很大不同的:有“/”作为结尾的路径除了可以接受对其本身的访问,也可以接受相同路径前缀但不带“/”结尾的路径访问;而不带“/”结尾的路径样式则没有此效果。下面我们以表格的形式来呈现给大家看,看完你就会一目了然。
url方式 | 访问路径 | 能否访问到 |
---|---|---|
@app.route('/hi/') | http://localhost:5000/hi/ | √ |
http://localhost:5000/hi | √ | |
@app.route('/hello') | http://localhost:5000/hello/ | × |
http://localhost:5000/hello | √ |
当然,路由的知识还有很多,后面还有自定义转化器,路由地址反向生成等。内容还是蛮多的, 如果您想继续深入了解,可以留言。下期我们再见。