Django的url、视图、模板和模型工作流程

分类: Python  • 发布时间: 2015-12-13 21:40:18  • 浏览量:14049

前面把Django安装完,接下来要做的肯定是打印出hello world啦!

我们现在的项目文件目录结构如下:

urls的配置

django通过urls.py配置文件很好的处理了前端请求的指向,其中使用使用Python的正则表达式可以使匹配变得更灵活。

打开django下面的urls.py文件(文件路径位置:first/first/urls.py):

django安装好,默认的文件内容是这样的:

blob.png

我们现在要实现的是:用户访问http://127.0.0.1:8000/index,会访问到first/article/views.py下面的index函数,函数里面打印出来:hello world!于是我们进行了如下配置:

blob.png

说明: r'^index$'

这是一个使用了python的正则表达式。

字符串有前面加“ r ”是为了防止字符串中出现类似“\t”字符时被转义。

书写视图

由于我们在处理http请求和响应时需要使用Django的HttpResponse模块,所以我们需要导入该模块。所以我们在first/article/views.py中书写如下内容:

blob.png

这时候我们在命令行启动自带的server

python manage.py runserver

然后访问http://127.0.0.1:8000/index,就可以看到打印出了:hello world

这里解释一下流程:当我们访问http://127.0.0.1:8000/index时,Django首先会拿url端口号后面的文件夹路径index到first/first/urls.py文件内进行匹配,匹配后将处理请求转到我们指定的first/article/views.py的index函数处理,该函数响应了请求一段字符串‘hello world! ’。这就完成了一次请求和响应


当然我们前面那次请求和响应还比较简单,很多时候,我们会需要相应给用户一个丰富多彩的页面,下面我们学习一下使用模板:

首先我们在最外层first目录下创建一个templates目录,然后在该目录下创建一个article目录,在article目录下新建list.html,这时我们的文件目录结构是这样的:

blob.png

然后我们要去配置文件中配置一下模板目录路径,配置文件在:first/first/settings.py

blob.png

这个目录可以使用相对目录,参照文件可以选择manage.py。当然也可以使用绝对路径。

配置完模目录,我们去写url配置,文件路径位置:first/first/urls.py

blob.png

这里写完定位到那个文件的的哪个函数,大家一看便知啦,好啦,我们接下来去写函数啦,文件位置:first/article/views.py

blob.png

然后我们在first/templates/article/list.html文件里,写入如下内容:

blob.png

然后访问:http://127.0.0.1:8000/list查看效果

blob.png


当然啦,对于Django来说,对模板支持还是很强大的,而且有多个模块支持,这里就是用了render_to_response而已,像layout,还有一些常用的标签等,这里都不一一说啦,用到的时候直接查文档就行了!


当然没,我们了解了Django的url、视图、模板,已经可以做一些比较漂亮的功能啦,但是,还缺一点,那些网页上的数据我们平时都是保存在数据库里的,用的时候,从数据库里在取出来,那么下面我们就学习一下Django的模型,这里我们以mysql的使用为例,如果我们使用的是python3.x,也许我们在学习之前需要看看这篇文章:centos下安装python3.x+django的mysql驱动,使用python2.x的不用看了,不过首先要保证自己的机器上安装了mysql驱动,下面我们做一些准备:

首先是我们要配置数据库信息(配置文件:first/first/settings.py):

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'first',
        'USER': 'python',
        'PASSWORD': '123456',
        'HOST': '192.168.99.124',
        # 'PORT': '',
    }
}

对于article应用来说,我们要将该应用加入到INSTALLED_APPS中,还是要修改配置文件(文件路径:first/first/settings.py):

1450021149817271.png

注:这里的article指的是我们之前用django-admin.py startapp article命令创建的应用名

其他的犹如admin、auth、session等是系统自带的,如果你不需要,可以直接注释掉,下面是他们的作用介绍

django.contrib.admin —— 管理站点。

django.contrib.auth —— 认证系统。

django.contrib.contenttypes —— 用于内容类型的框架。

django.contrib.sessions —— 会话框架。

django.contrib.messages —— 消息框架。

django.contrib.staticfiles —— 管理静态文件的框架。

好了,准备工作完成,接下来正式开始:

Django 模型是与数据库相关的,与数据库相关的代码一般写在对应应用目录下的models.py文件内(比如我们的article应用,其对应的模型文件应为:first/article/models.py),为了避免直接操作数据库,我们通过创建模型去生成对应的数据库表,如果你之前使用过php的laravel框架,这里应该不会陌生。

我们first/article/models.py中写入如下内容:

blob.png

然后在命令行中,切换到项目的根目录,执行命令:

python manage.py makemigrations

执行成功后,再执行命令:

python manage.py migrate

然后,我们打开数据库,会发现,数据库中多了好几张表,其中有一个article_article表,表有三个字段,id主键,还有一个title字段,char类型,最大长度100,还有一个content字段,text类型

接下来,我们就可以使用Django提供的丰富的API对该数据表进行操作啦,比如:增删改查。至于具体的使用,可以去查看文档,这里说几个常用的例子。

比如我在first/article/models.py中新建个模型:

blob.png

执行完命令,数据库里面会被添加一个article_category表

那么我们要往数据库里添加数据、查询数据,接下来我们在first/article/views.py里面新建个函数:

blob.png

从图种可以看到几个常用的添加和查询的方法,其他的不再多说了,需要的时候,可以细细研读文档:

http://python.usyiyi.cn/django/index.html#the-model-layer


接下来引用一位前辈的博文内容:

前辈博文地址:http://www.cnblogs.com/fnng/p/4373108.html

MTV开发模式                               

了解了django的组成部分之间,我们再来深入的探讨一下django的开发模式。

  MTV 开发模式

  在钻研更多代码之前,让我们先花点时间考虑下 Django 数据驱动 Web 应用的总体设计。 我们在前面章节提到过,Django 的设计鼓励松耦合及对应用程序中不同部分的严格分割。 遵循这个理念的话,要想修改应用的某部分而不影响其它部分就比较容易了。 在视图函数中,我们已经讨论了通过模板系统把业务逻辑和表现逻辑分隔开的重要性。 在数据库层中,我们对数据访问逻辑也应用了同样的理念。 把数据存取逻辑、业务逻辑和表现逻辑组合在一起的概念有时被称为软件架构的 Model-View-Controller(MVC)模式。 在这个模式中, Model 代表数据存取层,View 代表的是系统中选择显示什么和怎么显示的部分,Controller 指的是系统中根据用户输入并视需要访问模型,以决定使用哪个视图的那部分。

  为什么用缩写?

  像 MVC 这样的明确定义模式的主要用于改善开发人员之间的沟通。 比起告诉同事,“让我们采用抽象的数据存取方式,然后单独划分一层来显示数据,并且在中间加上一个控制它的层”,一个通用的说法会让你收益,你只需要说:“我们在这里使用MVC模式吧。”。 Django 紧紧地遵循这种 MVC 模式,可以称得上是一种 MVC 框架。 以下是 Django 中 M、V 和 C 各自的含义:


  M ,数据存取部分,由django数据库层处理,本章要讲述的内容。 

  V ,选择显示哪些数据要显示以及怎样显示的部分,由视图和模板处理。

  C ,根据用户输入委派视图的部分,由 Django 框架根据 URLconf 设置,对给定 URL 调用适当的 Python 函数。

  由于 C 由框架自行处理,而 Django 里更关注的是模型(Model)、模板(Template)和视图(Views), Django 也被称为 MTV 框架 。在 MTV 开发模式中:

 M 代表模型(Model),即数据存取层。 该层处理与数据相关的所有事务: 如何存取、如何验证有效

 T 代表模板(Template),即表现层。 该层处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。

 V 代表视图(View),即业务逻辑层。 该层包含存取模型及调取恰当模板的相关逻辑。 你可以把它看作模型与模板之间的桥梁。

  如果你熟悉其它的 MVC Web开发框架,比方说 Ruby on Rails,你可能会认为 Django 视图是控制器,而Django 模板是视图。 很不幸,这是对 MVC 不同诠释所引起的错误认识。 在 Django 对 MVC 的诠释中,视图用来描述要展现给用户的数据;不是数据 如何展现 ,而且展现 哪些 数据。 相比之下,Ruby on Rails 及一些同类框架提倡控制器负责决定向用户展现哪些数据,而视图则仅决定 如何展现数据,而不是展现 哪些 数据。

  两种诠释中没有哪个更加正确一些。 重要的是要理解底层概念。


文章标签: python, django