引言

我们都知道,Django是一种基于Python的Web开发框架。

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

使用Python开发Web应用,最简单、原始和直接的办法是使用CGI标准,在二十年前这种方式很流行。它是如何做的呢? 以使用Python CGI脚本显示数据库中最新添加的10件商品为例:

import pymysqlprint("Content-Type: text/html")print("products")print("")print("

products

")print("")connection = pymysql.connect(user='user', passwd='pwd', db='product_db')cursor = connection.cursor()cursor.execute("SELECT name FROM products ORDER BY create_date DESC LIMIT 10")for row in cursor.fetchall(): print("%s" % row[0])print("")print("")connection.close()

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

这个流程看起来不错,简单易懂,实际有很多问题和不方便的地方,比如:

  • 如果应用中有多处需要连接数据库会怎样呢?每个独立的CGI脚本,不应该重复编写数据库连接相关的代码。
  • 前端、后端工程师以及数据库管理员集于一身,无法分工配合。设想一个前端设计师,完全没有Python开发经验,但是又需要编写SQL语句的话,会发生什么呢?(我有一句话不知当讲不当讲?)
  • 如果代码被重用到一个复合的环境中会发生什么?
  • 直接将数据库的密码写在代码里吗?
  • 今天是取十个商品,明天我要删除十个商品怎么办?

以上的问题是显而易见的,聪明的程序员在不断的碰到问题和解决问题,探索方案和实践方案中,重复了下面的过程:

  1. 开始编写一个新的Web应用
  2. 开始编写另一个Web应用
  3. 从第一步中总结经验(找出其中通用的代码),并运用在第二步中
  4. 重构代码使得能在第二个应用中使用第一个程序中的通用代码
  5. 重复2-4步若干次
  6. 发明了一个Web框架。

最初的Web开发框架就是这么来的!

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

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

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

Django

Django是一个由Python编写的具有完整架站能力的开源Web框架。使用Django,只要很少的代码,Python的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的Web服务。

Django本身基于MVC模型,即Model(模型)+View(视图)+ Controller(控制器)设计模式,因此天然具有MVC的出色基因:开发快捷、部署方便、可重用性高、维护成本低等。Python加Django是快速开发、设计、部署网站的最佳组合。

Django诞生于2003年,2006年加入了BSD许可证,成为开源的Web框架。Django这一词语是根据比利时的爵士音乐家Django Reinhardt命名的,有希望Django能够优雅地演奏(开发)各种乐曲(Web应用)的美好含义。

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

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

Django具有以下特点:

  • 功能完善、要素齐全:该有的、可以没有的都有,常用的、不常用的工具都用。Django提供了大量的特性和工具,无须你自己定义、组合、增删及修改。但是,在有些人眼里这被认为是‘臃肿’不够灵活,发挥不了程序员的主动能力。(一体机和DIY你更喜欢哪个?^-^)
  • 完善的文档:经过十多年的发展和完善,Django有广泛的实践经验和完善的在线文档(可惜大多数为英文)。开发者遇到问题时可以搜索在线文档寻求解决方案。
  • 强大的数据库访问组件:Django的Model层自带数据库ORM组件,使得开发者无须学习其他数据库访问技术(SQL、pymysql、SQLALchemy等)。当然你也可以不用Django自带的ORM,而是使用其它访问技术,比如SQLALchemy。
  • 灵活的URL映射:Django使用正则表达式管理URL映射,灵活性高。
  • 丰富的Template模板语言:类似jinjia模板语言,不但原生功能丰富,还可以自定义模板标签。
  • 自带免费的后台管理系统:只需要通过简单的几行配置和代码就可以实现一个完整的后台数据管理控制平台。
  • 完整的错误信息提示:在开发调试过程中如果出现运行错误或者异常,Django可以提供非常完整的错误信息帮助定位问题。

MVC及MTV设计模式:

在目前基于Python语言的几十个Web开发框架中,几乎所有的全栈框架都强制或引导开发者使用MVC设计模式。所谓全栈框架,是指除了封装网络和线程操作,还提供HTTP、数据库读写管理、HTML模板引擎等一系列功能的Web框架,比如Django、Tornado和Flask。

MVC设计模式:

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

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

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

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

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

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

MTV设计模式:

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

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

模板(Template):将数据与HTML语言结合起来的引擎

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

Django的MTV模型组织可参考下图所示:

django 业务逻辑写在view里吗?_Python Web框架Django简介相关推荐

  1. Web框架Django使用概览

    Web框架Django使用概览 标签: django python 1 开始一个新项目 django的安装比较简单,在命令行里执行下面的命令. pip install django 为了能使用djan ...

  2. Python Web框架Django学习(二)

    python web框架Django学习(二) 目录:  三.Django创建APP  四.创建登录页面,实现用户交互,后台管理用户(非数据库方式) ========================= ...

  3. 开源web框架django知识总结(二十二)

    开源web框架django知识总结(二十二) 支付 提示: 如果用户选择的支付方式是 "支付宝" ,在点击<去支付>时对接支付宝的支付系统. 支付宝介绍 支付宝开放平台 ...

  4. python搭建django框架,Python之Web框架Django项目搭建全过程

    Python之Web框架Django项目搭建全过程 IDE说明: Win7系统 Python:3.5 Django:1.10 Pymysql:0.7.10 Mysql:5.5 注:可通过pip fre ...

  5. python的Web框架Django运行报错:Invalid HTTP_HOST header: 'xxx.xx.xxx.xxx:8000'. You may need to add 'xxx.xx'

    python的Web框架Django运行报错:Invalid HTTP_HOST header: 'xxx.xx.xxx.xxx:8000'. You may need to add 'xxx.xx' ...

  6. django 业务代码写哪儿_测试人员快速上手Django指南

    引言 作为一个测试人员如果你有以下疑问,那么这篇文章将对你有很大帮助! 网站的业务功能是如何实现的?参考章节:视图配置-实现网站业务功能 服务器如何解析浏览器中的url?参考章节URL配置-提供url ...

  7. 业务逻辑写在存储过程好还是后端好_后端两小时,前端一星期!你只是一个写接口的工程师吗?...

    故事从一名前端工程师的呐喊开始: 我们公司做项目分配任务,一个星期的活,后端呢,两三个小时就弄完了,前端要做界面,做交互,做功能,忙活一个星期还得和设计师对 UI,和需求方对业务逻辑,最后呢,管事的还 ...

  8. web框架django初探

    Web框架介绍 一般会分为两部分:服务器程序和应用程序.服务器程序负责对socket服务器进行封装,并在请求到来时,对请求的各种数据进行整理.应用程序则负责具体的逻辑处理.为了方便应用程序的开发,就出 ...

  9. Python的web框架Django(1):HTTP、简介、静态文件配置、路由系统、视图函数、模板语言、ORM、Ajax、分页器、forms、Cookie、Session、中间件、ModelForm

    1. HTTP协议 1)HTTP请求协议 请求格式 POST(方法) /form/entry(URI) HTTP/1.1(协议版本) HOST:hackr.jp(服务端地址) Connection:k ...

最新文章

  1. 主键由数据库mysql 映射native_Hibernate主键生成策略详解
  2. c++新特性11 (9)智能指针一”_Compressed_pair类“
  3. 【团队管理】改造团队成员?
  4. 旋转散点图_聚类分析的结果如何用散点图展示出来?
  5. 百度贴吧发帖软件_贴吧自动发帖软件
  6. Mac022-brew安装tool
  7. uc3842开关电源电路图_详解6款简单的开关电源电路设计原理图
  8. fastjson 版本_以快标榜的fastjson,快没快多少,倒是漏洞一大堆
  9. Java中使用try-with-resource优雅的关闭io流
  10. C++的RTTI基本原理
  11. C#.NET常见问题(FAQ)-如何改变字符串编码
  12. 详解十三款运维监控工具
  13. (2)机械臂Simscape建模:模型导入MATLAB
  14. python-函数参数和文档
  15. 国内两家3D打印企业入选微软加速器创业加速计划
  16. 安徽赛区-云巡未来-第十一届全国大学生电子商务“创新、创意及创业”挑战赛 赛后总结
  17. Python如何读取STL文件,生成STL文件预览图(缩略图)
  18. 自动化运维神器——Ansible
  19. 最新PHP软文发稿新闻文章发布自助推广平台源码
  20. 大学android五子棋课程目的,基于安卓开发的五子棋课程设计报告..docx

热门文章

  1. 带你1小时掌握Google图像语义分割模型,更有《深度学习》实体书免费送
  2. python将html存为pdf_使用Python将HTML转成PDF
  3. mysql 优化设计库_MySQL 数据库最优化设计原则
  4. java数组复制用for_在JavaScript中复制数组的最快方法 - 切片与'for'循环
  5. java邮件中添加excel_使用java api 创建excel内容并发送邮件
  6. 苹果新手机软件测试,苹果即将发布iOS 14.5正式版,测试工作已进入最后阶段
  7. 2017-2018-1 20155327 《信息安全系统设计基础》第十一周学习总结
  8. 错误 找不到或无法加载主类
  9. HDU 5025:Saving Tang Monk(BFS + 状压)
  10. windows下实现微秒级的延时