Django学习笔记(03)MTV与MVC架构/2.0的path
1 MTV与MVC的区别
MVC
Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器©和视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求,其示意图如下所示:
django 是MTV架构,本质也是mvc
-M:model,数据库相关操作
-T:template,模板文件(就是mvc的v层)
-V:view,视图(路由
+V
=MVC的控制器)
MTV
Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是值:
MVC架构:主流的web框架都是mvc
-Web应用分为模型
(M
),控制器
(C
)和视图
(V
)
-M:model,数据库相关操作
-C:controler控制器,逻辑相关,逻辑代码
-V:视图,模板文件
除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template,MTV的响应模式如下所示:
通过以上两种设计模式的比较, 我们可以得出 MTV 是 MVC 的一种细化,将原来 MVC 中的 V 层拿出来进行分离,视图的显示与如何显示交给 Template 层,而 View 层更专注于实现业务逻辑。其实在 Django 是有 Controller 层的,只不过它由框架本身来实现,所以我们不用关心它。Django 更关注于M、T 和 V。
2 django请求生命周期
0 近几年python中的几个web框架,sanic,fastapi(异步框架)
1 python中的web服务器都符合wsgi协议
2 web服务器,任何语言都会有一个web服务器,负责把http请求转成这门语言的变量
-python:wsgiref(性能很低),uwsgi(C语言写的),
200多并发量
-java:tomcat,jboss(
300多并发量)
-php:php服务器
## 3 虚拟环境讲解,pycharm配置
1 虚拟环境作用:隔离项目,每个项目有自己依赖的模块和包,不同模块和包的版本就不会相互影响
2 pycharm中配置虚拟环境
4 orm概述
注: orm前面已经写过一篇文章详情请 点击了解
1 orm
:对象关系映射(跟语言无关)
数据库中的表
----》对应程序的一个类
数据库中的一行数据
----》对应程序中的一个对象
2 python中常见orm框架
-django的orm框架
-sqlachemy orm框架
3 java:(扩展),java中写web项目
ssh框架 :spring
+struts(有漏洞)
+hibernate(orm框架) (我的那个年代)
ssm框架:spring
+springmvc
+mybatis(orm框架,可以写原生sql)
springboot:sb框架 ,tomcat内置进去了
springcloud:微服务
4 orm能干的事
-创建表(不能创建数据库,手动创建数据库)
-增加删除表内字段
-增删查改数据
5 django中orm的使用
0 sqlite:也是要给数据库,文件数据库,一个库就是要给文件,不需要单独安装
-咱们现在在用,也要用到关系型数据库,不想装mysql,就可以使用sqlite
-移动开发本地存储数据,存在sqlite中
1 创建个UserInfo表,在models中写一个类
2 表中有字段(类属性),字段有属性,
第一步在models中写要给类
class UserInfo(models
.Model
):
字段属性
--》后面那个对象决定的
,
改字段自增,并且是主键
id = models
.AutoField
(primary_key
=True)
改字段是varchar类型,长度为
32(唯一约束,是否是索引,默认值是,是否可以为空
)
name
= models
.CharField
(max_length
=32)
密码字段
password
=models
.CharField
(max_length
=64)
第二步,把表创建出来
(执行两个命令
)
-python3 manage
.py makemigrations 这条命令会在migrations创建一条记录,数据库变更记录
-python3 manage
.py migrate 把更改同步到数据库
6 django2.0版的path
1 从
2.x以后,建议使用path,是一个准确路径
2 使用正则方式,推荐使用re_path
,用法跟url一模一样
7 path转化器
1 5个内置转换器
'''
str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
int,匹配正整数,包含0。
slug,匹配字母、数字以及横杠、下划线组成的字符串。
uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)
'''
2 例子
-path
('login/<int:year>', views
.login
),
-path
('login/<str:year>', views
.login
),
-path
('login/<path:p>', views
.article
),
3 高级例子
-实现匹配这种路径:http
://127.0.0.1:8000/liuqingzheng
/p
/4444.html
-path
('<str:name>/p/<int:id>.html', views
.article
),
-re_path
(r
'^(?P<name>.*?)/p/(?P<id>\d+).html$', views
.login
),
-url
(r
'^(?P<name>.*?)/p/(?P<id>\d+).html$', views
.login
),
4 转换器可以不可以在re_path中使用?不能!!!!
8 自定义转化器(不重要)
1 写一个类
-regex属性:这里写的正则表达式就能匹配
-to_python方法
-to_url 方法
2 注册这个类
register_converter
(类名
, 'lqz')
3 使用在path中更使用
path
('<lqz:name>/', views
.article
),