花一点时间过了一下Django的新手教程项目,记录一下整体的思路。注意,本篇不讨论代码具体实现,只是从宏观上了解项目的内容。
一、总览
Django遵循 MVC 设计模式的框架。MVC是Model、View、Controller三个单词的简写,分别代表模型、视图、控制器。Django其实也是一个MTV 的设计模式。MTV是Model、Template、View三个单词的简写,分别代表模型、模版、视图 。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。它们各自的职责如下:
层次 | 职责 |
模型(Model),即数据存取层 | 处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。 |
模板(Template),即表现层 | 处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。 |
视图(View),即业务逻辑层 | 存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。 |
图1 MVC模式
图2 Django的MTV模式
- 模型(model):模型是用来定义数据的,django会根据模型,自动配置数据库表的字段。
- 视图(view):视图就是怎么运用模型来获取数据,一般是一个取数据的函数,它的返回值一般是一个渲染器(render)。视图将数据取出,再传递给render。
- 模板(template):是一个html,在视图返回的时候,会一并交给render,而render的任务就是把所有数据封装成用户浏览器需要的模式。
(一)项目功能
一个笔记网站,允许用户注册、建立笔记、在笔记中增加条目、查看条目。
(二)Django项目中的文件
- manage.py:是一个命令行程序,接受一系列命令,来控制项目
- settings.py:指定项目管理、系统交互的参数
- urls.py:网页URL与请求的映射关系
- __init__.py
(三)创建项目的具体工作
- 在控制台初始化项目、数据库。
- django admin startproject <project_name>,这一步会生成(二)中的四个文件。
- python manage.py migrate, 首次调用会初始化数据库,django支持多种数据库,可通过命令行参数改变数据库软件,默认为SQLite。
- python manage.py runserver, 启动服务器。由于python是动态语言,启动服务器后,无法更改的仅限于数据库表和模型(因为二者是匹配的),而视图、模板仍可以随意修改,无需关闭服务器。
- 创建应用
- python manage.py startapp <app_name>
- 会生成一个以app_name命名的文件夹,里面有admin.py, __init__.py, models.py, tests.py, views.py
- models.py、views.py分别对应模型、视图
2.1 定义模型
模型一般用类表示,定义模型的类要继承django.db中的models.Model,其中定义了很多django的数据类型和方法。
2.2激活模型
模型定义好后,要在项目中激活它,具体做法就是把这个类放到settings.py中的installed_apps中
2.3迁移数据库
启用了新的模型,数据库表需要重新构造。使用python manage.py makemigrations <app_name>生成迁移文件;
使用python manange.py migrate应用迁移。
2.4使用管理网站
django自带一个管理网页,在使用前要先创建管理员。使用python manage.py createsuperuser创建超级管理员。
要实现对数据模型的管理,需要在项目admin.py中添加定义好的模型。
随后,访问域名/admin/就能进入管理页面了。
3.使用Django shell调试项目
输入python manage.py shell 呼出shell。shell是一个python解释器,可以与项目代码进行互动,检查代码是否工作正常。
4.创建网页
创建网页分为三部分,分别是定义视图、定义模板、设置url映射。
4.1 url映射
项目中的url.py整合了项目所有已经启用的url模块,每个应用文件夹下的url.py定义了自己负责的url和views的映射。
django处理url使用一种递归的方式,先通过项目url.py找到模块,再从模块url中找到映射的视图。
常用方法:path、include
4.2 创建视图
视图即返回数据的函数,定义在views.py中。
此函数需要包含一个固定参数request,用来接收django收到的用户请求。
函数的返回值需要一些数据(来自模型),还有一个网页模板,使用render方法将数据和模板合并,就是最后用户得到的网页。
4.3创建模板
django将在模板中填入视图提供的数据,因此模板关心的就是在哪里填入,用什么格式填入。模板实质上是一个html, 但有一部分是django定义的模板语法。
模板实现了html和python程序(主要是视图部分)的分离,你可以更改html页面的设计,而不用重写新的视图方法,这减少了许多工作。