路由曾
无名分组 有名分组
反向解析
无名分组反向解析
有名分组反向解析
路由分发
伪静态的概念 了解
名称空间 了解
虚拟环境 了解
diango1.x和django2.x的区别
视图层:
三板斧
序列化模块 (dumps JsonResponse)
form表单上传文件
FBV (function based view) 和CBV (class based view)
函数基础视图 类基础视图
视图文件中可以是函数也可以是类
—————————————————————————————————————————————————————————————————————————————————————————
Django1版本下的:
url方法 第二个参数 写的一定是视图函数的名称,始终都是函数名
先写一个路由层:
url方法的第一个参数支持的是正则表达式
django会在浏览器输入框 帮你加 text/
如果输入首页(默认)网址 访问不报错
需要在写一个这样的路由:
Django2:
在Django2中 url变为 path,且也是导过来的,且没有$ 等符号.....
path('admin/',admin.site.urls), 是精准匹配,不支持正则表达式,不可多少。
而在 Django2中 使用 正则表达式 需要使用
re_path(r'^test/$',views.test)
url(r'^test/$', views.test),
url(r'testadd', views.testadd),
首页的地址
url(r'^$', views.home),
django2中
path('admin/', admin.site.urls), 精准匹配,不支持正则表达式
path('test/', views.test), 精准匹配,不支持正则表达式
re_path(r'^test/$', views.test) url(r'^test/$', views.test),
无名分组
在浏览器网址输入框中 如果加一个1 当然 找不到目标,例如 127.0.0.1.8000/test/1 ,但是可以通过正则添加,
而text在视图文件中 本身就有一个request,但是又给了一个 于是需要再加一个(匹配的内容以位置参数传递给 test)
如果再加 且想得到这个数
好处就是 可以在地址栏传参,可在视图栏找到
所以 无名分组就是:
把正则中小括号里的匹配到的内容以位置参数的形式传递给视图函数
0
有名分组:
格式:
(?P< year>\d+)
而这时却出错了
此时关键词里必须有个year
url(r'^test/(?P<year>\d+)/(?P<month>\d+)$', views.test),
有名分组就是把正则中小括号里的匹配到的内容以关键字参数的形式传递给视图函数
注:
有名分组和无名分组不能混合使用
不要混合使用,要么无名,要么有名,但是,无名、有名可以使用多次
反向解析:
就是每一个路由都可以起一个别名,通过Django提供的一些方法去解析这个别名,得到一个别名对应的路由
url(r'^v1/v2/v3/home$', views.home, name='home'),
后端反向解析
'''反向解析'''
res=reverse('home') # /v1/v2/v3/home
print(res)
前端反向解析
{<a href="/v1/v2/v3/home">点我看</a>}
<a href="{% url 'home' %}">点我看</a>
无名有名分组反向解析
url(r'^v1/v2/v3/home/(\d+)/(\d+)/$', views.home, name='home')
后端解析
res=reverse('home', args=(123, 11)) # /v1/v2/v3/home/1
print(res)
前端解析
<a href="{% url 'home' 1 123 %}">点我看</a>
有名分组反向解析
url(r'^v1/v2/v3/home/(?P<year>\d+)/(?P<mon>\d+)/$', views.home, name='home')
后端解析
res=reverse('home', args=(123, 11)) # /v1/v2/v3/home/1
res=reverse('home', kwargs={'year':123, 'mon':1}) # /v1/v2/v3/home/1
print(res)
前端解析
<a href="{% url 'home' year=1 mon=123 %}">点我看</a>
路由分发
Django的全局路由文件是urls.py这个文件
随着项目的复杂程度越来越来越大,路由肯定也是越来越多,路由文件就会增加很多的路由地址,就会导致路由文件很混乱,不好管理,也不够清晰,我们可以把总路由文件进行拆分,拆分到各个应用下面去,每一个应用都可以有自己的路由文件
路由分发之后,总路由文件就不在作为地址匹配了,只是为了分发而已
路由的分发
url(r'^app01/', include(app01_urls)),
url(r'^app02/', include(app02_urls)),
第二种方式
url(r'^app01/', include('app01.urls')),
url(r'^app02/', include('app02.urls')),
分发的路由第一个参数最后一个不要加 $
名称空间(了解)
第二种方式
url(r'^app01/', include('app01.urls', namespace='app01')),
url(r'^app02/', include('app02.urls', namespace='app02')),
解析
res=reverse('app01:login', args=(11,22)) # /v1/v2/v3/home/1
res=reverse('app02:login', args=(11,22)) # /v1/v2/v3/home/1
伪静态的概念(了解)
伪静态: 其实就是把动态页面改成静态页面
动态页面:
"""它不是在html页面中写死的,它是根据后端的数据变化而变化"""
我们的页面上的数据是从数据库查询出来都是可以是动态页面
静态页面:
html
css
案例:
https://www.cnblogs.com/bigsai/p/17827160.html # 这个就是伪装之后的页面
伪装的目的:
"""为了更好的被各大搜索引擎抓大,静态页面是最容易被抓到的,有个别的网站就会做伪装,seo"""
seo:优化关键词被容易搜索到
sem: 广告(RMB)
怎么样去伪装
url(r'^v1/v2/test.html/$', views.test)
虚拟环境(了解)
针对于每一个独立的项目,都会去配置一个解释器,多个项目能不能使用同一个解释器,原则上是能的
我们会针对于不同的项目单独的配置一个新的解释器
3.6 3.7 3.8
每一个解释器只装针对于这个项目的模块
我们会使用虚拟环境:类似于是一个纯净版本的Python解释器,虚拟环境你是需要自己下载的,下载的时候,使用的是哪个Python解释器版本,下载下来的就是这个版本的解释器,纯净版的
不要频繁的创建虚拟环境,过多的虚拟环境肯定会占用资源
django1和django2的区别
1. 路由文件
django1.x中使用的是url:支持正则
django2.x中使用的是path(不支持正则:精准匹配)和re_path(url):支持正则
path:但是它只支持五种转换器
Django默认支持以下5个转化器:
● str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
● int,匹配正整数,包含0。
● slug,匹配字母、数字以及横杠、下划线组成的字符串。
● uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
● path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)
自定义转化器
2. 创建表关系
django2中必须指定参数:on_delete:
djanxo1中不用指定:级联更新级联删除
标签:views,Django4,url,test,home,解析,路由 From: https://www.cnblogs.com/wzh366/p/17830092.html