python中的django是做什么的

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是什么内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python Django 反向访问器的外键冲突解决

    我有两个继承一个基类的Django模型: - Request - Inquiry - Analysis 请求有两个外键到内置用户模型. create_user = models.ForeignKey(User, related_name='requests_created') assign_user = models.ForeignKey(User, related_name='requests_assigned') 由于某种原因,我得到的错误 "Analysis.assign_user&quo

  • Python Django form 组件动态从数据库取choices数据实例

    app01/models.py: from django.db import models class UserInfo(models.Model): username = models.CharField(max_length=16) password = models.CharField(max_length=16) mobile = models.CharField(max_length=11) class City(models.Model): name = models.CharFie

  • Python Django搭建网站流程图解

    1. 创建Django REST framework工程 1.1手动创建工程文件夹 1.2进去工程文件夹内,执行命令:django-admin startproject web_project创建工程目录 1.3修改,添加目录结构 apps 存放Django的应用libs 存放第三方的库文件settings 存放配置文件的目录,分为开发dev和线上produtils 存放项目自己定义的公共函数或类等docs 用于存放一些说明文档资料 2. 修改配置文件 2.1 将Django工程中的settin

  • 3分钟看懂Python后端必须知道的Django的信号机制

    概念 django自带一套信号机制来帮助我们在框架的不同位置之间传递信息.也就是说,当某一事件发生时,信号系统可以允许一个或多个发送者(senders)将通知或信号(signals)发送给一组接受者(receivers). (感觉就很像Qt的信号与槽机制) 信号系统包含以下三要素: 发送者-信号的发出方 信号-信号本身 接收者-信号的接受者 Django内置了一整套信号,下面是一些比较常用的: Django内置信号 Model signals pre_init # django的modal执行其

  • Python3创建Django项目的几种方法(3种)

    Django是一种基于Python的Web开发框架 一.在命令行中创建Django项目(Windows平台.python3.6) 1.建立虚拟环境(创建一个独立的Python运行环境) 为项目新建一个目录learning_log,在终端切换到这个目录,并创建虚拟环境 这里运行了模块venv,并使用它创建一个名为ll_env的虚拟环境 注意:如果python是较早版本,则先安装virtualenv(pip3 install virtualenv)然后再创建虚拟环境(virtualenv ll_en

  • Python Django中间件使用原理及流程分析

    一.什么是Django中间件 Django 中间件是用来处理Django的请求request和响应response的框架级别的钩子,它是一个轻量,低级别的插件系统,用于全局范围内改变Django的输入,输出.每个中间件组件都负责做一些特定的功能. 说的直白一点是中间件就是帮我们程序员在视图函数执行之前和执行之后都可以一些额外的操作,它是一个自定义的类,类中定义了几个方法,Django框架会在请求的特定时间去执行这些方法. 二.Django中间件的定义规则 1. 自定义中间件的规则 (1)要继承M

  • python中的django是做什么的

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

  • Python中使用django form表单验证的方法

    一. django form表单验证引入 有时时候我们需要使用get,post,put等方式在前台HTML页面提交一些数据到后台处理例 ; <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Form</title> </head> <body> <div> <for

  • Python中的Django基本命令实例详解

    一.新建项目 $django-admin.py  startproject  project_name # 特别是在 windows 上,如果报错,尝试用 django-admin 代替 django-admin.py 试试 注意 project_name 是自己的项目名称,需要为合法的 Python 包名,如不能为 1a 或 a-b. 二.新建APP 要先进入项目目录下,cd project_name 然后执行下面的命令: $ python manage.py startapp app_nam

  • 在python中利用opencv简单做图片比对的方法

    下面代码中利用了两种比对的方法,一 对图片矩阵(m x m)求解特征值,通过比较特征值是否在一定的范围内,判断图片是否相同.二 对图片矩阵(m x m)中1求和,通过比较sum和来比较图片. # -*- coding: utf-8 -*- import cv2 as cv import numpy as np import os file_dir_a='C:\Users\wt\Desktop\data\image1\\' file_dir_b='C:\Users\wt\Desktop\data\

  • python中安装django模块的方法

    网上搜一下对应的版本号,版本号相对应. 安装django有两种方式: 1.pip安装 pip install django 这个方法我用的时候已经报错.貌似访问被阻挡.我一般都用第二种 2.下载压缩包手动安装 在django官网下载tar.gz包,放在python对应目录中解压缩 命令窗口进入压缩包目录后,执行python setup.py install 安装完成后,命令窗口导入django. 可以正常导入且看到版本号即安装成功. 之后就可以创建django项目了.pycharm有免费版和专业

  • python中sys模块是做什么用的

    python中的sys是提供了一系列有关python运行环境的变量和函数的模块,如sys.argv函数实现从程序外部向程序传递参数:sys.platform函数用于获取当前系统平台. sys模块提供了一系列有关Python运行环境的变量和函数. sys模块的常见函数列表 sys.argv: 实现从程序外部向程序传递参数. sys.exit([arg]): 程序中间的退出,arg=0为正常退出. sys.getdefaultencoding(): 获取系统当前编码,一般默认为ascii. sys.

  • python中通过Django捕获所有异常的处理

    目录 概述 Django 统一异常处理 统一异常处理具体设计 自定义异常模块 自定义状态码枚举类 响应信息统一结果的封装 完善统一异常处理逻辑 应用场景 注册校验 源代码 尾语 概述 在项目中统一异常处理,可以防止代码中有未捕获的异常出现.本文介绍如何在 Django 项目中进行统一异常的处理,再结合状态码枚举类对项目异常信息进行日志记录. Django 统一异常处理 在 Django 项目中可以自定义 中间件类 继承 django.middleware.common 下的 Middleware

  • 用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化

    实例的背景说明 假定一个个人信息系统,需要记录系统中各个人的故乡.居住地.以及到过的城市.数据库设计如下: Models.py 内容如下: from django.db import models class Province(models.Model): name = models.CharField(max_length=10) def __unicode__(self): return self.name class City(models.Model): name = models.Ch

  • Python中使用Boolean操作符做真值测试实例

    在Python中,任何类型的对象都可以做真值测试,并且保证返回True或者False. 以下几种值(不论类型)在真值测试中返回False: 1.None 2.False 3.任何类型的数字0,包括0,0.0,0L,0j 4.空的序列(sequence)或者映射(mapping)类型对象 5.对于用户自定义类型的对象,如果其类定义了__nonzero__() 或者 __len__()特殊方法并且返回False或者0 对于最后一条规则,有几点需要说明: 1.如果类没有定义这两个方法中的任何一个,则这

  • 在Python中的Django框架中进行字符串翻译

    使用函数 ugettext() 来指定一个翻译字符串. 作为惯例,使用短别名 _ 来引入这个函数以节省键入时间. 在下面这个例子中,文本 "Welcome to my site" 被标记为待翻译字符串: from django.utils.translation import ugettext as _ def my_view(request): output = _("Welcome to my site.") return HttpResponse(output

随机推荐