最新消息:

django上手

django 作者:刘明伟 作者的G+ 2017浏览 0评论

这两天兴趣又来,重新了解Django。之前看过一段时间的入门手册,觉得还是不太好接受Django用的MVC(模板,视图,控制)思想,觉得比较别扭,断断续续地就没再看。

前段时间用python写了个脚本,写完了又想到django,于是再重新捡起来一看,看了一段时间,终于还是理解了django的运作方式,于是也就理解了所采用的MVC。

打算从如下几个方面大致回顾一下这几天的认识。加之对python其实也是一知半解,所以只能写一些粗陋之见。

  1. 什么是MVC
  2. Django的工程结构
  3. django中的MTV结构
  4. Django运行过程

一、 什么是MVC

MVC是model/view/control的首字母缩写,即模型、视图、控制。

MVC是一种软件结构设计架构,注重数据存取处理、请求处理、业务逻辑处理等相分离,这样带来了许多好处。

在MVC设计模式中,模型响应用户请求并返回响应数据,视图负责格式化数据并把它们呈现给用户,业务逻辑和表示层分离,同一个模型可以被不同的视图重用,所以大大提高了代码的可重用性。

MVC的设计模式同时也可以让前段、后台等工作能够分开,好处显而易见。

MVC设计模式本身也是一种合理高效的代码结构,采用这种模式也极大地提高了代码的可维护性。

二、django的工程结构

django工程的文件结构很简单,我通过如何建立一个Django工程及app来简单介绍一下django工程的文件结构。

要开始一个django工程很简单,首先要安装python和django。

1. 安装python

到python官方网站python.org下载安装程序。能在这种技术网站的官网上看到特意用中文写出的“下载”是不是有一种异样的感觉?

2. 安装django

django有几种安装方式,用这种方式比较方便:

django 会安装到Python的package目录下,作为库的形式供Django工程调用。

3. 创建django工程

在想要创建工程的目录,运行下面命令创建一个名字为”hello”的工程:

查看工程目录,会发现目录结构如下:

 

settings.py中可以配置数据库及一些基本的路径等,主要需要修改的还是数据库的配置。如果仅仅作为hello word程序,则默认配置即可。默认配置使用sqlite3,数据库文件会存在工程目录下。

4. 创建app

如果不是用到数据模型的网站,在上面基础上就可以开发了,但是这种情况的需求应该不需要用django就能满足了。实际的开发中,大多还是需要数据库的。

django限定如果要使用数据模型那么必须要建立至少一个app。

app是什么? app是网站具体功能的实现,包括数据处理、业务逻辑、数据展示等等。可以近似地把一个app看做是一个网站的插件。

实际上,规模较小功能点少的网站,一个app即可搞定。

通过下面命令即可创建一个叫做“hello_app”的app:

现在目录变成了这样子:

admin.py用来注册并配置该app在admin应用中的显示,后面再说。

models.py 用来配置该应用的数据模型,django可以用这个模型来直接帮你生成数据库结构。使用如下命令:

views.py用来控制页面元素的显示。理论上,可以将全部前端代码放置到这个文件里面,但是这样会很恐怖,于是模板功能应运而生。views.py中获取数据并处理后,调用模板并渲染之,然后显示。

通过修改工程的urls.py可以配置指定的一个或者一系列url跳转到指定的view函数。

5. 运行

修改完app后,使用

可以调用一个Python的简单的webserver,在本地8080或者其他作为该命令参数的端口号上运行网站。打开浏览器,即可查看你的成果。实际部署的时候不能使用这个webserver。

到这里,应该已经大致交代了django工程的目录结构大致如何,各个文件的大致用途,——至少我这么认为…

下面简述一下django的MTV结构。

三、 django的MTV结构

django的MTV分别指model/template/view,作为数据存取、数据显示、业务逻辑相分离的模块化代码结构。

model定义了数据的存取模型,构建起各种数据的模型,并规定在数据库中存储的数据库结构。

前面提到的是MVC,到了django这里变成了MTV,个人觉得是合理的。

MVC是model/template/view的缩写。django实际上的确是弱化了view和controler的边界,相当于用view集合了controler和view的功能,而还是三个字母念起来比较顺口,把template拖来一用吧…好吧,是我乱说,我也不知道MVC的工程究竟应该长什么样子。不过就概念来说,django的view的确是承担了controler的功能,并部分承担了真正view的功能。

再厉害的编程思想总还是要落实到代码上的,DjangoMVC模式对应的代码结构大致如下:

1. model

model:对应到工程文件中是app下的models.py,在这里实现数据模型的定义。可以定义出本app所需要的数据及数据关系,django会通过这个文件中定义的模型来生成/更新数据库。

2. template

template:Django app所用的模板默认是没有生成目录的,可以自行定义一个目录,并在settings.py中指明。模板的功能一般都很简单也很统一,就是通过替换定义的标签来生成内容,并辅以简单的逻辑控制。显示界面的数据显示逻辑应该尽量由view完成而非模板,当然不少功能也是必须要依靠模板实现的,中间的度需要把握。django的template有一点跟其他cms的模板不同的是,Django的模板有类似面向对象中类的继承的机制,django的模板可以用子模板继承父模板,定义一个base.html,其中指定子模板可以重载的区域,这样带来诸多优点,请自行体会。
说起来,django的确有点像是一个cms而非单纯的一个框架。

3. view

view:通过app下的view.py定义。在这个文件中可以通过Django提供的api来读取数据库中的信息,做一些需要的处理,然后直接输出到html,或者输出到模板中定义的标签,django渲染模板后输出到html供用户浏览。一般来说一个app会有多个视图,不同的url展现不同的视图,那么具体url指向的具体是哪个视图,则在工程目录下的url.py中指定,当用户请求某个url时,django会通过url.py查询url指向的视图并调用。

django的运行过程

至于django如何运行,其实前面说mtv结构的时候,也已经大致交代清楚。
从能看到的html开始说起。

1. url解析

当用户访问一个url时,django会查询url.py中的配置,看看该url应该指向哪个view,如果找到了,则调用对应的view中定义的方法。

2. view调用model

前面找到所需的view方法后,如果不是静态网站,那么一般需要到数据库查询数据,也就是调用model获取数据。如果是静态网站或用不到数据库的动态网站,可以在这里就处理业务、处理显示数据。

3. model获取数据

在view中调用了model查询数据,model类封装了数据的查询方法,以至于查询数据如此简单,让妈妈再也不用担心我的数据查询。model查询到收据后返回给view。

4. view处理数据调用模板

view查询数据时可以辅以查询条件比如通过filter等以获取满足需求的数据。

查询到数据后,开发者对内容进行处理后,将数据通过django的接口传递到模板解析接口,模板中有一些django定义开发者自行定义的block,block中可以使用django的模板语法、标签及自定义标签。模板被调用时,通过解析这些元素,生成最终html发送给浏览器呈现给最终用户。

另外提一下,django基于安全考虑,会将所有的html元素转义,因此可能会导致最终的呈现效果与预期不同,我以后会写篇博客讲这个。

模板可能会被不同的view调用,相应地会有不同的输出。

django的运行过程大致如上。

总结:大致掌握django还是比较容易的,上手较快,不需要太多的python基础。

飞翔吧,少年!

转载请注明:刘明伟的博客 » django上手

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (1)

  1. 不错,继续啊。
    hanghj2013-11-19 21:54 回复