Django是Python的web开发框架,遵循MVC设计模式,但是在Django中通常称为MTV,即models-template-views。

image.png

Django 特点

  • 采用ORM方式存取数据库的数据,数据库抽象化,网站设计基本不需要使用SQL查询语言。
  • 日后如需更换数据库,无须修改大量程序代码。
  • 用过MVC架构概念把视图和控制逻辑分开,开发人员不用担心网站通信协议的琐碎细节,而是专心于建立网站的功能。
  • Python语言处理和运算、操作数据库,让网页请求更加客户化,实时响应

Django适合做什么系统呢?博客、CMDB、脚本管理等系统

Django 核心

  • Model(模型):负责业务对象与数据库的对象(ORM)
  • Template(模板):负责把数据展示给用户(前端的东西)
  • View(视图):负责业务逻辑,并在适当的时候会调用Model和Template
  • URL分发器:通过前台请求的url,来分配调到相应的函数操作,类似于网络中的路由表,控制网络的下一跳的地址。

    1)views和URL

    views即业务逻辑层。 该层包含存取模型及调取恰当模板的相关逻辑。 你可以把它看作模型与模板之间的桥梁。
    Django还有一个url分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template

在Django里面views通常是一个的views.py模块,放在对应的包里。views.py里面是具体的逻辑函数,每一个函数对应着一个或多个模版,

为了建立模版与视图的联系,还要有一定的路由机制,于是Django通常在根目录有一个路由程序urls.py。路由由patterns来创建,用正则表达式来描述,极大地提高了路由机制的灵活性。

例如:
#urls.py
from django.conf.urls.defaults import *
urlpatterns = patterns('',('^$',home),)

#views.py
def home(request):
values = request.META.items()
values.sort()
return render_to_response('home.html',{"values":values})

在这里request参数是必须的,但是你可以任意命名,只要符合规范即可,request包含页面的请求信息。render_to_response在django.shortcuts里,所以你还要在前面声明form django.shortcuts import render_to_response。

request.MATE里含有所有的请求界面信息和用户信息。sort()是对list从小到大排序。返回值的意思就是向home.html模版提交一个values变量。urls中patterns中的元组添加了正则的导向规则:除去原地址匹配’^$’者导向home。当然这前提是views.py文件与urls.py在同一个文件夹里面否则就要引用home的命名空间。

2) template


模版在Django中是显示数据的地方,通常为HTML格式,在模版中Django的处理逻辑要写在{% %}中,而要显示的变量要写在{{ }}中。

Django的母板页可以用任何文档充当,前提是要用{% block name %}{% endblock %}声明要填充或替换的块,而使用时只需 {% extends 母版名字 %} 然后调用相应的块就可以了。

3)models


models即数据存取层。 该层处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。

在setting.py 中的database的字典中配置数据库。配置完成后 使用manage.py startapp来创建app在models中编写python代码描述实体映射。比如:

#models.py
class Publisher(models.Model):
name = models.``**CharField**``(max_length = 30)
website = models.URLField()
`<br />def unicode(self):<br /> return self.name<br /> <br />class Meta:<br /> ordering = [‘name’]`

models包含在django.db中,里面封装了模型类的通用接口。CharField()是创建varchar型数据,参数有maxlength,blank,verbosename等。分别表示最大长度、是否为空、显示名称。def__unicode提供了装箱后的默认显示,如果没有设置此函数,默认显示object类型。class Meta规定了模型的默认排序字段。

ORM框架
Django采用ORM方式存取数据库的数据。Python程序中不使用SQL指令存取数据,而是以ORM方式存取数据库的数据。

ORM(Object relational Mapper/Mapping),它是以重面向对象的程序设计技术映射后端数据库。即对数据库的操作方式抽象化为统一用Python的数据操作方式,解决底层数据库兼容性的问题。再简单点说,只管Python的数据操作方式,不需要管底层数据库是Oracle/Mysql/Redis等。

Django 工作流程

image.png

①:客户端输入 url ,向服务器发送一个 HTTP 请求
②:WSGI 是一个能响应请求的接口部件,(初学可以不管它),它把 url 传给 URLs 路由
③:URLs 根据收到的 url,调用对应绑定的 Views, 所以 URLs 相当于导航
④:Views 是业务功能模块,它先从 Models 模块拿需要的数据 Model 是数据模型模块,它通过 ORM 技术实现从类到数据库的映射,这样我们就可以不关心数据库而只对类进行修改
⑤:Views 从Templates 拿需要的页面模板
⑥:Views 根据 Models 和 Templates 的数据,实现自己的功能后把 HttpResponse 发送给负责响应的 WSGI 不难看出,Views 是整个框架的核心,它不仅关联了 Models、Templates,还实现了业务功能
⑦:WSGI 把响应的内容发给客户端(浏览器),用户就能看到想要的网页了