第四章 Django的MVC框架
4.1 Django的MVC框架简介
MVC是一种软件工程设计方法,它把一个要创建的系统分成三部分,分别是Model数据模块,View视图模块以及Controller控制模块。
Model数据模块:包含系统中的数据内容,通常以数据库的形式来存储,如果这些内容有变动,就会通知View实时更改显示的内容,一些处理数据的程序逻辑也会放在这里。
View视图模块:创建和用户之间的界面,把用户的请求传送给Controller,并按照Controller的要求把来自Model的数据显示出来。
Controller控制模块:派发View传来的用户请求,并按照这些请求处理数据内容以及设置要显示的数据。
好处:大幅地降低系统的复杂性。
Django主要的架构形成了使用Model、Template和View三部分的搭配。这三部分分别对应网站的数据存储model.py、网站的模板文件组(一般放在templates文件夹下的html文件)以及控制如何处理数据程序逻辑的views.py,其中许多控制逻辑也被放在整个Django Framework中,(如urls.py的设置等)。
在此架构下,初学者可以这样看:使用templates来做每个网页的外观框架,送至templates中要被使用的数据尽量是可以直接显示的简单形式。
如果需要对变量进行更复杂的运算,那么这些工作应该放在view.py中完成。
在models.py中定义所有需要用到的数据格式,一般是以数据库的形式来存储的,定义后的Model数据类要把它import到views.py中
主要的操作流程为:用户在浏览器下达request,这个request会先被送到网站服务器中做分派的工作,这个分派的工作指定在urls.py中完成。每一个分派的工作都被设置成views.py中的函数,也就是主要处理数据的逻辑,在views.py中完成。因此所有在urls.py中指派的函数要在urls.py的前面import才行。
在Django MTV架构下的网站开发步骤
- 需求分析,列出本次网站项目所要实现的目标,包括简单的草图,与功能方块图。
- 数据库设计,网站中所有会用到的数据内容、格式、以及各个数据之间的关系。减少开始设计程序后修改Model的工作。
- 了解网站的每一个界面,并设计网页模板(.html)文件
- 生成项目,创建APP
- 创建templates文件夹,并把所有网页模板(.html)文件都放在此文件夹
- 创建static文件夹,并把所有静态文件(图像文件、CSS文件、.JS文件等)都都放在此文件夹中
- 修改setting.py,把相关文件夹设置都加入,也把生成的app名称加入INSTALLEC_APPS序列中
- 编辑models.py创建数据表格
- 编辑views.py先import在models.py中创建的数据模型
- 编辑admin.py把models.py中定义的数据模型加入,并使用admin.site.register注册新增的类,让admin界面可以处理数据库内容
- 编辑views.py设计处理数据的相关模块,输入和输出都通过templates相关的模块操作获取来自于网页的输入数据,以及显示.html文件的网页内容
- 编辑urls.py先import在views.py中定义的模块,创建网址和views.py中定义的模块的对应关系
- 执行
python manage.py makemigration
;python manage.py migrate
;python manage.py runserver
测试网站
4.2 Model简介
首先创建项目:
django-admin startproject mysite
cd mysite/
python manage.py startapp myapp
Model是Django表示数据的模式,以Python的类为基础在models.py中设置数据项与数据格式。基本上每个类对应一个数据库中的数据表。因此,定义每个数据项时,除了数据项名称外,还要定义此项目的格式以及这张表格和其他表格相互之间的关系(即数据关联)。网站的其他数据就可以使用Python语句来操作这些数据内容,而不用关心实际使用的SQL指令。
例:
from django.db import models
class Post(models.Model)
title = models.CharField(max_length=200)
slug = models.CharField(max_length=200)
body = models.TextField()
pub_date = models.DateTimeField(default=timezone.now)
在参数中应该导入models.Model
,然后就可以使用models.* 来指定数据表中的每一个字段的特征。
常用的数据字段类型:
- CharField(max_length)——用来存储较短数据的字符串,通常使用于单行的文字数据
- DateField(auto_now)——每次对象被存储时就自动加入当前日期。日期格式可用于datetime.date
- TextField——长文字格式,一般用在HTML窗体的Textarea输入项目中
首次设置Model的内容要先执行python manage.py makemigrations
以及python manage.py migrate
然后系统就会把我们设置的NewTable数据表建立到数据库中,默认是SQLite,也就是存在于同一文件夹下的db.sqlites文件。
会看到0001_initial.py
以及__init__.py
这两个文件。0001文件就是记录第一次Model设置的数据表内容,因为一开始只有一个设置,所以只有0001这个版本。Django偷偷帮我们加上了一个id字段,设置为主键,并自动增加了数值内容,以便它内部的数据管理。
在admin.py中创建数据表管理界面
在models.py中创建类之后,只要在admin.py中加入这个NewTable,就可以在/admin中管理这张表了(事先要createsuperuser
创建管理员账号和密码)
先创建一个产品类(models.py):
class Product(models.Model):
SIZES = (
('S', 'Smaill'),
('M', 'Medium'),
('L', 'Large'),
)
sku = models.CharField(max_length=5)
name = models.CharField(max_length=2