前日内容回顾
-
静态文件的配置
页面中不需要经常修改的内容(样式、脚本、图片等)采用静态文件的方式保存,需要在Django的配置文件中注册相应的文件地址。
-
request对象方法
request是客户端访问服务端需要发送的一系列信息。request两个重要参数:action及method。
action是客户端发送请求的地址,不写默认为当前页面。
method是发送请求的分类,一种是索要数据(get),另一种是给予数据(post)。
-
pycharm连接MySQL
选择database,下载相关驱动,即可访问MySQL数据库。
-
Django连接MySQL
Django默认使用sqlite3数据库,容量和功能较少,仅用于基础测试。
Django使用MySQL数据库需要在settings中的database的默认值,修改ENGINE对应值,并填入数据库名、地址、端口、用户民、密码等。
Django连接MySQL需要安装MySQL客户端,使用 pip install mysqlclient 命令行安装。
-
Django模型层简介
模型层主要是存放操作数据库的方法。Django操作数据库一般通过ORM(Object Relational Mapping,对象关系映射)操作,通过封装固定的语句与SQL语句的对应关系,实现ORM语句操作数据库。
注意在Django中修改了数据库的相关的代码之后都需要进行数据的迁移,迁移是为了保证ORM语句运行。
今日内容概要
- Django请求生命周期
- Django路由层的匹配
- 普通匹配
- 动态匹配
- 反向解析
今日内容详细
Django请求生命周期
与一条请求相关的模块有以下几部分:
- 网络服务接口框架,该框架会对请求进行封装,然后基于网络发送;
- 跨站请求伪造检验,该模块会对请求进行检验,确保安全性之后发送给下一层级;
- 路由层,分析请求想要访问的页面,调用相关的功能函数;
- 视图层,处理请求,与模板层和模型层交互,返回处理完成的数据;
- 模板层,接收视图层关于页面的请求,返回相关页面;
- 模型层,接收视图层关于数据处理的请求,返回处理结果。
Django路由层的匹配
普通匹配
普通匹配即静态匹配,匹配指定的字符串,当没有匹配结果时,报404错误。
匹配时不会匹配"?"后传的额外参数。
默认网址以"/"结尾,当首次匹配检测到网址没有以"/"结尾时,会自动进行重定向操作,加上"/"再次匹配。
动态匹配
动态匹配包含两种形式,一种是转换器匹配,另一种是正则匹配。
转换器匹配
转换器匹配就是将网址中两个斜杠之间的字符串转换成指定数据格式,放入请求中发送给后端,在调用相关功能时作为关键字参数传入。使用格式为,<转换器名: 数据命名>。
转换器有五种:
str 匹配除路径分隔符外的任意非空字符串。
int 匹配0或者任意正整数。
slug 匹配任意一个由字母或数字组成的字符串。
uuid 匹配格式化后的UUID。
path 匹配完整的URL路径。
正则匹配 re_path
正则匹配就是在路由层匹配时用正则表达式代替固定的网址。一旦匹配到满足正则的数据就会执行对应功能。
若对正则匹配进行分组,则会将匹配结果作为参数传给后端。正则匹配的分组分为有名分组及无名分组,一条正则表达式中需要统一有名或无名。
有名分组 在分组时为分的组定义对应的名字,在传参时使用关键字传参。
无名分组 在分组时不定义名字,在传参时使用位置传参。
反向解析
由于动态匹配的结果多种多样,而对应的接口可能只有一个,因此需要使用动态解析为多个需要使用相同视图的路由匹配结果指定统一的视图接口。具体使用方法为:
在路由层匹配网址时,为对应视图功能定义指定的名字;
在页面上使用模板语法{% url '功能名' '参数' %};
在后端返回路由时使用 reverse('功能名',args=())