Django简介

过一遍专二的迷你框架

Web开发

Web开发指的是开发基于B/S架构,通过前后端的配合,将后台服务器的数据在浏览器上展现给前台用户的应用。比如将图书馆的图书数据在浏览器上展示给学生,在基于浏览器的学校系统管理平台上管理学生的数据,监控机房服务器的状态并将结果以图形化的形式展现出来等等。

在早期,没有Web框架的时候,我们是如何创建Web应用的呢? 以使用Python CGI脚本显示数据库中最新添加的10个链接为例:

<span style="background-color:#f8f8f8"><span style="color:#333333">import pymysql
​
print("Content-Type: text/html\n")
print("<html><head><title>图书管理系统</title></head>")
print("<body>")
print("<h1>图书列表</h1>")
print("<ul>")
​
connection = pymysql.connect(user='root', passwd='', db='book')
cursor = connection.cursor()
cursor.execute("SELECT bookname FROM books ORDER BY created_at DESC LIMIT 10")
​
for row in cursor.fetchall():
    print("<li>%s</li>" % row[0])
​
print("</ul>")
print("</body></html>")
​
connection.close()</span></span>

首先,打印Content-Type行等一些HTML的起始标签,然后连接数据库并执行一些查询操作,获取最新的十件图书的相关数据。在遍历这些图书的同时,生成一个图书的HTML列表项,然后输出HTML的结束标签并且关闭数据库连接。将生成的HTML代码保存到一个.cgi文件中,然后上传到网络服务器上,用户通过浏览器即可访问。

缺点:

1)代码无法复用

2)前后端无法分离

Web框架

是将代码集合成的一个产品,供程序员调用。面向对象的代码组织形式而成的库也叫类库。面向过程的代码组织形式而成的库也叫函数库。在函数库中的可直接使用的函数叫库函数。开发者在使用库的时候,只需要使用库的一部分类或函数,然后继续实现自己的功能。

框架是为解决一个(一类)问题而开发的产品,框架用户一般只需要使用框架提供的类或函数,即可实现全部功能。可以说,框架是库的升级版。

Web框架致力于解决一些共同的问题,为Web应用提供通用的架构,让用户专注于网站应用业务逻辑的开发,而无须处理网络应用底层的协议、线程、进程等方面的问题,提高开发者的效率和Web应用程序的质量。

一般Web框架的架构是这样的:

大多数基于Python的web框架,如Django、Tornado、Flask、Webpy都是在这个范围内进行增删裁剪。例如Tornado用的是自己的异步非阻塞“WSGI”网关接口,Flask则只提供了最精简和基本的框架,Django则是直接使用了现成的WSGI,并实现了大部分功能,提供了大量的应用工具。

框架的优势:

1、降低各功能模块之间耦合性,方便变更,更容易重构代码,最大程度实现代码重用

2、提高开发效率

MVC及MTV设计模式

MVC设计模式

MVC设计模式最早在1978年提出,上世纪80年代是程序语言Smalltalk的一种内部架构。后来MVC被其他领域借鉴,成为了软件工程中的一种通用架构模式。MVC把Web框架分为三个基础部分:

模型(Model):用于封装与应用程序的业务逻辑相关的数据及对数据的处理方法,是Web应用程序中用于处理应用程序的数据逻辑的部分,Model只提供功能性的接口,通过这些接口可以获取Model的所有功能。白话说,这个模块就是业务逻辑和数据库的交互层,定义了数据表。

视图(View):负责数据的显示和呈现,是对用户的直接输出。

控制器(Controller):负责从用户端收集用户的输入,可以看成提供View的反向功能。

这三个部分互相独立,但又相互联系,使得改进和升级界面及用户交互流程,在Web开发过程任务分配时,不需要重写业务逻辑及数据访问代码。

MVC在Python之外的语言中也有广泛应用,例如VC++的MFC,Java的Structs及Spring、C#的.NET开发框架,都非常有名。

MTV设计模式

MTV和MVC本质上是一样的。

Django对传统的MVC设计模式进行了修改,将视图分成View模块和Template模块两部分,将动态的逻辑处理与静态的页面展示分离开。而Model采用了ORM技术,将关系型数据库表抽象成面向对象的Python类,将数据库的表操作转换成Python的类操作,避免了编写复杂的SQL语句。

模型(Model):和MVC中的定义一样

模板(Template):将模型数据与HTML页面结合起来的引擎

视图(View):负责实际的业务逻辑实现

通过对MTV与MVC的分析,可以看出MTV 是 MVC 的一种细化,将原来 MVC 中的 V 层拿出来进行分离,视图的显示与如何显示交给 Template 层,而 View 层更专注于实现业务逻辑。

Django

Django是一个由Python编写的具有完整架站能力的开源Web框架,Django诞生于2003年,2006年加入了BSD许可证,成为开源的Web框架。Django这一词语是根据比利时的爵士音乐家Django Reinhardt命名的,含有希望Django能够优雅地演奏(开发)各种乐曲(Web应用)的美好含义,和著名的电影《姜戈的解放》无关。

Django是由美国堪萨斯(Kansas)州Lawrence城中的一个新闻开发小组开发出来的。当时Lawrence Journal-World报纸的程序员Adrian HolovatySimon Willison在用 Python 编写Web新闻网站,他们的 World Online小组制作并维护了当地的几个新闻站点。新闻界独有的特点是迭代迅速,从开发到上线,通常只有几天或几个小时的时间。为了能在截止时间前完成工作,Adrian和Simon不得不开发一种通用的高效的网络应用开发框架,也就是Django。

2005年的夏天,当这个框架开发完成时,它已经用来制作了很多个World Online的站点。不久,小组中的Jacob Kaplan-Moss决定把这个框架发布为一个开源软件。短短数年,Django项目就有了数以万计的用户和贡献者,在世界范围内广泛传播。 原来的World Online的两个开发者(Adrian and Jacob)仍然掌握着Django,但是其发展方向受社区团队的影响更大。

生命周期

Django请求流程如下:

1)用户输入网址,浏览器发起请求;

2)WSGI(服务器网关接口)创建socket服务端,接受请求;

3)中间件处理请求;

4)url路由,根据当前请求的url找到相应的视图函数;

5)进入view,进行业务处理,执行类或者函数,返回字符串;

6)再次通过中间件处理相应;

7)WSGI返回响应;

8)浏览器渲染;

Django的特点:

1)Django是一个全栈Web框架。所谓全栈框架,是指除了封装网络和线程操作,还提供HTTP请求和响应、数据库读写管理、HTML模板渲染等一系列功能的框架。

2)功能完善、要素齐全。Django提供了大量的特性和工具,无须你自己定义、组合、增删及修改。

3)完善的文档。经过长期的发展和完善,Django有广泛的实践经验和完善的在线文档。开发者遇到问题时可以搜索在线文档寻求解决方案。

4)强大的数据库访问API。Django的Model层自带数据库ORM组件,开发者无须学习其他数据库访问技术。

5)灵活的路由系统。Django具备路由转发、正则表达式、命名空间、URL反向解析等功能。

6)丰富的Template模板功能:Django自带类似jinjia的模板语言,不但原生功能丰富,还可以自定义模板标签和过滤器。

7)自带后台管理应用admin:只需要通过简单的几行配置和代码就可以实现一个完整的后台数据管理控制平台。

8)完整的错误信息提示:在开发调试过程中如果出现运行错误或者异常,Django可以提供非常完整的错误信息帮助定位问题。

Django的缺点

1)大包大揽: 对于一些轻量级应用不需要的功能模块Django也包括了,不如Flask轻便。

2)过度封装: 很多类和方法都封装了,直接使用比较简单,但改动起来就比较困难。

3)性能劣势: 与C, C++性能上相比,Django性能偏低,当然这是Python的锅,其它Python框架在流量上来后会有同样问题。

4)模板问题: Django的模板实现了代码和样式完全分离,不允许模板里出现Python代码,灵活度对某些程序员来说可能不够。

参考文档

官方文档:Django 文档 | Django 文档 | Django

菜鸟联盟:Django 教程 | 菜鸟教程

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值