2020-04-10--Django2

MVC/MVT介绍

MVC的全拼为Model-View-Controller,最早由TrygveReenskaug在1978年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式,是为了将传统的输入(input)、处理(processing)、输出(output)任务运用到图形化用户交互模型中而设计的。随着标准输入输出设备的出现,开发人员只需要将精力集中在业务逻辑的分析与实现上。后来被推荐为Oracle旗下Sun公司Java EE平台的设计模式,并且受到越来越多的使用ColdFusion和PHP的开发者的欢迎。现在虽然不再使用原来的分工方式,但是这种分工的思想被沿用下来,广泛应用于软件工程中,是一种典型并且应用广泛的软件架构模式。后来,MVC的思想被应用在了Web开发方面,被称为Web MVC框架。
MVC框架的核心思想是:解耦,让不同的代码块之间降低耦合,增强代码的可扩展性和可移植性,实现向后兼容。

Web MVC各部分的功能:

  • M全拼为Model,主要封装对数据库层的访问,对数据库中的数据进行增、删、改、查操作。
  • V全拼为View,用于封装结果,生成页面展示的html内容。
  • C全拼为Controller,用于接收请求,处理业务逻辑,与Model和View交互,返回结果。


Django简介

Django,发音为[`dʒæŋɡəʊ],是用python语言写的开源web开发框架,并遵循MVC设计。劳伦斯出版集团为了开发以新闻内容为主的网站,而开发出来了这个框架,于2005年7月在BSD许可证下发布。这个名称来源于比利时的爵士音乐家DjangoReinhardt,他是一个吉普赛人,主要以演奏吉它为主,还演奏过小提琴等。由于Django在近年来的迅速发展,应用越来越广泛,被著名IT开发杂志SDTimes评选为2013SDTimes100,位列"API、库和框架"分类第6位,被认为是该领域的佼佼者。Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(DoNotRepeatYourself)原则。
Django框架遵循MVC设计,并且有一个专有名词:MVT

Django MVT介绍

MVT各部分功能

  • M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
  • V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。
  • T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。
    差异就在于黑线黑箭头标识出来的部分


利用django框架进行数据库开发

我们之前操作数据库是通过写sql语句,那么能不能不写sql语句就可以操作数据库呢? 可以,就是通过接下来要给大家讲的ORM框架

1.ORM框架

O是object,也就类对象的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意思。在ORM框架中,它帮我们把类和数据表进行了一个映射,可以让我们通过类和类对象就能操作它所对应的表格中的数据。ORM框架还有一个功能,它可以根据我们设计的类自动帮我们生成数据库中的表格,省去了我们自己建表的过程。
django中内嵌了ORM框架,不需要直接面向数据库编程,而是定义模型类,通过模型类和对象完成数据表的增删改查操作。
使用django进行数据库开发的步骤如下:

  1. 在models.py中定义模型类
  2. 迁移
  3. 通过类和对象完成数据增删改查操作

1.1在model.py文件下定义模型类

from django.db import models

# Create your models here.
class BookInfo(models.Model):
    #书名,models.CharField 字符串类型,字符串的最大长度为20
    btitle = models.CharField(max_length=20)
    #出版日期
    bpub_date = models.DateField()

定义一个类BookInfo,继承models.Model
属性:

  • btitle :书名
  • bpub_date:出版日期
    说明:不需要定义主键列,在生成时会自动添加,并且值为自动增长。

1.2迁移

1.生成迁移文件
首先打开cmd 输入workon py_django1 然后cd 到 django1文件夹
生成迁移文件命令如下:




2.执行迁移文件



当执行迁移命令后,Django框架会读取迁移文件自动帮我们在数据库中生成对应的表格。

Django默认采用sqlite3数据库,上图中的db.sqlite3就是Django框架帮我们自动生成的数据库文件。 sqlite3是一个很小的数据库,通常用在手机中,它跟mysql一样,我们也可以通过sql语句来操作它。

下面使用pycharm自带的datasource打开db.sqlite3文件进行查看
点击右侧datasource然后新建SQLite数据库




找到项目存放位置中的db.sqlite文件



点击Text Connection,有错误信息,要download sqlite

点击apply,ok
打开db.sqlite文件

刷新



默认生成的表名称
细心的同学会发现我们上面生成的表的名字叫做booktest_bookinfo,booktest是应用的名字,bookinfo是模型类的名字。
数据表的默认名称为
<app_name>_<model_name>
例:
booktest_bookinfo

1.3使用命令行shell操纵数据库(增删改查)

完成数据表的迁移之后,下面就可以通过进入项目的shell,进行简单的API操作。如果需要退出项目,可以使用ctrl+d快捷键或输入quit()。
进入项目shell的命令:
在终端执行以下命令:


#导入模块
from booktest.models import BookInfo
b=BookInfo()    #对象实例化
b.btitle = '神雕侠侣'      #赋值
from datetime import date     #导入时间模块
b.bpub_date = date(1992,1,1)     #赋值
b.save()               #保存

在pycharm中点击刷新


2.1在model.py中在添加一个英雄表

model.py:

from django.db import models

# Create your models here.
class BookInfo(models.Model):
    #书名,models.CharField 字符串类型,字符串的最大长度为20
    btitle = models.CharField(max_length=20)
    #出版日期
    bpub_date = models.DateField()
#迁移
class HeroInfo(models.Model):
    hname = models.CharField(max_length=20)    #姓名
    hgender = models.BooleanField(default=False)   #性别(默认为男性)
    hcomment = models.CharField(max_length=100)    #备注
    #这两个表是一对多关系,设置一对多的外键,参数是对应表的类名
    hbook = models.ForeignKey('BookInfo')

重复上边操作

  1. 在cmd中生成迁移文件
python manage.py makemigrations

生成迁移文件


  1. 执行迁移文件
python manage.py migrate

刷新pycharm中的数据库表,出现了新的表


2.2在python shell中操作数据库表

>>>from booktest.models import BookInfo,HeroInfo
>>>BookInfo.objects.all()  
[<BookInfo: BookInfo object>]
>>> b= BookInfo.objects.get(id=1)  #把id为一的对象赋给b
>>> b          
<BookInfo: BookInfo object>
>>> b.btitle
'神雕侠侣'
>>> b.bpub_date
datetime.date(1992, 1, 1)
>>> b.delete()      #删除b对象中的那内容
>>> b
<BookInfo: BookInfo object>
>>> BookInfo.objects.all()        #查询表中所有内容
[]

删除后,表中没有内容


>>> h = HeroInfo()   #实例化英雄类
>>> h.hname = '扫地僧'   #赋值
>>> h.hcomment = '这是高手'
>>> b
<BookInfo: BookInfo object>
>>> b.save()     #之前删除了,在存一遍
>>> b.btitle = '天龙八部'   #修改
>>> b.save()     #保存

表中title修改了



定义外键

 h.hbook = b #把b对象存入hbook中

HeroInfo表:


image.png
#查询b对象中所有的英雄信息
 b.heroinfo_set.all()  
[<HeroInfo: HeroInfo object>]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容