FLASK博客系列3——路由

 18.gif

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

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

    从上篇文章我们知道,使用 route()

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

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

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

带变量的路由

1、在路径中添加变量

    聪明的同学已经猜到了。flask通过把URL的一部分标记为,就可以实现在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 参数传了进来,如下图。

    FLASK博客系列3——路由_第1张图片

2、为变量指定类型

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

比如:

@app.route('/user/')
def get_user(user_id):
    return 'User ID: %d' % user_id

    如果你尝试访问 http://127.0.0.1:5000/user/jack, 你会看到404错误,如下图:

    FLASK博客系列3——路由_第2张图片

    这是应为参数类型转换器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!'
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

     第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             

    当然,路由的知识还有很多,后面还有自定义转化器,路由地址反向生成等。内容还是蛮多的, 如果您想继续深入了解,可以留言。下期我们再见。

你可能感兴趣的:(flask,Python)