Django基础概念和MVT架构(一)
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()
转载于:https://www.cnblogs.com/Demon-Mx/p/8385318.html
Django基础概念和MVT架构(一)相关推荐
- 【Django 学习笔记】1、基础概念和MVT架构
0x00 Django 简介 Django是Python写的开源Web开发框架,主要目的是做一个简便.快速的开发数据库驱动的网站 Django遵循MVC设计模式,在Django中有个专有名词,叫做MV ...
- Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析
关于Exynos4412 IIC 裸机开发请看 :Exynos4412 裸机开发 -- IIC总线 ,下面回顾下 IIC 基础概念 一.IIC 基础概念 IIC(Inter-Integrated Ci ...
- Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析 (iic驱动框架,i2c驱动框架)...
转载于 : http://blog.csdn.net/zqixiao_09/article/details/50917655 关于Exynos4412 IIC 裸机开发请看 :Exynos4412 裸 ...
- 【云原生|K8s系列第1篇】:K8s的基础概念、组件架构及实战安装
云原生|K8s系列第1篇目录 1.先从K8s不是什么讲起 2.K8s是什么及核心基础概念 2.1 Container容器 2.2 Pod 2.3 Node 2.4 Label 2.5 Annotati ...
- 架构漫谈(二):认识概念是理解架构的基础
原文:架构漫谈(二):认识概念是理解架构的基础 架 构漫谈是由资深架构师王概凯Kevin执笔的系列专栏,专栏将会以Kevin的架构经验为基础,逐步讨论什么是架构.怎样做好架构.软件架构如何落地.如 何 ...
- 商城项目01 _电商系统基本模式、分布式基础概念、微服务架构图、微服务划分图
文章目录 ①. 电商系统基本模式 ②. 分布式基础概念 ③. 微服务架构图详解 ④. 微服务划分图 ①. 电商系统基本模式 ①. B2C模式 就是我们经常看到的供应商直接把商品卖给用户,即" ...
- 谷粒商城基础篇-1.分布式基础概念架构图与功能模块图
一.分布式基础概念 1.微服务: 把一个单独的应用程序开发我i一套小服务,每个小服务运行在自己的进程中,并使用轻量级通信,如http API.这些服务围绕业务能力搭建,并通过完全自动化部署机制独立部署 ...
- 《云计算架构技术与实践》连载(1)1.1 云计算的基础概念与架构
版权所有,未经许可,请勿转载! 1 云计算理念的发展 1.1 云计算的基础概念与架构 过去20年内,全球无线与宽带技术及其商业化应用部署获得了长足的发展 ...
- 我的Blog搭建之旅1——Django基础
我的Blog搭建之旅1--Django基础 文章目录 我的Blog搭建之旅1--Django基础 事先说明 这不是一个Django教程! === 2019.1.29 === 配置 < pytho ...
最新文章
- 在Ubuntu14.04 64位上编译CMake源码操作步骤
- 九眼智能:信息安全是网络发展的关键
- Silverlight 5 RC新特性探索系列:13.Silverlight 5 RC 新增对并行任务库(TPL)的支持
- class12_pack_grid_place 放置位置
- 全网最细Linux之Centos8安装MySQL8.0以上版本,您值得收藏!
- 查询排序_MySQL查询性能优化
- 32 开漏输出 高电平_关于各种IO输出类型详解
- 2.10.PHP7.1 狐教程-【PHP 函数】
- 实用excel软件表格Excel2010/2007完全自学视频教程 vba函数教程
- 数据分析师真实的工作是怎样的,这篇文章带你看他们的职责
- 解决Markdown在线编辑器不能换行的问题
- error: File: XX 520.13 MB, exceeds 100.00 MB以上大文件导致push失败解决方法
- 在godaddy上申请属于自己的域名
- 使用PyTorch Lightning自动训练你的深度神经网络
- C++游戏编程--模拟键盘打字程序
- 数字化转型实例:国家电网
- Java 运算符中 前++ 和后++ 的区别详解
- python爬取京东笔记本标题、品牌、价格、评论数
- 工作流模式每个工作流引擎都会支持多种方式的表单。目前大家讨论到的大概有三种。 动态表单 外置表单 普通表单
- echart 柱状图倒叙、字体设置、颜色渐变的使用