django(路由层)

路由层
路由匹配
url方法第一个参数是正则表达式
只要第一个参数正则表达式能够匹配到内容,
那么就会立刻停止往下匹配直接执行对应的视图函数
url(r'^admin/',....)

无名分组&有名分组
分组:就是给某一段正则表达式用小括号括起来

url(r '^index/(\d+)/' ,view.index)
无名分组就是将括号内正则表达式匹配到的内容当作位置参数
传递给后面的视图函数

url(r '^index/(?P<year>\d+)/ ',view.index)
有名分组将括号内正则表达式匹配到的内容当作关键字参数
传递给后面的视图函数

反向解析
通过一些方法得到一个结果,该结果可以直接访问对应的url触发视图函数

方法:
1先个路由与视图函数起一个别名
url(r'func_kkk/',view.func,name='ooo')

2反向解析
后端反向解析
from django.shortcuts import reverse
reverse('ooo')
前端反向解析
<a href ="{ % url '000' % }" >111</a>


有名无名反向解析
无名分组
url(r '^index/(\d+)/' ,view.index,name='xxx')

前端
{ % url 'xxx' 123 % }
后端
reverse( 'xxx', args=(1,) )


有名分组
url(r '^func/(?P<year>\d+)/ ',view.func,name = 'ooo')

前端
<a href ="{ % url '000' year = 123 % }" >111</a>
<a href ="{ % url '000' 123 % }" >111</a>
后端写法
reverse ( 'ooo' , kwargs = { 'year' : 123 } )
简便写法,跟无名操作一样
reverse ( 'ooo' , agrgs = (111,) )


路由分发
每一个应用都可以有自己的template模板文件夹,url.py static静态文件夹
正是基于上述的特点,django能够非常好的做到分组开发,每个人需要专注于
自己的APP即可

当django路由匹配特别多的时候,那么总路由可以不再直接干匹配和触发视图函数
运行而仅仅只是做一步分发操作

总路由
from app01 import urls as app01_urls
from app02 import urls as app02_urls
urlpatterns = [
url( r '^admin/' , admin.site.urls ),
url( r '^app01/ ' , include( 'app01.urls ' ))
url( r '^app02/ ' , include( 'app02.urls ' ))
只要urls是APP01开头就会自动将url中app01后面的路径交给app01下的urls.py去做匹配
]

子路由
from django.conf.urls import url
from app01 import views

urlpatternes = [
url ( r '^reg/ ' , view.reg)
]


名称空间
当多个应用出现了相同的别名,反向解析会不会自动识别应用前缀
正常情况下的反向解析是没有办法自动识别前缀的

方式一:利用名称空间的概念
总路由
url(r '^app01/' , include ( 'app01.urls' , namespace = 'app01' ) )
解析的时候
reverse( 'app01 : reg ' )

{ % url 'app01 : reg ' % }

方式二:起别名的时候加上应用前缀
一般情况下,有多个APP的时候我们在起别名的时候会加上app的前缀
这样的话就能确保多个app之间的名字不冲突

在同一django项目中,别名不能冲突
即只要别名不冲突,那么反向解析就不会出错


伪静态
将一个动态网页伪装成静态网页
伪装的目的在于增大本网站的seo查询力度
并且增加搜索引擎收藏本网站的概率

搜索引擎本质上就是一个巨大的爬虫程序

无论你怎么优化,始终干不过rmb框架


虚拟环境
在正常开发中,我们会给每一个项目配备一个该项目独有的解析器环境
该环境内只有该项目用到的模块,有用不到的一概不装

你每创建一个虚拟环境就类似于重新下载了一个纯净的Python解析器
但是虚拟环境不要创建太多,是要消耗硬盘空间

开发当中我们会给每一个项目的配备一个requirement.txt文件
里面书写了该项目的所有模板即版本
你只需要直接输入一条命令即可一键安装所有模板


django版本区别

1django 1.x路由层使用的是url方法
而在django 2.x和3.x版本中路由层使用的path方法

url() 第一个参数支持正则
path() 第一个参数不支持正则,

from django.urls import path, re_path
from django.conf.urls import urls

re_path(r '^index' , index )


2虽然不支持正则,但是它的内部支持5种转换器

3除了默认的五个转换器,还支持自定义转换器

4模型层里面1.x外键默认都是级联更新删除
但是2.x 需要你自己手动配置参数

posted @ 2021-07-13 17:13  昌尐  阅读(33)  评论(0编辑  收藏  举报