vlambda博客
学习文章列表

FLASK博客系列3——路由

 

    断更了几天,我又回来了。

    历史文章

  •     

  •     

       今天我们来讲讲路由。这个路由可不是我们家里用的路由,Flask路由规则都是基于Werkzeug的路由模块的,它还提供了很多强大的功能。现代 web 应用都使用有意义的 URL ,这样有助于用户记忆,网页会更得到用户的青睐, 提高回头率。

       从上篇文章我们知道,使用 route()装饰器来把函数绑定到 URL

@app.route('/')def hello_world(): return 'Hello World!'
@app.route('/index')def hello_world(): return 'Hello World!'

      诶,那有朋友就说,能不能带参数呢?当然可以,我们一起来看看。


带变量的路由

1、在路径中添加变量

         聪明的同学已经猜到了。flask通过把URL的一部分标记为<variable_name>,就可以实现在URL中添加变量。

@app.route('/hi/<username>')def show_user_ifno(username): return 'Hi %s' % username  

    FLASK博客系列3——路由

2、为变量指定类型

        在声明变量时,我们还可以指定变量被映射的类型。使用方法也很简单,我们只需要加一个转换器即可。通过使用  <converter:variable_name> , 为变量指定规则。

比如:

@app.route('/user/<int:user_id>')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支持哪几种转换器:

string

(缺省值) 接受任何不包含斜杠的文本

int

接受正整数

float

接受正浮点数

path

类似 string ,但可以包含斜杠

uuid

接受 UUID 字符串


3、路径分割符的作用

        在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             

        欢迎光临小站:http://www.clannadhh.club