目录
Django中的路由层
一、可视化界面之增删改查
针对数据对象主键字段的互殴去可以使用更加方便的obj.pk,就不用看主键字段的字段名了
补充:
a标签中
href="#"
表示不跳转form表单中能够触发提交动作的按钮只有两个
input
type="submit"
button
type="submit"
在web页面展示上和功能上一致
1.数据展示
- 开设接口、获取数据、传递页面、展示页面
(1)开设接口
在urls中添加好对应关系
前端:先编写最简单的用户数据展示页面
(2)获取数据
后端:获取数据库数据
(3)传递页面
通过模版语法展示出数据库获取的数据
2.数据的添加功能
(1)开设接口
在urls中添加好对应关系,前端:在展示数据的页面上添加新增数据的按钮,点击跳转到新增数据的页面
(2)获取数据
后端:获取前端提交的数据,添加逻辑判断后存入数据库
3.数据的编辑功能
(1)开设接口
(2)获取向编辑的用户的信息,通过get请求后添加额外的参数,将当前想修改的用户的主键传递过去,?携带参数
(3)后端获取用户数据
(4)前端展示默认数据
(5)同上
4.数据的删除功能
(1)开设接口
在urls中添加好对应关系,前端:在展示数据的页面上点击删除的按钮,执行删除的功能函数
(2)获取删除的用户id
通过request.get()
获取标签提交的数据
(3)后端判断
添加点击事件,当删除时,先判断是否真的删除,点击确定再删除
<script>
$('.c1').click(function () {
let res = confirm('确认删除用户{{ data.name }}的数据吗')
if (res) {
} else {
return false
}
})
</script>
二、Django请求生命周期流程图
1.web服务网关接口
web服务网关接口协议-WSGI协议,wsgiref和uwsgi都是该协议的两种不同功能模块
-
Wsgiref.py
django默认的网关接口,能承受的并发量特别低,只用于本地,实际项目中会切换成uwsgi。
解析请求格式,打包成request大字典;或者打包好数据返回给浏览器,满足HTTP协议
-
uwsgi
上线之后切换成uwsgi,并发量比wsgiref高很多
2.整个Django后端
1)中间件:Django的保安,忽略
2)路由层:urls.py -路由和视图函数的对应关系
3)视图层:views.py(每个应用有一个,多个应用总共有多个)
4)与视图层交互的模版层和模型层
-
模版层:templates目录,django提供的模版语法
-
模型层:models.py 提供orm语法,可以连接数据库
3.MySQL数据库:与模型层交互
三、Django路由层
路由和视图函数的对应关系
1.路由匹配
(1)Django的版本与路由匹配问题
django2.x以及以上,urls.py中path第一个参数写什么就匹配什么
django1.x第一个参数是正则表达式
/user_list
/user_list/
上面的两个路由是不同的,无论什么版本,django都自带自动加/
并重定向的功能,可以看到当user_list在路由匹配中找不到的时候,django会自动添加/
并重定向
该重定向功能可以取消,在settings.py中,将APPEND_SLASH改为False
(2)路由匹配本质
特点:path第一个参数写什么就匹配什么
2.转换器的有名分组
网站上都会有很多相似的网址,如果每个都单独开设路由并不合理;
所以,很多相似的路由应该整合到一起,这就用到了Django提供的转换器
(1)转换器
-
类型:字符串转换器
<str:info>
,整形转换器<int:info>
-
转换器的作用:接收多个路由拼接在一起,将对应位置匹配到的数据转换成固定类型
转换器捕捉info的时候,会将info转换成固定类型,然后当成参数传入视图函数,形式如下
index_func(request,info='类型转换后的内容')
path('路由/<str:info>/',veiws.视图函数func)
视图函数func(request, info='类型转换后的内容')
动态匹配动态内容,还可以给视图函数的穿参数进去,或者写成(request,**kwargs)
兼容性更强
视图函数func(request, **kwargs)
还支持自定义转换器,自己写正则表达式,匹配更加细化的内容
3.正则匹配re_path
re_path
简介:django 2.x及以上版本中的模块,第一个参数是正则表达式
re_path('test', views.test)
# test则是正则表达式,在输入的网址的路由中,只有含义test则立即执行对应的视图函数
正则匹配的原则:只要第一个正则表达式能够从用户输入到路由中匹配到数据就算匹配成功,就会立刻从停止在路由层匹配,而直接执行对应的视图函数
通过正则表达式的符号可以提供更多的限制
re_path('^test/$', views.test)
# 限制开头和结尾,精准匹配/test/
4.正则匹配的无名分组与有名分组
通过正则匹配,我们可以自己定义匹配的规则
(1)无名分组
无名分组:会将括号内正则匹配到的内容当作位置参数传给视图函数
re_path('^test/(\d{4})/', views.test)
(2)有名分组
有名分组:给分组起别名(?p<别名>)
,视图函数会按照关键字传参的方式,这种叫做有名分组
有名分组:会将括号内正则匹配到的内容当作关键字参数传递给视图函数
re_path('^test/(?P<year>\d{4})/', views.test)
注意:
正则匹配的无名分组和有名分组,使用时只能选择一种,不能混合使用
四、反向解析
类似于静态文件的动态解析
通过反向解析的语法,找到对应关系
1.反向解析的含义
通过起一个别名,可以反向解析出一个结果,这个结果可以访问到一个对应到路由,可以访问到对应的一个视图函数(减少耦合,动态匹配)
2.反向解析的用法
(1)路由匹配关系起别名
给路由和视图函数的对应关系,起一个别名,只要别名不变,就可以通过这个别名找到他们的对应关系
(2)使用反向解析语法
在前端html页面或者后端视图函数中,使用反向解析动态匹配路由
3.正则匹配与转换器
(1)正则匹配的反向解析
1) html页面上的模版语法
{% url '对应关系别名' %}
2)后端语法
通过导入reverse模块,填写路由和视图函数对应关系的别名,可以反向解析出他们的对应关系
reverse('login_view')
(2)转换器的反向解析-动态路由的反向解析
1.前端上
- 路由中有动态的部分-->转换器
- html页面上使用模版语法
除了在视图函数中传一个关键字参数,需要在html页面上,将路由中动态的部分做一个限定
2.后端语法
通过reverse中args参数传递动态解析的限制
标签:匹配,框架,视图,Django,分组,解析,路由 From: https://www.cnblogs.com/DuoDuosg/p/16977154.html