1.1Django简介
Django简介
Django
: 发音为 [ `dʒæŋɡəʊ ]. 名称来源于比利时爵士音乐家 Django ReinhardtPython
语言写的开源web开发框架, 发布于2005年7月.Django
的主要目的是简便、快速的开发数据库驱动的网站.Django
强调代码复用, 多个组件可以很方便的以“插件”
形式服务于整个框架. 有许多功能强大的第三方插件.Django
遵循MVC
设计模式. 但是有一个专有名词 :MVT
MVC介绍
MVC
全拼为Model-View-Controller
MVC
核心思想 : 解耦- 让不同的模块之间降低耦合, 增强代码的可扩展性和可移植性, 实现更好的向后续版本的兼容
- 开发原则 : 高内聚, 低耦合
MVC
解析M
全拼为Model
, 主要封装对数据库层的访问, 内嵌ORM框架, 实现面向对象的编程来操作数据库.V
全拼为View
, 用于封装结果, 内嵌了模板引擎, 实现动态展示数据.C
全拼为Controller
, 用于接收GET或POST请求, 处理业务逻辑, 与Model和View交互, 返回结果.
- 当前主流的开发语言如
Java、PHP、Python、...
中都有MVC
设计模式.MVT介绍
MVT
全拼为Model-View-Template
MVT
核心思想 : 解耦MVT
解析M (模型)
全拼为Model
, 与MVC中的M功能相同, 负责数据处理, 内嵌了ORM框架.V (视图)
全拼为View
, 与MVC中的C功能相同, 接收HttpRequest, 业务处理,返回HttpResponse.T (模板)
全拼为Template
, 与MVC中的V功能相同, 负责封装构造要返回的html, 内嵌了模板引擎.
MVT和MVC
差异就在于黑箭头标识出来的部分.
总结
学习 Django, 重点就是研究
Model-View-Template
三个模块间如何协同工作及各自模块的代码如何编写。补充
设计模式
- 设计模式:是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
- 使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。
- 设计模式使代码编写真正工程化。
- 设计模式是软件工程的基石脉络,如同大厦的结构一样。
高内聚,低耦合
-
耦合性:指软件系统结构中各模块间相互联系紧密程度的一种度量。
- 模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。
- 模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息
-
内聚性:指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。
- 若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。
1.2虚拟环境
为什么要搭建虚拟环境?
-
在开发过程中, 当需要使用
python
的某些工具包/框架时需要联网安装-
比如联网安装Django框架
django1.8.2
版本sudo pip install django==1.8.2
-
- 提示:使用如上命令, 会将
django1.8.2
安装到/usr/local/lib/python版本/dist-packages
路径下 - 问题 : 如果在一台电脑上, 想开发多个不同的项目, 需要用到同一个包的不同版本, 如果使用上面的命令, 在同一个目录下安装或者更新, 新版本会覆盖以前的版本, 其它的项目就无法运行了.
- 解决方案 :
虚拟环境
- 作用 :
虚拟环境
可以搭建独立的python运行环境
, 使得单个项目的运行环境与其它项目互不影响. - 所有的
虚拟环境
都位于/home/
下的隐藏目录.virtualenvs
下
- 作用 :
如何搭建虚拟环境?
-
安装虚拟环境的命令 :
sudo pip install virtualenv sudo pip install virtualenvwrapper
-
创建虚拟环境的命令 :
- 提示:如果不指定python版本,默认安装的是python2的虚拟环境
-
在python2中,创建虚拟环境
mkvirtualenv 虚拟环境名称 例 : mkvirtualenv py_django
-
在python3中,创建虚拟环境
mkvirtualenv -p python3 虚拟环境名称 例 : mkvirtualenv -p python3 py3_django
-
提示 :
- 创建虚拟环境需要联网
- 创建成功后, 会自动工作在这个虚拟环境上
- 工作在虚拟环境上, 提示符最前面会出现 “虚拟环境名称”
如何使用虚拟环境?
-
查看虚拟环境的命令 :
workon 两次tab键
使用虚拟环境的命令 :
workon 虚拟环境名称 例 :使用python2的虚拟环境 workon py_django 例 :使用python3的虚拟环境 workon py3_django
退出虚拟环境的命令 :
deactivate
删除虚拟环境的命令 :
rmvirtualenv 虚拟环境名称 例 :删除虚拟环境py3_django 先退出:deactivate 再删除:rmvirtualenv py3_django
如何在虚拟环境中安装工具包?
-
python3版本下安装django1.8.2的包 :
pip install 包名称 例 : 安装django1.8.2的包 pip install django==1.8.2
-
工具包安装的位置 :
- python2版本下:
~/.virtualenvs/py_django/lib/python2.7/site-packages/
- python3版本下:
~/.virtualenvs/py3_django/lib/python3.5/site-packages
- python2版本下:
-
查看虚拟环境中安装的包 :
pip freeze
-
-
-
1.3创建Django项目
- 在Django项目中, 项目的组织结构为 : 一个项目包含多个应用, 一个应用对应一个业务模块.
- 示例 : 创建项目的名称为
BookManager
, 创建应用名称为Book
, 完成图书信息
的维护. - 提示 : 在当前用户的某个目录下创建项目, 这样不会发生权限问题.
创建项目
-
在
~/Desktop/.../
目录下创建项目BookManager
例 : 在桌面创建项目 cd ~/Desktop/
-
创建项目的命令 :
-
创建好项目就可以使用
PyCharm
打开.django-admin startproject 项目名称 例 :创建项目BookManager django-admin startproject BookManager
-
-
项目结构
BookManager
: 是与项目同名的文件, 内部包含如下项目的配置文件.init.py
: 是表示文件BookManager
可以被当作包使用.settings.py
: 是项目的整体配置文件.urls.py
: 是项目的URL
配置文件.wsgi.py
: 是项目与WSGI
兼容的Web服务器入口.
manage.py
: 是项目运行的入口, 指定配置文件路径.
创建应用
-
在
BookManager
项目中, 创建应用Book
cd BookManager/ python manage.py startapp Book
-
项目结构
admin.py
: 是后台的站点管理注册文件.init.py
: 是表示文件Book
可以被当作包使用.migrations
: 是做模型迁移的.models.py
: 是处理数据的.MVT
中的M
tests.py
: 是做测试用的.views.py
: 是处理业务逻辑的.MVT
中的V
选取并添加对应虚拟环境下的python
-
虚拟环境
py_django
下的pythonwhich python 结果: /home/python/.virtualenvs/py_django/bin/python
-
虚拟环境
py3_django
下的pythonwhich python 结果: /home/python/.virtualenvs/py3_django/bin/python
安装应用
- 安装应用前
安装应用后
测试服务器
- 在开发阶段, 为了能够快速预览到开发的效果,
Django
提供了一个纯Python
编写的轻量级web服务器
,- 仅在开发阶段使用,非正式服务器
- 运行测试服务器的命令 :
python manage.py runserver ip:端口
python manage.py runserver 172.16.21.25:8001 对应: http://172.16.21.25:8001/
-
ip和端口号可以不写, 默认ip为
127.0.0.1
;端口号为8000
.python manage.py runserver 对应: http://127.0.0.1:8000/
-
提示:如果项目的虚拟环境由
py3_django
切换到py_django
时,需要同时切换测试服务器的虚拟环境到py_django
-
输入
http://127.0.0.1:8000/
即可访问.- 刷新网页就可以查看每次代码执行效果
- 如果
增加代码、修改代码、删除代码
服务器会自动重启. -
按
ctrl+c
停止服务器
-
- 在开发阶段, 为了能够快速预览到开发的效果,
1.4模型
- 当前项目的开发, 都是数据驱动的。
-
以下为书籍信息管理的数据关系:书籍和人物是 :一对多关系
-
要先分析出项目中所需要的数据, 然后设计数据库表.
书籍信息表
字段名 字段类型 字段说明 id AutoField 主键 name CharField 书名 id name 1 西游记 2 三国演义 人物信息表
字段名 字段类型 字段说明 id AutoField 主键 name CharField 人名 gender BooleanField 性别 book ForeignKey 外键 id name gender book 1 孙悟空 False 西游记 2 白骨精 True 西游记 3 曹操 False 三国演义 4 貂蝉 True 三国演义 使用Django进行数据库开发的提示 :
MVT
设计模式中的Model
, 专门负责和数据库交互.对应(models.py)
- 由于
Model
中内嵌了ORM框架
, 所以不需要直接面向数据库编程. - 而是定义模型类, 通过
模型类和对象
完成数据库表的增删改查
. ORM框架
就是把数据库表的行与相应的对象建立关联, 互相转换.使得数据库的操作面向对象.
使用Django进行数据库开发的步骤 :
- 定义模型类
- 模型迁移
- 操作数据库
1. 定义模型类
- 根据书籍表结构设计模型类:
- 模型类:BookInfo
- 书籍名称字段:name
- 根据人物表结构设计模型类:
- 模型类:PeopleInfo
- 人物姓名字段:name
- 人物性别字段:gender
- 外键约束:book
- 外键要指定所属的模型类
book = models.ForeignKey(BookInfo)
- 外键要指定所属的模型类
- 说明 :
- 书籍-人物的关系为一对多. 一本书中可以有多个英雄.
- 不需要定义主键字段, 在生成表时会自动添加, 并且值为自增长.
-
根据数据库表的设计
-
在
models.py
中定义模型类,继承自models.Model
from django.db import models # 准备书籍列表信息的模型类 class BookInfo(models.Model): # 创建字段,字段类型... name = models.CharField(max_length=10) # 准备人物列表信息的模型类 class PeopleInfo(models.Model): name = models.CharField(max_length=10) gender = models.BooleanField() # 外键约束:人物属于哪本书 book = models.ForeignKey(BookInfo) # 模型类准备好之后,需要创建和执行迁移==建表
-
2. 模型迁移 (建表)
-
迁移由两步完成 :
- 生成迁移文件:根据模型类生成创建表的语句
python manage.py makemigrations
- 执行迁移:根据第一步生成的语句在数据库中创建表
python manage.py migrate
- 生成迁移文件:根据模型类生成创建表的语句
-
迁移前
-
迁移后
-
提示:默认采用
sqlite3
数据库来存储数据
3. 操作数据库
- 通过
模型类和对象
完成数据库表的增删改查
. - 进入项目的
shell
, 进行简单的增删改查
API
操作.- 按
ctrl+d
或输入quit()
可以退出shell
.python manage.py shell
- 按
-
测试
增删改查
API
操作# 引入应用中的模型类 from Book.models import * # 创建书籍模型对象 book = BookInfo() # 新增记录 book.name = 'xiyouji' # 保存记录 book.save() # 查询记录 BookInfo.objects.all() # 删除记录 : 再查询时,表里数据为空 book.delete() # 创建人物模型对象 people = PeopleInfo() people.name = 'sunwukong' people.gender = True people.book = book people.save() # 外键查询 : 查询书里面保存的人物信息(peopleinfo_set是隐式生成的) book.peopleinfo_set.all() # 退出shell quit()
-
-