python中的django是做什么的


Posted in Python onJuly 31, 2020

Django是什么?

Django是一个基于Python的Web应用框架。它与Python的另外一个Web 框架 Flask最大的区别是,它奉行 “包含一切” 的哲学。该理念即为:创建 Web 应用所需的通用功能都应该包含到框架中,而不应存在于独立的软件包中。例如,身份验证、 URL 路由、 模板系统、 对象关系映射 (ORM) 和 数据库迁移等功能都已包含在Django 框架中。虽然看上去失去了一些弹性,但是却可以让你在构建网站的时候更加有效率。

由于Django最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的。所以,我们可以发现在使用Django的很多网站里,都是用于作为CMS(内容管理系统)来使用的。

Django的工作方式

Django是一个MTV框架,其架构模板看上去与传统的MVC架构并没有太大的区别。Django将MVC中的视图进一步分解为 Django视图 和 Django模板两个部分,分别决定 “展现哪些数据” 和 “如何展现”,使得Django的模板可以根据需要随时替换,而不仅仅限制于内置的模板。至于MVC控制器部分,由Django框架的URLconf来实现。

具体流程:

浏览器进行HTTP request;

Django根据URL configuration分配至对应的View;

View进行数据库的操作或其它运算;

View层将数据发送到Template进行渲染,并传回HttpResponse内容;

浏览器根据HTTP response显示网页内容。

Django框架的核心包括:一个面向对象的映射器(ORM),用作数据模型(以Python类的形式定义)和关系性数据库间的媒介;一个基于正则表达式的URL分发器;一个视图系统,用于处理请求;以及一个模板系统。除此之外还包含:

一个轻量级的、独立的Web服务器,用于开发和测试。

一个表单序列化及验证系统,用于HTML表单和适于数据库存储的数据之间的转换。

一个缓存框架,并有几种缓存方式可供选择。

中间件支持,允许对请求处理的各个阶段进行干涉。

内置的分发系统允许应用程序中的组件采用预定义的信号进行相互间的通信。

一个序列化系统,能够生成或读取采用XML或JSON表示的Django模型实例。

一个用于扩展模板引擎的能力的系统。

一个可扩展的认证系统,用户登录与权限检查,快速开发用户会话功能。

国际化:内置国际化系统,方便开发出多种语言的网站。

自动化的管理界面:不需要你花大量的工作来创建人员管理和更新内容。

一组产生 RSS 和 Atom 的工具和产生Google 站点地图 (Google Sitemaps)的工具

一套支持轻量级标记语言(Textile和Markdown)的模板库

一套协助创建地理信息系统(GIS)的基础框架

一个灵活的评论系统

防止跨站请求伪造(cross-site request forgery)的工具

优缺点总结

Django的主要目标是使得开发复杂的、数据库驱动的网站变得简单。Django注重组件的重用性和“可插拔性”,敏捷开发和DRY法则(Don't Repeat Yourself)。在Django中Python被普遍使用,甚至包括配置文件和数据模型。

Django优点:

完美的文档,Django近乎完美的官方文档。

全套的解决方案(full-stackframework + batteries included),基本要什么有什么(比如:cache、session、feed、orm、geo、auth),而且全部Django自己造,开发网站应手的工具Django基本都给你做好了,因此开发效率是不用说的。

强大的URL路由配置,Django让你可以设计出非常优雅的URL。

自助管理后台,让你几乎不用写一行代码就拥有一个完整的后台管理界面。

Django的缺点:(源自Django坚持自己造所有的轮子,整个系统相对封闭)

系统紧耦合,如果你觉得Django内置的某项功能不是很好,想用喜欢的第三方库来代替是很难的,比如说的ORM、Template。要在Django里用SQLAlchemy或Mako几乎是不可能,即使打了一些补丁用上了也会让你觉得非常非常别扭。

自带的ORM远不如SQLAlchemy强大,SQLAlchemy是Python世界里事实上的ORM标准,其它框架都支持SQLAlchemy了,唯独Django仍然坚持自己的那一套。

Template功能比较弱,不能插入Python代码,要写复杂一点的逻辑需要另外用Python实现Tag或Filter。

URL配置虽然强大,但全部要手写,高手和初识Django的人配出来的URL会有很大差异。

Django的auth跟其它模块结合紧密,功能也挺强,但做的有点过了,用户的数据库schema都给你定好了,比如很多网站要求email地址唯一,可schema里这个字段的值不是唯一的。

内容扩展:

让我们首先以外行人的话来说明当您的服务器收到网站请求时会发生什么。请求被传递给Django并尝试分析此请求。URL解析程序尝试将URL与模式列表进行匹配。它从上到下执行此匹配。如果它可以找到匹配并将请求传递给视图,这是相关的功能。该函数 view 可以检查是否允许请求。它还会生成响应,然后Django将其发送到用户的Web浏览器。

Django框架的历史

  • Adrian Holovaty和Simon Willison于2003年秋季在Lawrence Journal-World报纸上创建了Django。
  • Django于2005年7月在BSD许可下公开发布; 以吉他手Django Reinhardt命名。
  • 今天,Django是一个开源项目,在世界各地都有贡献者。

到此这篇关于python中的django是做什么的的文章就介绍到这了,更多相关django是什么内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python开发编码规范
Sep 08 Python
Python实现遍历目录的方法【测试可用】
Mar 22 Python
python数据结构之列表和元组的详解
Sep 23 Python
Python中if elif else及缩进的使用简述
May 31 Python
Python中的CSV文件使用"with"语句的方式详解
Oct 16 Python
使用python opencv对目录下图片进行去重的方法
Jan 12 Python
python实现淘宝秒杀脚本
Jun 23 Python
python tkinter基本属性详解
Sep 16 Python
python实现的按要求生成手机号功能示例
Oct 08 Python
Python函数的定义方式与函数参数问题实例分析
Dec 26 Python
如何基于Python实现word文档重新排版
Sep 29 Python
基于python爬取链家二手房信息代码示例
Oct 21 Python
如何基于python把文字图片写入word文档
Jul 31 #Python
django教程如何自学
Jul 31 #Python
Python实现一个优先级队列的方法
Jul 31 #Python
django表单中的按钮获取数据的实例分析
Jul 31 #Python
pycharm中使用request和Pytest进行接口测试的方法
Jul 31 #Python
django创建css文件夹的具体方法
Jul 31 #Python
Selenium之模拟登录铁路12306的示例代码
Jul 31 #Python
You might like
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
2018/04/20 PHP
制作特殊字的脚本
2006/06/26 Javascript
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
Javascript中正则表达式的全局匹配模式分析
2011/04/26 Javascript
jquery中dom操作和事件的实例学习-表单验证
2011/11/30 Javascript
jQuery插件实现屏蔽单个元素使用户无法点击
2013/04/12 Javascript
IE的事件传递-event.cancelBubble示例介绍
2014/01/12 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
jquery ui resize 中border-box的bug修正
2015/04/26 Javascript
JavaScript高级程序设计(第三版)学习笔记1~5章
2016/03/11 Javascript
javascript实现粘贴qq截图功能(clipboardData)
2016/05/29 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
2016/12/09 Javascript
基于jQuery实现滚动刷新效果
2017/01/09 Javascript
原生js实现下拉框功能(支持键盘事件)
2017/01/13 Javascript
JavaScript使用Ajax上传文件的示例代码
2017/08/10 Javascript
Bootstrap框架建立树形菜单(Tree)的实例代码
2017/10/30 Javascript
微信小程序用户信息encryptedData详解
2018/08/24 Javascript
JavaScript创建对象的四种常用模式实例分析
2019/01/11 Javascript
JS使用栈判断给定字符串是否是回文算法示例
2019/03/04 Javascript
JS对日期操作封装代码实例
2019/11/08 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
2019/12/04 Javascript
[01:01:35]Optic vs paiN 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[33:09]完美世界DOTA2联赛循环赛 Forest vs DM BO2第二场 10.29
2020/10/29 DOTA
利用python-pypcap抓取带VLAN标签的数据包方法
2019/07/23 Python
python dumps和loads区别详解
2020/02/04 Python
PyQT5速成教程之Qt Designer介绍与入门
2020/11/02 Python
python 基于UDP协议套接字通信的实现
2021/01/22 Python
css3编写浏览器背景渐变背景色的方法
2018/03/05 HTML / CSS
将SVG图引入到HTML页面的实现
2019/09/20 HTML / CSS
美国最大的在线寄售和旧货店:Swap.com
2018/08/27 全球购物
中专自我鉴定范文
2013/10/16 职场文书
幼儿园大班开学教师寄语
2014/04/03 职场文书
安全环保标语
2014/06/09 职场文书
加班费申请报告
2015/05/15 职场文书
教你怎么用Python selenium操作浏览器对象的基础API
2021/06/23 Python