系列导读 01. Django 系列篇(一):Hello World! 1. 路由变量上面 Django 定义的路由只能代表一个页面,为了使路由指向多个不同的页面,可以在路由中定义变量 变量类型有:整形、字符串、slug、uuid 4 种 其中: 1、字符串:匹配任何非空字符串,但不包含斜杠,默认使用字符串类型 2、整形:匹配任何非负数 3、slug:匹配 ASCII 字符以及连接线和下划线,可理解为注释、后缀或附属等概念 4、uuid:匹配一个 uuid 格式的对象,为了防止路由冲突,所有字母必须小写,然后用 - 连接起来,比如:0755-2323-1111-abcd-3f3g 以匹配年、月、日的视图为列 首先,在 App 的路由集合下新增一条路由信息 # urls.py(App) 其中,使用变量符号 <> 为路由设置变量,: 之前代表变量类型,: 之后代表变量名;如果没有指定变量类型,默认为字符串类型 然后,在 App 下的 view.py 文件中编写路由定义的视图函数 视图函数中包含 4 个参数,其中第 1 个参数为:request,其他 3 个参数为:路由信息包含的 3 个变量 需要注意的是,视图函数的参数必须和路由信息包含的变量一一对应,否则会抛出异常 # views.py(App) 最后运行项目,在浏览器下输入路由地址,比如:http://127.0.0.1:8000/2020/04/20 2. 额外变量除了在路由地址中设置变量外,还可以为 path 函数追加一个变量 需要注意的是,变量必须以字典的形式表示,参数值不限制数据格式,可以是实体对象,也可以是基本数据类型 # urls.py(App) 然后,在视图函数 with_extra_params() 中来使用这个参数 # views.py(App) 3. 正则表达式正则表达式可以限制路由地址中的变量取值范围,对路由变量进行截取与判断,使得路由匹配更加地精确合理 路由正则表达式使用函数 re_path 来定义,以小括号 ( ) 为一个部分单位,每个小括号以 ?P 开头,加入正则表达式,最后通过斜杠 / 隔开即可 上面的路由地址可以通过正则表达式改写为: # 路由正则表达式 其中,用 <> 包住的 year、month、day 为 3 个变量 接着定义视图函数,运行项目,就可以通过地址访问到视图函数渲染的内容。 def ymd_with_params1(request,year, month, day): 4. 命名空间随着网页的数目增加,维护会有一定难度,因此,Django 可以为每一条路由设置命名空间,方便我们更好地管理网站 通过查看源码,发现路由函数 include() 有两个参数,分别是:arg、namespace,其中 namespace 代表路由的命名空间,为可选参数;arg 参数类型为字符串或元组(长度为:2 ),作用是指向项目某一个 App 的 urls.py 文件 需要注意的是: 1、如果路由函数不存在命名空间,arg 的数据格式是字符串,比如:first_app.urls,指向 first_app 这个 App 的 urls.py 路由文件 2、如果路由函数命名空间存在,arg 的数据格式一定要设置为长度为 2 的元组,比如:('first_app.urls','first_app'),其中第一个参数为目标 App 的 urls.py 文件,第二个参数一般设置为 App 的名称 from django.contrib import admin 5. 路由名称在 Django 中,路由名称是对一个路由进行命名,作用是在视图、模块里使用路由命名生成路由地址,在后期路由地址发生变更的时候,方便维护和更新 路由定义列表中,可以为函数 path() 和 re_path() 的 name 属性指定一个值,相当于给路由指定了名称 urlpatterns = [ 不同 App 中的路由命令可以重复使用,但是在同一个 App 内,最好保证路由名称的唯一性。 |
|