DjangoORM框架
DjangoORM框架
文章目录
- DjangoORM框架
- 一、ORM框架
- 1.ORM简介
- 2.使用django进行数据库开发的步骤如下:
- 3.定义模型类
- 4.迁移
- 5.数据操作
- 5.对象的关联操作
- 6.ORM框架的功能
- 二、后台管理
- 1.简介
- 2.使用步骤
- 3.管理界面本地化
- 4.创建管理员
- 5.注册模型类
- 6.自定义管理页面
模型设计
我们之前操作数据库是通过写sql语句,那么能不能不写sql语句就可以操作数据库呢? 可以,就是通过接下来要给大家讲的ORM框架。
一、ORM框架
1.ORM简介
- O是object,也就类对象的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意思。
- 在ORM框架中,
它帮我们把类和数据表进行了一个映射
,可以让我们通过类和类对象就能操作它所对应的表格中的数据。 - ORM框架还有一个功能,它可以
根据我们设计的类自动帮我们生成数据库中的表格
,省去了我们自己建表的过程。 django中内嵌了ORM框架,不需要直接面向数据库编程,而是定义模型类,通过模型类和对象完成数据表的增删改查操作。
2.使用django进行数据库开发的步骤如下:
1.在models.py中定义模型类
2.迁移
3.通过类和对象完成数据增删改查操作
下面我们以保存图书信息为例来给大家介绍Django中进行数据库开发的整个流程。
3.定义模型类
模型类定义在models.py文件中,继承自models.Model类。
说明:不需要定义主键列,在生成时会自动添加,并且值为自动增长。
设计图书类
图书类:
类名:BookInfo
图书名称:btitle
图书发布日期:bpub_date
模型类的设计
根据设计,在models.py中定义模型类如下:
from django.db import modelsclass BookInfo(models.Model):btitle = models.CharField(max_length=20)bpub_date = models.DateField()
4.迁移
迁移前目录结构如下图:
迁移由两步完成:
1.生成迁移文件:根据模型类生成创建表的迁移文件。
2.执行迁移:根据第一步生成的迁移文件在数据库中创建表。
生成迁移文件命令如下:python manage.py makemigrations
执行生成迁移文件命令后,会在应用booktest目录下的migrations目录中生成迁移文件
。
生成迁移文件后的目录结构:
打开上图中的迁移文件,内容如下:
- Django框架根据我们设计的模型类生成了迁移文件,在
迁移文件中我们可以看到fields列表中每一个元素跟BookInfo类属性名以及属性的类型是一致
的。 同时我们发现多了一个id项,这一项是Django框架帮我们自动生成的,在创建表的时候id就会作为对应表的主键列,并且主键列自动增长
。
执行迁移命令如下:python manage.py migrate
当执行迁移命令后,Django框架会读取迁移文件自动帮我们在数据库中生成对应的表格。
迁移后目录结构如下图:
- Django默认采用sqlite3数据库,上图中的db.sqlite3就是Django框架帮我们自动生成的数据库文件。
- sqlite3是一个很小的数据库,通常用在手机中,它跟mysql一样,我们也可以通过sql语句来操作它。
- 下面使用sqliteman打开db.sqlite3文件进行查看。如果没有安装sqliteman,需要先使用如下命令进行安装。
sudo apt-get install sqliteman
安装成功之后,在终端输入sqliteman命令,敲击回车即可打开软件。
sqliteman界面如下:
按照下图的步骤找到要打开的数据库文件。
点击打开之后,点开Tables找到booktest_bookinfo,可以发现这个表中有三个列,列名跟BookInfo中类属性的名字是一样的。
双击上图中的booktest_bookinfo表,可以在右侧的Full View窗口中查看表格中的数据,这里表中还没有数据。
默认生成的表名称
细心的同学会发现我们上面生成的表的名字叫做booktest_bookinfo,booktest是应用的名字,bookinfo是模型类的名字。
数据表的默认名称为:
<app_name>_<model_name>
例:
booktest_bookinfo
设计英雄类
英雄类:
类名:HeroInfo
英雄姓名:hname
英雄性别:hgender
英雄简介:hcomment
英雄所属图书:hbook
图书-英雄的关系为一对多
打开booktest/models.py
,定义英雄类代码如下:
class HeroInfo(models.Model):hname = models.CharField(max_length=20)hgender = models.BooleanField()hcomment = models.CharField(max_length=100)hbook = models.ForeignKey('BookInfo')
- 这里要说明的是,
BookInfo类和HeroInfo类之间具有一对多的关系
,这个一对多的关系应该定义在多的那个类,也就是HeroInfo类中。 hbook =models.ForeignKey('BookInfo')这句代码就让BookInfo类和HeroInfo类之间建立了一对多的关系。
- 在我们之后迁移生成表的时候,Django框架就会自动帮我们在图书表和英雄表之间建立一个外键关系。
生成迁移文件:python manage.py makemigrations
结果如下图:
项目目录结构:
执行迁移的命令:python manage.py migrate
最后我们可以看到数据库中生成的英雄表如下图:
注意上图中booktest_heroinfo表中有一列hbook_id,这一列名为什么不叫hbook? hbook_id是根据HeroInfo类的关系属性hbook生成的,对应着图书表中的主键id。
5.数据操作
完成数据表的迁移之后,下面就可以通过进入项目的shell,进行简单的API操作。如果需要退出项目,可以使用ctrl+d快捷键或输入quit()。
进入项目shell的命令:python manage.py shell
- 首先引入booktest/models中的类:
from booktest.models import BookInfo,HeroInfo
- 查询所有图书信息:
BookInfo.objects.all()
因为当前并没有数据,所以返回空列表
- 新建图书对象:
b=BookInfo()
b.btitle="射雕英雄传"
from datetime import date
b.bpub_date=date(1991,1,31)
b.save()
再次查询所有图书信息:
BookInfo.objects.all()
查找图书信息并查看值:
b=BookInfo.objects.get(id=1)
b
b.id
b.btitle
b.bpub_date
- 修改图书信息:
b.bpub_date=date(2017,1,1)
b.save()
b.bpub_date
- 删除图书信息:
b.delete()
5.对象的关联操作
对于HeroInfo可以按照上面的方式进行增删改查操作。
- 创建一个BookInfo对象
b=BookInfo()
b.btitle='abc'
b.bpub_date=date(2017,1,1)
b.save()
1)向booktest_bookinfo表中插入一条数据。
b = BookInfo() #定义一个BookInfo类的对象
b.btitle =‘天龙八部’ #定义b对象的属性并赋值
b.bpub_date = date(1990,10,11)
b.save() #才会将数据保存进数据库
2) 查询出booktest_bookinfo表中id为1的数据。
b = BookInfo.objects.get(id=1)
3) 在上一步的基础上改变b对应图书的出版日期。
b.bpub_date = date(1989,10,21)
b.save() #才会更新表格中的数据
4) 紧接上一步,删除b对应的图书的数据。
b.delete() #才会删除
5) 向booktest_heroInfo表中插入一条数据。
h = HeroInfo()
h.hname = ‘郭靖’
h.hgender = False
h.hcomment = ‘降龙十八掌’
b2 = BookInfo.objects.get(id=2)
h.hbook = b2 #给关系属性赋值,英雄对象所属的图书对象
h.save()
6) 查询图书表里面的所有内容。
BookInfo.objects.all()
HeroInfo.objects.all()
- 创建一个HeroInfo对象
h=HeroInfo()
h.hname='a1'
h.hgender=False
h.hcomment='he is a boy'
h.hbook=b
h.save()
图书与英雄是一对多的关系,django中提供了关联的操作方式。
- 获得关联集合:
返回当前book对象的所有hero
。
b.heroinfo_set.all()
6.ORM框架的功能
a)建立模型类和表之间的对应关系,允许我们通过面向对象的方式来操作数据库。
b)根据设计的模型类生成数据库中的表格。
c)通过方便的配置就可以进行数据库的切换。
二、后台管理
1.简介
- 假设我们要设计一个新闻网站,我们需要编写展示给用户的页面,网页上展示的新闻信息是从哪里来的呢?
- 是从数据库中查找到新闻的信息,然后把它展示在页面上。
- 但是我们的网站上的新闻每天都要更新,这就意味着对数据库的增、删、改、查操作,那么我们需要每天写sql语句操作数据库吗? 如果这样的话,是不是非常繁琐
- 所以我们可以设计一个页面,通过对这个页面的操作来实现对新闻数据库的增删改查操作。
- 那么问题来了,老板说我们需要在建立一个新网站,是不是还要设计一个页面来实现对新网站数据库的增删改查操作,但是这样的页面具有一个很大的重复性
- 那有没有一种方法能够让我们很快的生成管理数据库表的页面呢?有,那就是我们接下来要给大家讲的Django的后台管理。
Django能够根据定义的模型类自动地生成管理页面。
2.使用步骤
使用Django的管理模块,需要按照如下步骤操作:
- 1.管理界面本地化
- 2.创建管理员
- 3.注册模型类
- 4.自定义管理页面
3.管理界面本地化
本地化是将显示的语言、时间等使用本地的习惯,这里的本地化就是进行中国化,中国大陆地区使用简体中文,时区使用亚洲/上海时区,注意这里不使用北京时区表示。
打开test1/settings.py文件,找到语言编码、时区的设置项,将内容改为如下:
LANGUAGE_CODE = 'zh-hans' #使用中国语言
TIME_ZONE = 'Asia/Shanghai' #使用中国上海时间
4.创建管理员
创建管理员的命令如下,按提示输入用户名、邮箱、密码。
python manage.py createsuperuser
接下来启动服务器。
python manage.py runserver
打开浏览器,在地址栏中输入如下地址后回车。
http://127.0.0.1:8000/admin/
输入前面创建的用户名、密码完成登录。
登录成功后界面如下,但是并没有图书、英雄的管理入口,接下来进行第三步操作。
5.注册模型类
登录后台管理后,默认没有我们创建的应用中定义的模型类,需要在自己应用中的admin.py文件中注册,才可以在后台管理中看到,并进行增删改查操作。
打开booktest/admin.py文件,编写如下代码:
from django.contrib import admin
from booktest.models import BookInfo,HeroInfoadmin.site.register(BookInfo)
admin.site.register(HeroInfo)
到浏览器中刷新页面,可以看到模型类BookInfo和HeroInfo的管理了。
接下来就可以在该页面上进行增删查改操作了
6.自定义管理页面
在列表页只显示出了BookInfo object,对象的其它属性并没有列出来,查看非常不方便
。 Django提供了自定义管理页面的功能,比如列表页要显示哪些值。
- 打开booktest/admin.py文件,自定义类,继承自admin.ModelAdmin类
属性list_display表示要显示哪些属性
class BookInfoAdmin(admin.ModelAdmin):list_display = ['id', 'btitle', 'bpub_date']
- 修改模型类BookInfo的注册代码如下
admin.site.register(BookInfo, BookInfoAdmin)
刷新BookInfo的列表页,所有属性都显示出来了
- 最终booktest/admin.py文件代码如下
from django.contrib import admin
from booktest.models import BookInfo,HeroInfoclass BookInfoAdmin(admin.ModelAdmin):list_display = ['id', 'btitle', 'bpub_date']
class HeroInfoAdmin(admin.ModelAdmin):list_display = ['id', 'hname','hgender','hcomment']admin.site.register(BookInfo,BookInfoAdmin)
admin.site.register(HeroInfo,HeroInfoAdmin)
DjangoORM框架相关推荐
- django-orm框架了解
orm模型 object relations mapping 对象 关系 映射 功能 通过类来定义表 通过类的属性,来定义字段 通过对象的属性与值来定义一条数据(一行信息) 总结 ORM的作用 把数据 ...
- django-学习索引1908版
知识小结 整编中... 今日笔记 django-模型类关系 - pyhui的python全栈技术博客 - CSDN博客 https://blog.csdn.net/ifubing/article/de ...
- 三分钟了解 Python3 的异步 Web 框架 FastAPI
快速编码,功能完善.从启动到部署,实例详解异步 py3 框架选择 FastAPI 的原因. FastAPI 介绍 FastAPI 与其它 Python-Web 框架的区别 在 FastAPI 之前,P ...
- Django---ORM操作大全
前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MyS ...
- 【GORM框架】ORM介绍、GORM简单连接和高级配置详解
博主简介:努力学习的大一在校计算机专业学生,热爱学习和创作.目前在学习和分享:数据结构.Go,Java等相关知识. 博主主页: @是瑶瑶子啦 所属专栏: GORM框架学习 近期目标:写好专栏的每一篇文 ...
- 【愚公系列】2022年04月 Python教学课程 62-DRF框架介绍
文章目录 一.DRF简介 二.DRF的特点 三.DRF增删改查 一.DRF简介 Django REST framework框架是一个用于构建WebAPl的强大而又灵活的工具.通常简称为DRF框架或RE ...
- ssh(Struts+spring+Hibernate)三大框架整合-简述
ssh(Struts+spring+Hibernate)三大框架配合使用来开发项目,是目前javaee最流行的开发方式,必须掌握: 注意: 为了稳健起见,每加入一个框架,我们就需要测试一下,必须通过才 ...
- Gin 框架学习笔记(03)— 输出响应与渲染
在 Gin 框架中,对 HTTP 请求可以很方便有多种不同形式的响应.比如响应为 JSON . XML 或者是 HTML 等. Context 的以下方法在 Gin 框架中把内容序列化为不同类型写 ...
- Gin 框架学习笔记(02)— 参数自动绑定到结构体
参数绑定模型可以将请求体自动绑定到结构体中,目前支持绑定的请求类型有 JSON .XML .YAML 和标准表单 form数据 foo=bar&boo=baz 等.换句话说,只要定义好结构体, ...
最新文章
- Python:Scrapy Shell
- Visitor 访问者模式
- Larbin 安装遇到的问题(fedora)
- Oracle Study案例之--基于表空间的时间点恢复(TSPITR)
- Nuxt如何发起跨域资源请求?
- access中总计为first_用Access开发生产管理系统
- spring用的很开心的标签(随时增加)
- 大话Fragment管理
- Oracle分区表之创建维护分区表索引的详细步骤
- keras如何在验证集加噪声_Keras从时域、频域处理音频分类问题(带详细注释)...
- Django 分页器 缓存 信号 序列化
- HTML初识——网页设计html基础
- 如何快速制作一副地图
- 《垃圾回收算法手册 自动内存管理的艺术》——引言、标记清扫(笔记)
- XML - 可扩展标记语言 (Extensible Markup Language)
- 一个区块链美女小白的蜕变——我庆幸自己能生活在这个高速时代!
- 东方财富股票接口解析优缺点
- 先锋年度新品T1,真无线通话降噪蓝牙耳机测评
- semantic_slam环境配置
- UML图解简单工厂模式工厂方法模式抽象工厂模式区别
热门文章
- 有n个人围成一圈,按顺序从1到n编号。从第一个人开始报数
- 遍历文件夹下的子文件夹的时候,文件夹名字包含逗号或者空格
- codis集群部署实战
- Juniper ex4200 端口镜像问题
- 6421B Lab10 网络文件和打印服务的配置与故障排除
- 2020ICPC(南京) - Just Another Game of Stones(吉司机线段树+博弈)
- CodeForces - 1370D Odd-Even Subsequence(二分+思维)
- HDU - 3333 Turing Tree(线段树+离线处理)
- POJ - 3259 Wormholes(判断负环)
- windows server 2016安装oracle 10_Weblogic12.1.3.0补丁安装(win server与linux安装步骤介绍)