python2.7的flask框架之路由使用(变量规则&唯一 URL / 重定向行为)

现代 Web 应用的 URL 十分优雅,易于人们辨识记忆,这一点对于那些面向使用低速网络连接移动设备访问的应用特别有用。如果可以不访问索引页,而是直接访问想要的那个页面,他们多半会笑逐颜开而再度光顾。

然而在python的flask框架中,route() 装饰器把一个函数绑定到对应的 URL 上,我们来看一些基本的实例:

@app.route('/')
def index():
    return 'Index Page'

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

难道在这个框架中我们仅仅只能这样来表示路由么,不不不,我们还可以构造含有动态部分的 URL,也可以在一个函数上附着多个规则。我们先来看下在给URL 添加变量部分时候的规则。

我们如果要给 URL 添加变量部分,就可以把这些特殊的字段标记为 <variable_name> , 这个部分将会作为命名参数传递到我们的函数。规则的话可以用 <converter:variable_name> 指定一个可选的转换器。来看一下实例:

@app.route('/user/<username>')
def show_user_profile(username):
    # show the user profile for that user
    return 'User %s' % username

@app.route('/post/<int:post_id>')
def show_post(post_id):
    # show the post with the given id, the id is an integer
    return 'Post %d' % post_id

来看下转换器的种类:

int 接受整数
float 同 int ,但是接受浮点数
path 和默认的相似,但也接受斜线

我们都知道,Flask 的 URL 规则基于 Werkzeug 的路由模块。这个模块背后的思想是基于 Apache 以及更早的 HTTP 服务器主张的先例,保证优雅且唯一的 URL。我们来比较看下下面的两个路由:

@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'

看起来着实相似是吧。。。别高兴太早,它们结尾斜线的使用在 URL 定义 中不同。第一种情况中,指向 projects 的规范 URL 尾端有一个斜线。这种感觉很像在文件系统中的文件夹。访问一个结尾不带斜线的 URL 会被 Flask 重定向到带斜线的规范 URL 去。

然而,第二种情况的 URL 结尾不带斜线,类似 UNIX-like 系统下的文件的路径名。访问结尾带斜线的 URL 会产生一个 404 “Not Found” 错误。

这个行为使得在遗忘尾斜线时,允许关联的 URL 接任工作,与 Apache 和其它的服务器的行为并无二异。此外,也保证了 URL 的唯一,有助于避免搜索引擎索引同一个页面两次。

好啦,本次记录就到这里了。

如果感觉不错的话,请多多点赞支持哦。。。

猜你喜欢

转载自blog.csdn.net/luyaran/article/details/81101574
今日推荐