URL定义:
urls.py ----- 负责把URL模式映射到应用程序。URL是Django收到用户请求后,根据用户请求的URL地址和urls.py里配置的映射关系,以正确的确定出某个URL调用哪一段逻辑代码来对应执行相应的视图函数或视图类,最后由视图返回给客户端想要接收的数据。
Django中的路由解析的过程主要是:
- 由客户端发送访问请求;
- 服务端接受客户端的请求,拆解出请求;
- 服务端优先匹配项目目录下的URL,再匹配具体应用中的URL;
- 做出判断,若匹配成功则执行对应的视图;未匹配成功则返回404;
- 客户端接受响应并渲染执行;
路由主要分为两种:
- 定义在工程同名目录下的urls.py的文件中,该文件是Django解析路由的入口,也叫总路由;
- 每个子应用为了保持相对的独立性,在每个子应用中定义属于自己的urls.py来保存该应用的路由,也叫做子路由;
也可将功能的全部路由信息都定义在主路由文件中,在子应用中不再设置urls.py文件中;
路由解析顺序:
路由的查找顺序是从上到下,因此有可能会使上面的路由屏蔽掉下面的路由,带来非预期结果。
因此在设置路由时要:
1.需要注意定义路由的顺序,避免出现屏蔽效应。
2.子路由定义时,将正则表达式写完整,加上结束符.
路径结尾斜线/的说明:
Django中定义路由时,通常以斜线/结尾,其好处是用户访问不以斜线/结尾的相同路径时,Django会把用户重定向到以斜线/结尾的路径上,而不会返回404不存在。
自定义的表达式匹配:转换器类型 类型说明
<int:number> | 将number转换为整型,匹配0或任何正整数 |
<str:name> | 将name转换为浮点型,匹配除了/之外的非空字符 |
<slug:path1> | 匹配字母、数字、下划线组成的字符串 |
<uuid:path2> | 匹配格式化的UUID唯一识别码 |
<path:path3> | 匹配任何非空字符,包括路径分割符,?除外 |
其他注意事项:
urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式,一旦匹配成功则不再继续。
若要冲URL中捕获一个值,只需要在它周围放置一对圆括号(分配分组)
不需要添加一个前导的反斜杠(也就是写在正则最前面的那个/),因为每个url都有。例如:应该是^index而不是 ^/index。每个正则表达式前面的"r" 可选但是建议加上idex$ 以什么结尾,以什么开头,严格限制路径