Django简介

阅读: 184636

评论:12

引言

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

那么,什么是Web开发?

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

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

import pymysql

print("Content-Type: text/html\n")

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("

https://www.liujiangblog.com

")

print("")

connection.close()

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

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

网络应用底层的协议、线程、进程如何处理?

如果应用中有多处需要连接数据库会怎样呢?我们会有很多CGI脚本,每个脚本都写一遍链接数据库的代码?

前端、后端工程师以及数据库管理员集于一身,无法分工配合。设想一个前端设计师,完全没有Python开发经验,但是又需要编写SQL语句的话,会发生什么呢?

如果代码被重用到一个复杂的环境中会发生什么?

直接将数据库的密码写在代码里吗?

今天是取十个商品,明天我要删除十个商品怎么办?

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

开始编写第一个Web应用,经过大量地摸索和踩坑,完成了工作。

开始编写新的Web应用

从第一步中总结经验(找出其中通用的代码),并运用在第二步中

重构代码使得能在第二个应用中使用第一个程序中的通用代码

重复2-4步若干次

发明了一个Web框架。

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

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

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

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

Django

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

Django本身基于MVC架构,即Model(模型)+View(视图)+ Controller(控制器)设计模式,因此天然具有MVC的出色基因:开发快捷、部署方便、可重用性高、维护成本低等优点。

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是一个全栈Web框架。所谓全栈框架,是指除了封装网络和线程操作,还提供HTTP请求和响应、数据库读写管理、HTML模板渲染等一系列功能的框架。你可以不太准确地理解为全栈工程师包办了前后端和数据库访问的所有开发工作,整个网站都是一个人搭建的。

功能完善、要素齐全。该有的、可以没有的都有,常用的、不常用的工具都提供。Django提供了大量的特性和工具,无须你自己定义、组合、增删及修改。但是,在有些人眼里这被认为是臃肿不够灵活,发挥不了程序员的能动性。(一体机和DIY你更喜欢哪个?^-^)

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

强大的数据库访问API。Django的Model层自带数据库ORM组件,开发者无须学习其他数据库访问技术(例如SQLALchemy)。当然你也可以使用SQLALchemy,甚至不适用ORM组件。

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

丰富的Template模板功能:Django自带类似jinjia的模板语言,不但原生功能丰富,还可以自定义模板标签和过滤器。并且以类似Python的调用机制和视图默契配合。

自带后台管理应用admin:只需要通过简单的几行配置和代码就可以实现一个完整的后台数据管理控制平台。这是Django最受欢迎的功能。

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

MVC及MTV设计模式:

在目前基于Python语言的几十个Web开发框架中,几乎所有的全栈框架都强制或引导开发者使用MVC设计模式。

MVC设计模式:

最早由Trygve Teenskaug在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):负责实际的业务逻辑实现

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

评论总数: 12

开始打卡,day1

By

多浪的河流   On

2020年11月1日 17:15

回复

这是我找到一篇最详细的教程了

By

小鱼儿与花无缺_101   On

2019年7月16日 16:49

回复

博主这个博客用的什么框架?还是自己写的?左边这个目录看上去比较炫

By

hordechief   On

2018年7月29日 00:43

回复

加上Bootstrap

博主

回复

hordechief

2018年7月29日 21:23

回复

博主,建议左边目录不要跟随右边正文滚动,看着太碍眼了。来阅读只想静静地看的,但左边一滚动,注意力都在左边了

Stodden

回复

博主

2019年9月22日 10:01

回复

好吧,跟着滚动是你们说的,不滚也是你们说的。宝宝也好难啊。

不过,我内心也是偏向固定形式的,哈哈。

博主

回复

Stodden

2019年9月25日 22:01

回复

对, 我也觉得不跟着滚动比较好。

橘子不橙LLL

回复

博主

2020年12月23日 09:17

回复

教程是真好,但左边目录是真不炫,目录不应该随页面滚动。

蔷薇-Nina

回复

hordechief

2019年5月24日 16:52

回复

同意

Ejoy的摄影日志

回复

蔷薇-Nina

2019年7月13日 21:17

回复

臣附议

橘子不橙LLL

回复

蔷薇-Nina

2020年12月23日 09:18

回复

django 2.0 已经不需要该死的 正则表达式了 鼓掌

By

jingwangnet   On

2018年4月24日 16:31

回复

有些时候还是正则表达式用起来更符合需求。

蔷薇-Nina

回复

jingwangnet

2018年6月5日 09:42

回复

python的django介绍_django Django简介 - 刘江的django教程相关推荐

  1. python中response对象的方法_django HttpResponse对象 - 刘江的django教程

    HttpResponse对象 阅读: 32804 评论:3 HttpResponse类定义在django.http模块中. HttpRequest对象是浏览器发送过来的请求数据的封装,HttpResp ...

  2. Django介绍和虚拟环境(django特点、MVC、MVT、Django学习资料)

    MVT流程: 创建Django项目和应用 django-admin startproject name python manager.py startapp name 视图和ULR 视图的请求和响应 ...

  3. python的django介绍_【Python基础知识】Django框架简介

    很多初学Python的小伙伴不知道该从何开始学起,其实零基础学习的话可以先学习一些Python基础知识,等基础打牢之后再去接触更加深入的技术,接下来小编就为大家简单介绍一下有关于 Django框架内容 ...

  4. python django flask介绍_django和flask哪个值得研究学习

    对于初学者来说,找到一个好的框架来学习或者项目开发都是非常有必要的,而当你有一定开发经验后,你应该选择适合当前业务需要的框架.我这里并不想探讨哪个框架好哪个不好,这个永恒的话题就跟探讨"世界 ...

  5. django设置超级管理员_Django的简介与安装

    Django的简介与安装 Django 是用 Python 开发的一个免费开源的 Web 框架,可以用来快速搭建优雅的高性能网站.它采用的是"MVC"的框架模式,即模型 M.视图 ...

  6. Django中间件与python日志模块 介绍

    一.Django中间件 1.1 介绍 Django中的中间件是一个轻量级.底层的插件系统,介于request与response处理之间的一道处理过程(用来处理特定业务的请求和响应).中间件的设计为开发 ...

  7. 【django学习】——Django介绍和实战(开发简易版博客网页)

    目录 0.视频链接 ?1.环境配置 ?2.django基本命令 1)常见命令 ?2)数据库相关的Django命令 ?3.Django项目 1)Django创建项目 ?2)项目目录介绍 3)运行初始化的 ...

  8. Django介绍工程搭建

    Django介绍 1. 简介 Django,发音为[`dʒæŋɡəʊ],是用python语言写的开源web开发框架,并遵循MVC设计.劳伦斯出版集团为了开发以新闻内容为主的网站,而开发出来了这个框架, ...

  9. python学习(三):web网页框架Django,成就python全栈开发

    1.Django安装 框架很完美,组件非常多,但文件太多,过于臃肿(1.. Django是一个高级的Python Web框架,它鼓励快速开发和清洁,务实的设计.· 由经验丰富的开发人员构建,它负责We ...

最新文章

  1. 集成测试_渐增与非渐增模式优缺点
  2. MQ的引言|不同MQ的特点|RabbitMQ安装
  3. logging 日志输出乱码 info_接口自动化测试中logging实际用法
  4. Linux 服务器远程控制三剑客Telnet、SSH 和 VNC 之 VNC
  5. Hive报错:Exception in thread main java.lang.Incom。。。。 Class com.google.common.collect.ImmutableSotil
  6. libco协程库上下文切换原理详解
  7. Quick Dicom batch editor(DICOM标签浏览编辑器)
  8. 聊聊rocketmq的ConsumerManageProcessor
  9. android应用自动打开网页,Android 使用Scheme实现从网页启动APP
  10. django2.0实现数据详情页展示的流程
  11. 排序算法速度测试(插入排序、二分法插入、选择排序、快速排序、堆排序)js实现...
  12. 如何把windowsXP系统主题成Windows7风格windowsxp主题包
  13. python龙旋风图形代码_python – 无法使用gunicorn运行龙卷风应用程序
  14. Python plotly保存图片
  15. 工业机器人什么情况下会出现奇点_机器人奇点是什么?他们怎么会像黑洞一样?...
  16. python中slice是什么类型,python中slice是什么类型_在python中,slice是一个副本还是一个poin...
  17. 记一次 RestfulToolkit-fix 插件下载,导致idea启动报错
  18. 【正式发布】AD9361+ZYNQ/K7软件无线电案例|适配Zynq-7045/7100、Kintex-7评估板
  19. 淘宝,天猫,1688,微店,京东,苏宁,淘特,小红书等30多个平台一键复制商品到拼多多平台(批量上传宝贝详情接口教程)
  20. zTree点击文字勾选复选框

热门文章

  1. DesiredCapabilities内容详解(摘)
  2. 查找占用内存最大进程所在路径命令
  3. JavaScript面向对象:类、方法、属性
  4. JDK源码分析-收藏地址
  5. Ubuntu 下使用SSH 代理
  6. vs2008下的javascript语法检查工具——JSLint.VS
  7. 基于Active Directory的用户验证
  8. python将一行作为字段_Python 变量代入,指定某一行截取输出字段
  9. python简笔画程序_使用python turtle绘制简笔画大白
  10. 微课|玩转Python轻松过二级(2.4节):常用内置函数用法精要2