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调用cmd命令行制作刷博器
Jan 13 Python
用Python创建声明性迷你语言的教程
Apr 13 Python
python动态参数用法实例分析
May 25 Python
基于Python __dict__与dir()的区别详解
Oct 30 Python
详解Python 切片语法
Jun 10 Python
Python button选取本地图片并显示的实例
Jun 13 Python
Django的Modelforms用法简介
Jul 27 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
Oct 12 Python
通过字符串导入 Python 模块的方法详解
Oct 27 Python
python Django框架实现web端分页呈现数据
Oct 31 Python
django使用F方法更新一个对象多个对象字段的实现
Mar 28 Python
python 如何引入协程和原理分析
Nov 30 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获取url的函数代码
2011/08/02 PHP
WordPress中制作导航菜单的PHP核心方法讲解
2015/12/11 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
2018/09/28 PHP
JSON+HTML实现国家省市联动选择效果
2014/05/18 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
2015/04/12 Javascript
JavaScript检测上传文件大小的方法
2015/07/22 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
2016/03/02 Javascript
浅谈如何实现easyui的datebox格式化
2016/06/12 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
JS给swf传参数的实现方法
2016/09/13 Javascript
DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
2016/11/09 Javascript
前端必备插件之纯原生JS的瀑布流插件Macy.js
2017/11/22 Javascript
浅谈Vue Element中Select下拉框选取值的问题
2018/03/01 Javascript
vue.extend实现alert模态框弹窗组件
2018/04/28 Javascript
vue弹窗消息组件的使用方法
2020/09/24 Javascript
vue项目环境变量配置的实现方法
2018/10/12 Javascript
浅谈Vue.js 中的 v-on 事件指令的使用
2018/11/25 Javascript
微信小程序云开发之使用云数据库
2019/05/17 Javascript
LayUI动态设置checkbox不显示的解决方法
2019/09/02 Javascript
改变layer confirm弹窗按钮的颜色方法
2019/09/12 Javascript
uniapp实现横向滚动选择日期
2020/10/21 Javascript
python检测远程udp端口是否打开的方法
2015/03/14 Python
python实现xlsx文件分析详解
2018/01/02 Python
python和shell获取文本内容的方法
2018/06/05 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
2019/06/27 Python
Pycharm小白级简单使用教程
2020/01/08 Python
浅谈Pytorch torch.optim优化器个性化的使用
2020/02/20 Python
python 写函数在一定条件下需要调用自身时的写法说明
2020/06/01 Python
德国户外装备、登山运动和攀岩商店:tapir store
2020/02/12 全球购物
大四优秀党员个人民主评议
2014/09/19 职场文书
学生打架检讨书
2014/10/20 职场文书
2014年旅游局法制宣传日活动总结
2014/11/01 职场文书
2015新年寄语(一句话)
2014/12/08 职场文书
党员自我评价范文2015
2015/03/03 职场文书
html+css 实现简易导航栏功能
2021/04/07 HTML / CSS