一、概念
URL (统一资源定位符)
组成语法格式: protocol://hostname[:port]/path/[parameter][query]#fragment
protocol:协议,包括 http、https、ftp等等
hostname:IP地址
port:端口
path:路径
parameter:参数
query:查询
fragment:锚点
示例:https://baike.baidu.com/item/Python%E7%BC%96%E7%A8%8B/2142769?fr=aladdin#3
二、URL
1.Django 中URL如何匹配的?
Django中的URL匹配规则:
url先匹配django项目中的url文件,然后再去匹配应用app中的url文件。逐级匹配。
例如在项目中,设置匹配空' ' ——> 随后会匹配APP应用中的 url。
** tips: path中的“/” 斜杠不能省略
2.Path路径语法
** tips :Django 2.1(包含2.1)之前,path语法使用url表示
先导入包 from django.urls import path
path标准语法: path(
route:表示路径,需要匹配的路径,从端口号后开始到最后一个 “/”为止
view:表示需要调用的视图函数,必须是一个函数;如果是类的话,要用as_view()转换为函数
name:别名,为方便其他地方调用和避免重复写长串地址,为view起一个别名
*kwargs:字典 ,具体使用方法后面会说到。
3.Django 地址转化器
例如:很多网址 https://news.163.com/19/0610/08/EHA1MEQN000189FH.html
https://news.ifeng.com/c/7nNydk1BHbE
如果网页数量过多,URL匹配时,path路径写的工作量将会巨大
为较少输入路径的工作量,使用地址转换器,以变量的方式转换地址
格式: path("route/
path("route/
共五种地址转换器:(1)string 匹配非空字符串,除去“/”,默认的路径转换器
(2)int 匹配0或正整数 ( tips: format加法: format(number1+number2) )
(3)slug 由ASCII码组成或数字组成,通过 “-”连接的字符串
(4)uuid uuid格式的字符串
(5)path 匹配非空字符串 ,包含“/” 例如 http://127.0.0.1:8000/index/j/k/w
默认的string不能匹配包含"/"部分,会抱错
这五种地址转换器,各有其用途,后面会讲到
4. URL include函数
创建项目和应用APP时,项目中有url文件,应用中没有url文件。
当一个项目中有多个应用,而应用中又有多个url,此时如果把全部写在项目的url文件中,将会十分难于管理和维护。
所以需要include函数的方式进行管理
(1)使用时,先在应用中创建URL文件并编写;
(2)然后在项目的URL文件中,导入include函数。( from django.urls import path,include)
(3)项目URL文件中,导入应用APP的URL文件,然后编写path时:
path(' ',include(urls),name='XXX')
***problems : 我在6.10号时,尝试创建两个应用,并在同一项目中引入它们的URL,使用include处理
发现include只匹配了最后一个导入的应用的url,并不能全部匹配。
具体原因尚不明白
include()函数语法:有三种
(1) include(module,namespace=None) 示例:
(2) include(pattern_list) 示例:path()或者re_path()清单
(3) include((pattern_list,app_namespace),namespace=None)
示例:
参数释义: module:一个模型文件
namespace:命名空间
pattern_list:必须是一个可迭代的path()或者re_path()清单
app_namespace:app命名空间