django学习之一个简单的web框架

1>server端扩展问题

    先看下之前的socket-server端,如下

    

    现在还好,只有两个页面,一个login,一个index,但实际项目中一个网站都是包含成百上千个页面的,若是按照上面的

    写法,我们必须要写成百上千个判断语句,后期维护的工作量,不可想象,

    要改,绝对要改。

2>把上面看起来很乱的代码我们分下层,或者说分下共,明确下每一个代码块负责的事儿,进行代码解耦,如下。

    

    恩,上面这样一写,代码看起来就“灵活”多了,试想,我现在要是想再加一个访问页面,就比如注册页面reg

    如果我已经有了reg.html,那么上面的代码要做的改动就很小了,

    1>在视图层加入对应的path和reg的处理函数

    2>对应编写下reg函数,

    就OK了, 是的, 就两步,其他的都不必考虑,

3>再优化下

    上面的代码已经有一些“框架”的影子了,框架就是把我们需要重复干的事情封装好,让我们不必再位置操心,我们

只需专注于web业务逻辑开发,就行,

    代码肯定是越来越多的,都“挤”在一个文件肯定不行,既然上面已经分出了类似“处理函数”“视图层”等代码块,

    我们干脆把他们移入各自的文件里面,单独存放,再引用,这样更具层次感,减低后期维护难度。

    改装如下:

    先看文件结构

    

    templates里面包含web的静态网页,也就是所有的html文件,也有一种专业叫法----------模板层

    controller.py里面包含所有的处理函数,负责读取模板层的html并返回,也有涉及数据库交互的(

    比如账号密码登陆验证,需从数据库取值对比等等),专业叫法----------------------------控制层

    view.py里面包含所有的路径(path)和处理函数的对应关系。专业叫法-------------------视图层

    server.py就是整个web应用的入口函数了,一般都改名为main.py或者manage.py,恩恩

    这样,整个简单的小框架就显得非常的pythonic了,

    

    

    

    

4>补充

    基于这个简单的框架,我们想扩展功能,需要做啥

    写前端 html,放入 templates里面,再于view.py里面增加路径和处理函数的对应关系记录,再controller.py

    编写对应的处理函数,没啦,就这些,这,,,就是框架带来的便利。

    而且上面拆分过程无形当中引入了Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),

    控制器(C)和视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据

    库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求,

    但是python里面不叫MVC,叫MTV,其实核心思想和理念基本一致,只是这个叫法不同。

    后续的Django其实也就是基于这样一种开发思想而建立的体系,其核心跟上面的那一套简单的框架差不多,只是Django

    在功能方面,在一些特性/细节处理方面要多得多,这,也是我们学习Django的一大主要原因。

    既然引出了Django,就先介绍下Django的MTV模式和流程。

    

    Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同

  1. M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。
  2. T 代表模板 (Template):负责如何把页面展示给用户(html)。
  3. V 代表视图(View): 负责业务逻辑,并在适当时候调用Model和Template。
    除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template,MTV的响应模式如下所示:

    

    用户首先输入URL访问web应用,这时候,首先经过URL控制器(类似函数主入口了,main.py),

    控制器会根据urls.py里面路径和处理函数的对应关系,

    找到view.py(类似上面小框架的controller.py)的真正的处理函数,执行函数

    函数执行过程当中首先肯定要去找templates下面的HTML文件,读取文件并返回给用户,

    其中可能还涉及到数据库操作,去数据库里取数据等等,那就要操作models.py(专门与数据库交互的文件)

    最终返回结果给视图层,再一并返回给用户(例如,账号密码登录,用户输入账号密码,点击登陆,此时post请求发过来,

    server这边先找到对应的处理函数,处理函数发现需要进行数据对比,就去数据库取出账号密码进行对比,若是匹配正确,

    就发送给用户一个登陆成功的页面,若是不匹配,就返回给用户一个登陆失败的页面。-------------这整套流程刚好就是

    用户请求-->URL控制器-->view.py-->models.py-->templates-->返回给用户)


猜你喜欢

转载自blog.csdn.net/huangql517/article/details/80995888
今日推荐