Django学习笔记(03)---MTV与MVC架构2.0的path

    科技2022-07-11  81

    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

    12.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), # url在2.x以后不建议使用 4 转换器可以不可以在re_path中使用?不能!!!!

    8 自定义转化器(不重要)

    1 写一个类 -regex属性:这里写的正则表达式就能匹配 -to_python方法 -to_url 方法 2 注册这个类 register_converter(类名, 'lqz') 3 使用在path中更使用 path('<lqz:name>/', views.article),
    Processed: 0.012, SQL: 8