首页 > 其他分享 >Django框架:路由层

Django框架:路由层

时间:2022-12-12 21:33:12浏览次数:56  
标签:匹配 框架 视图 Django 分组 解析 路由

目录

Django中的路由层


一、可视化界面之增删改查

针对数据对象主键字段的互殴去可以使用更加方便的obj.pk,就不用看主键字段的字段名了

补充:

a标签中href="#"表示不跳转

form表单中能够触发提交动作的按钮只有两个

  • input type="submit"

    image-20221212195148151

  • buttontype="submit"

    image-20221212195208000

    在web页面展示上和功能上一致

    image-20221212195302523

1.数据展示

  • 开设接口、获取数据、传递页面、展示页面

(1)开设接口

在urls中添加好对应关系

前端:先编写最简单的用户数据展示页面

(2)获取数据

后端:获取数据库数据

(3)传递页面

通过模版语法展示出数据库获取的数据

image-20221212205019431

2.数据的添加功能

(1)开设接口

在urls中添加好对应关系,前端:在展示数据的页面上添加新增数据的按钮,点击跳转到新增数据的页面

(2)获取数据

后端:获取前端提交的数据,添加逻辑判断后存入数据库

image-20221212205051826

image-20221212205111833

3.数据的编辑功能

(1)开设接口

(2)获取向编辑的用户的信息,通过get请求后添加额外的参数,将当前想修改的用户的主键传递过去,?携带参数

(3)后端获取用户数据

(4)前端展示默认数据

(5)同上

image-20221212205133598

image-20221212205144512

4.数据的删除功能

(1)开设接口

在urls中添加好对应关系,前端:在展示数据的页面上点击删除的按钮,执行删除的功能函数

(2)获取删除的用户id

通过request.get()获取标签提交的数据

(3)后端判断

添加点击事件,当删除时,先判断是否真的删除,点击确定再删除

<script>
    $('.c1').click(function () {
        let res = confirm('确认删除用户{{ data.name }}的数据吗')
        if (res) {
        } else {
            return false
        }
    })
</script>

二、Django请求生命周期流程图

image-20221212212219273

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第一个参数是正则表达式

image-20221212113635441

/user_list
/user_list/

上面的两个路由是不同的,无论什么版本,django都自带自动加/并重定向的功能,可以看到当user_list在路由匹配中找不到的时候,django会自动添加/并重定向

该重定向功能可以取消,在settings.py中,将APPEND_SLASH改为False

image-20221212113836111

(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

image-20221212121653354

  • 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)路由匹配关系起别名

给路由和视图函数的对应关系,起一个别名,只要别名不变,就可以通过这个别名找到他们的对应关系

image-20221212152927632

(2)使用反向解析语法

在前端html页面或者后端视图函数中,使用反向解析动态匹配路由

3.正则匹配与转换器

(1)正则匹配的反向解析

1) html页面上的模版语法

{% url '对应关系别名' %}

image-20221212152829505

2)后端语法

通过导入reverse模块,填写路由和视图函数对应关系的别名,可以反向解析出他们的对应关系

reverse('login_view')

(2)转换器的反向解析-动态路由的反向解析

1.前端上

  • 路由中有动态的部分-->转换器

image-20221212153303619

  • html页面上使用模版语法

image-20221212153158465

除了在视图函数中传一个关键字参数,需要在html页面上,将路由中动态的部分做一个限定

image-20221212153426864

2.后端语法

通过reverse中args参数传递动态解析的限制

image-20221212153556774

标签:匹配,框架,视图,Django,分组,解析,路由
From: https://www.cnblogs.com/DuoDuosg/p/16977154.html

相关文章

  • 可视化界面之数据增删改查、django请求生命周期流程图、django路由层、反向解析
    可视化界面之数据增删改查针对数据对象主键字段的获取可以使用更加方便的obj.pk获取在模型类中定义双下str方法可以在数据对象被执行打印操作的时候方便的查看'''for......
  • Django3
    django请求生命周期流程图1.Django请求的生命周期的含义Django请求的生命周期是指:当用户在浏览器上输入URL到用户看到网页的这个时间段内,Django后台所发生的事情。2.Dj......
  • django路由层知识
    今日内容概要作业讲解(数据增删改查)django请求生命周期流程图django路由层python虚拟环境(跳过)反向解析路由分发名称空间今日内容详细可视化界面之数据增......
  • django路由层
    上周内容回顾静态文件及相关配置1.静态文件的概念 简单的理解为html页面需要使用到的不经常变化的资源 css文件、js文件、img文件、第三方文件2.静态文件配......
  • Django路由层的匹配
    前日内容回顾静态文件的配置页面中不需要经常修改的内容(样式、脚本、图片等)采用静态文件的方式保存,需要在Django的配置文件中注册相应的文件地址。request对象方......
  • 可视化界面之数据增删改查、django请求生命周期流程图、django路由层、反向解析、
    目录可视化界面之数据增删改查django请求生命周期流程图django路由层反向解析可视化界面之数据增删改查针对数据对象主键字段的获取可以使用更加方便的obj.pk获取在模......
  • 可视化界面之数据增删改查、django请求生命周期流程图、django路由层、反向解析
    可视化界面之数据增删改查针对数据对象主键字段的获取可以使用更加方便的obj.pk获取在模型类中定义双下str方法可以在数据对象被执行打印操作的时候方便的查看'''for......
  • django 03 django路由层
    django请求生命周期流程图  django路由层#1.路由匹配django1.x第一个参数是正则表达式django2.x+path第一个参数写什么就匹配什么......
  • ORM数据增删改查 django请求生命周期 django路由层 反向解析
    目录可视化界面之数据增删改查补充1.建表2.数据展示功能3.数据添加功能4.数据编辑功能5.数据删除功能django请求生命周期流程图crsfwsgirel与uwsginginxdjango路由层1.路......
  • django之路由层
    django请求生命周期流程图特别注意:WSGI是协议,而wsgiref与uwsgi是基于WSGI协议实现的功能django路由层1.路由匹配 django2.x及以上 path第一个参数写什么就匹配什么......