Django4

发布时间 2023-11-13 20:27:01作者: 拆尼斯、帕丁顿

路由曾

无名分组  有名分组

反向解析

无名分组反向解析

有名分组反向解析

路由分发

伪静态的概念 了解

名称空间 了解

虚拟环境 了解

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')),

分发的路由第一个参数最后一个不要加 $ 

 

名称空间(了解)