flask的路由实现原理(/hello和/hello/的区别)

版权声明: https://blog.csdn.net/JENREY/article/details/86532822

咱们以路由/hello和/hello/的区别为例


下面我们在浏览器的地址栏中访问/hello,注意不是/hello/

可以看出有两次的请求,因为这种写法在flask的内部是经过了转发的,怎么看出来是经过了转发,通过http的headers中的Location可以看出是转发到了这个地址。

不管你在url中写的是/hello还是/hello/,在浏览器的地址栏中看到的都是/hello/

下面这种的结果是我们在浏览器的地址栏中访问的是/hello/,注意不是/hello

可以看到直接访问路由的地址是不会做flask的转发操作的


补充说明:

为什么要出现flask的转发的情况呢?因为要保证URL的唯一原则

因为加入我们的路由不是写/hello/而是/hello,那么访问的是一个视图函数,如果用户手动的在url后面加上/,访问的是另一个视图函数的话就不符合URL唯一原则了。

上图可以看出当我们写上路由/hello/和/hello的时候代码直接报错并停止了flask内置的web服务器

AssertionError:视图函数映射覆盖了一个现有的端点函数:hello

而至于为什么这样是因为还涉及到了一个搜索引擎优化的问题

假如我们为了防止用户在url后面手动加上/,而写了两个路由即/hello和/hello/,那么搜索引擎会搜索两次,但是其视图函数的内容是样的,这样就对搜索引擎不友好了。

猜你喜欢

转载自blog.csdn.net/JENREY/article/details/86532822