django路由——关于路由最后斜杠的问题

1.结尾不带斜杠

路由文件中配置如下:

urlpatterns = [
    path('demo',views.demo1)
]

启动服务,这时候访问地址 http://127.0.0.1:8000/demo

正常访问

这时候访问地址http://127.0.0.1:8000/demo/

会报错404  

因为这里必须严格匹配,在路由中配置的结尾没有 /  如果需要访问该地址的话,结尾也不能带有斜杠

2.结尾带斜杠

路由文件中配置如下

urlpatterns = [
    path('demo/',views.demo1)
]

启动服务,这时候访问地址http://127.0.0.1:8000/demo

正常访问  当然如果访问地址http://127.0.0.1:8000/demo/ 也是能正常访问的

这里就有疑问了,为什么这里结尾没有加斜杠,没有严格匹配,却可以正常访问,而且访问的时候还自动给这个地址末尾带了一个/

因为django默认配置有一个设置  

APPEND_SLASH=True

顾名思义,就是自动添加斜杠,这里截图示例 

 图中清晰的展示了整个过程,在输入的地址是不带斜杠的时候,根据django默认的配置,会判断如果添加了斜杠,会不会访问到资源,如果加了斜杠能访问到资源的话,就会重定向到加了斜杠的

地址。  但是如果加了斜杠都无法访问到资源的话,就不会进行重定向的操作,比如 我这里输入 127.0.0.1:8000/demo123  再次查看请求过程 如下图(这里就不会去自动加斜杠了)

 如果在setting中修改该配置为

APPEND_SLASH=False

这时候再次访问地址http://127.0.0.1:8000/demo

这里就会直接报错404了,不会去做添加斜杠的操作

 

PS:在自己手动测试的过程中,要记得清理缓存

原文地址:https://www.cnblogs.com/alantammm/p/13803476.html