1、MVC简介
最初是由施乐公司旗下的帕罗奥多研究中心的一位研究人员给 smalltalk语言发明的一中软件设计模式。
MVC的理念:分工。
MVC的核心思想:解耦。
1.1 Web MVC模型
M全拼为Model,主要封装对数据库层的访问,对数据库中的数据进行增、删、改、查等操作。
V全拼为View,用于封装结果,生成页面展示的html内容。
C全拼为Controller,用于接收请求,处理业务逻辑,与Model和View交互,返回结果。
2、Django简介
Django的主要目的是简便、快速的开发数据库驱动的网站,它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(DoNotRepeatYourself)原则。
Django官网:https://www.djangoproject.com/
Django源码:https://github.com/django/django
Django官方文档:https://docs.djangoproject.com/zh-hans/3.0/
Django框架遵循MVC设计,但有一个专有名词:MVT
2.1 Django的MVT模型
M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。
T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。
MVC和MVT之间的差异就在于黑线黑箭头标识出来的Template部分。
3、环境搭建
3.1 配置虚拟环境
(1)安装虚拟环境:sudo apt install virtualenv
(2)安装虚拟环境扩展包:sudo apt install virtualenvwrapper,安装虚拟环境包装器的目的是使用更加简单的命令来管理虚拟环境。
(3)修改用户家目录下的配置文件.bashrc,添加:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
(4)使用source .bashrc命令使配置文件失效。
3.2 创建虚拟环境
(1)mkvirtualenv -p python3 虚拟环境名称
(2)说明
1)创建成功后,会自动工作在这个虚拟环境上
2)工作在虚拟环境上,提示符最前面会出现"虚拟环境名称"
3)所以的虚拟环境,都位于/home/username/下的隐藏目录.virtualenvs下。
3.3 退出虚拟环境
deactivate #退出虚拟环境
3.4 查看与使用
查看所有虚拟环境的命令:workon 两次tab键
使用虚拟环境的命令:workon 虚拟环境名称
3.5 删除虚拟环境
(1)确保退出虚拟环境:deactivate
(2)删除:rmvitualenv 虚拟环境名
3.5 包操作
(1)通过pip命令安装包:pip install 包名称
sudo pip install 包名称这个命令会将包安装到真实主机上。
(2)查看已安装的python包命令:
pip list
pip freeze
4、创建项目
Django中,项目的组织结构为一个项目包含多个应用,一个应用对应一个业务模块。
4.1 创建Django运行的虚拟环境
创建:mkvirtualenv py3_Django_env
安装Django:pip install django==1.8.2
运行:workon py3_Django_env
4.2 在用户目录下建立文件夹存放文件
cd ~/Desktop/demo/Django
4.3 创建项目
django-admin startproject 项目名称
(1)manage.py是项目管理文件,通过它管理项目
(2)在项目文件夹中,py3_django_test为与项目同名文件,放置配置信息
(3)__init__.py是一个空文件,表示这个目录可以被当成包使用
(4)settings.py是项目的整体配置文件
(5)urls.py是项目的url配置文件
(6)wsgi.py是项目与WSGI兼容的Web服务器入口
4.4 创建应用
使用一个应用开发一个业务模块
# 创建应用名称为booktest,完成图书-英雄的信息维护
python manage.py startapp booktest
(1)__init__.py是一个空文件,表示当前目录booktest可以当作一个python包使用。
(2)tests.py文件用于开发测试用例,在实际开发中会有专门的测试人员来使用。
(3)models.py文件跟数据库操作相关
(4)views.py文件跟接收浏览器请求,进行处理,返回页面相关
(5)admin.py文件跟网站的后台管理相关
(6)migrations文件夹存放模型操纵数据库后的迁移文件
4.5 安装应用
应用创建成功后,需要安装才可以使用,也就是建立应用和项目之间的关联。
在settings.py中INSTALLED_APPS下添加应用的名称就可以完成安装。
4.6 开发服务器
在开发阶段,为了能够快速预览到开发的效果,django提供了一个纯python编写的轻量级web服务器,仅在开发阶段使用。
运行服务器命令:python manage.py runserver ip:port
说明:(1)可以不写ip和端口,默认ip是127.0.0.1,默认端口为8000。
(2)通过浏览器访问
(3)如果增加、修改、删除文件,服务器会自动重启,按ctrl+c停止服务器。
5、模型设计(models.py)
django中内嵌了ORM框架,不需要直接面向数据库编程,而是定义模型类,通过模型类和对象完成数据表的增删改查操作。
使用django进行数据库开发的步骤如下:
(1)在models.py中定义模型类
(2)迁移
(3)通过类和对象完成数据增删改查操作
5.1 ORM框架
O是object,即类对象;R是relation,关系数据库中数据表;M是mapping,映射。
在ORM框架中,它帮我们把类和数据表进行了一个映射,可以让我们通过类和类对象就能操作它所对应的表格中的数据。
ORM框架可以根据我们设计的类自动帮我们生成数据库中的表格,略去自己建表的过程。
5.2 定义模型类
模型类定义在models.py文件中,继承自models.Model类。
说明:不需要定义主键列,在生成时会自动添加,并且值为自动增长。
5.2.1 设计图书类
(1)类名:BookInfo
(2)图书名称:btitle
(3)图书发布日期:bpub_date
5.2.2 模型类的设计
5.2.3 迁移
迁移由两步完成:
(1)生成迁移文件:根据模型类生成创建表的迁移文件
(2)执行迁移:根据生成的迁移文件在数据库中创建表
生成迁移文件命令:python manage.py makemigrations
执行生成迁移文件命令后,会在应用booktest目录下的migrations目录中生成迁移文件。
Django框架根据设计的模型类生成了迁移文件,在迁移文件中可以看到fields列表中每一个元素跟BookInfo类属性名以及属性的类型是一致的。其中id项是Django框架帮我们自动生成的,在创建表的时候id就会作为对应表的主键列,并且主键列自动增长。
执行迁移命令:python manage.py migrate
当执行迁移命令后,Django框架会读取迁移文件自动帮我们在数据库中生成对应的表格。
Django默认采用sqlite3数据库,上图中的db.sqlit3就是Django框架帮我们自动生成的数据库文件。
安装sqlitebrowser查看db.sqlite3文件:sudo apt-get install sqliteborwser
在终端中启动:spliteborwser
spliteborwser界面如下:
打开db.sqlite3文件
上面生成的表的名字叫做booktest_bookinfo,其中booktest是应用的名字,bookinfo是模型类的名字。
数据表的默认名称为:<app_name>_<model_name>
5.3 设计英雄类
5.3.1 英雄类
(1)类名:HeroInfo
(2)英雄姓名:hname
(3)英雄性别:hgender
(4)英雄简介:hcomment
(5)英雄所属图书:hbook
(6)图书-英雄的关系为一对多
生成迁移文件并执行:
BookInfo和HeroInfo类之间具有一对多的关系,一对多的关系应该定义在多的哪个类HeroInfo类中。
hbook=models.ForeignKey('BookInfo')这句代码让BookInfo类和HeroInfo类之间建立了一对多的关系。
其中booktest_heroInfo表中的hbook_id字段是根据HeroInfo类的关系属性hbook生成的,对应着图书表中的主键id。
5.4 数据操作
完成数据表的迁移之后,可以通过进入项目的shell,进行简单的API操作。
进入项目shell的命令:python manage.py shell
退出:ctrl+d或输入quit()
对象的关联操作
6、后台管理
Django能够根据定义的模型类自动地生成管理页面
使用Django的管理模块,需要按照如下步骤操作:
(1)管理界面本地化
(2)创建管理员
(3)注册模型类
(4)自定义管理页面
6.1 管理界面本地化
本地化是将显示的语言、时间等使用本地的。即中国大陆地区使用简体中文,时区使用亚洲/上海。
打开settings.py文件,找到语言编码、时区的设置项,更改内容:
6.2 创建管理员
创建管理员的命令:python manage.py createsuperuser
按提示输入用户名、邮箱、密码
接下来启动服务器:python manage.py runserver
打开浏览器,在地址栏中输入如下地址后回车
输入前面创建的用户名、密码完成登录
6.3 注册模型类
登录后台管理后,默认没有我们创建的应用中定义的模型类,需要在自己应用中的admin.py文件中注册,才可以在后台管理中看到,并进行增删改查操作。
6.4 自定义管理页面
Django提供了自定义管理页面的功能,比如列表页要显示哪些值。
在admin.py中,自定义类,继承自admin.ModelAdmin类:
7、视图
对于django的设计框架MVT,用户在URL中请求的是视图,视图接收请求后进行处理,并将处理的结果返回给请求者。
使用视图时需要进行两步操作:
(1)定义视图函数
(2)配置URLconf
7.1 定义视图
视图是一个python函数,被定义在views.py中。
视图必须有一个参数request,必须返回HttpResponse对象,HttpResponse中的参数内容会显示在浏览器的页面上。
7.2 配置URLconf
请求者在浏览器地址栏中输入url,请求到网站后,获取url信息,然后与编写好的URLconf逐条匹配,如果匹配成功则调用对应的视图函数,如果所有的URLconf都没有匹配成功,则返回404错误。
一条URLconf包括url规则、视图两部分:
(1)url规则使用正则表达式定义。
(2)视图就是在views.py中定义的视图函数。
需要两步完成URLconf配置:
(1)在应用中定义URLconf
(2)包含到项目的URLconf中
7.2.1 在应用下创建urls.py文件,并将视图链接到url请求:
7.2.2 将应用中的urls.py包含到总设置中的urls.py中,让其匹配后可以跳转:
7.3 请求访问
视图和URLconf都定义好了,接下来在浏览器中输入对应的url请求:
http://127.0.0.1:8000/index/
8、 模板
在Django中,将前端的内容定义在模板中,然后再把模板交给视图调用。
8.1 创建模板
在项目中建立和应用booktest同级的目录templates,并创建下级目录booktest存放app中使用的静态文件
8.2 设置查找模板的路径
在settings.py文件中,设置TEMPLATES的DIRS值
8.3 定义模板
在模板中输出变量语法如下,变量可能是从视图中传递过来的,也可能是在模板中定义的:{ { 变量名 } }
在模板中编写代码段语法如下:{ % 代码段 % }
8.4 视图调用模板
调用模板分为三个步骤:
(1)找到模板
(2)定义上下文
(3)渲染模板
浏览器效果:
8.5 视图调用模板简写
视图调用模板都要执行以上三部分,于是Django提供了一个函数render封装了以上代码。
方法render包含3个参数:
(1)第一个参数为request对象
(2)第二个参数为模板文件路径
(3)第三个参数为字典,表示向模板中传递的上下文数据
9、实践项目
9.1 定义视图
9.2 配置url
9.3 定义模板