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了,不会去做添加斜杠的操作