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.執行遷移:根據第一步生成的遷移文件在數據庫中創建表。
執行生成遷移文件命令后,會在應用booktest目錄下的migrations目錄中生成遷移文件。
生成遷移文件后的目錄結構:
打開上圖中的遷移文件,內容如下:
- Django框架根據我們設計的模型類生成了遷移文件,在遷移文件中我們可以看到fields列表中每一個元素跟BookInfo類屬性名以及屬性的類型是一致的。
- 同時我們發現多了一個id項,這一項是Django框架幫我們自動生成的,在創建表的時候id就會作為對應表的主鍵列,并且主鍵列自動增長。
當執行遷移命令后,Django框架會讀取遷移文件自動幫我們在數據庫中生成對應的表格。
遷移后目錄結構如下圖:
- Django默認采用sqlite3數據庫,上圖中的db.sqlite3就是Django框架幫我們自動生成的數據庫文件。
- sqlite3是一個很小的數據庫,通常用在手機中,它跟mysql一樣,我們也可以通過sql語句來操作它。
- 下面使用sqliteman打開db.sqlite3文件進行查看。如果沒有安裝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,定義英雄類代碼如下:
- 這里要說明的是,BookInfo類和HeroInfo類之間具有一對多的關系,這個一對多的關系應該定義在多的那個類,也就是HeroInfo類中。
- hbook =models.ForeignKey('BookInfo')這句代碼就讓BookInfo類和HeroInfo類之間建立了一對多的關系。
- 在我們之后遷移生成表的時候,Django框架就會自動幫我們在圖書表和英雄表之間建立一個外鍵關系。
結果如下圖:
項目目錄結構:
最后我們可以看到數據庫中生成的英雄表如下圖:
注意上圖中booktest_heroinfo表中有一列hbook_id,這一列名為什么不叫hbook? hbook_id是根據HeroInfo類的關系屬性hbook生成的,對應著圖書表中的主鍵id。
5.數據操作
完成數據表的遷移之后,下面就可以通過進入項目的shell,進行簡單的API操作。如果需要退出項目,可以使用ctrl+d快捷鍵或輸入quit()。
進入項目shell的命令:python manage.py shell- 首先引入booktest/models中的類:
- 查詢所有圖書信息:
因為當前并沒有數據,所以返回空列表
- 新建圖書對象:
再次查詢所有圖書信息:
查找圖書信息并查看值:
- 修改圖書信息:
- 刪除圖書信息:
5.對象的關聯操作
對于HeroInfo可以按照上面的方式進行增刪改查操作。
- 創建一個BookInfo對象
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對象
圖書與英雄是一對多的關系,django中提供了關聯的操作方式。
- 獲得關聯集合:返回當前book對象的所有hero。
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
接下來啟動服務器。
打開瀏覽器,在地址欄中輸入如下地址后回車。
輸入前面創建的用戶名、密碼完成登錄。
登錄成功后界面如下,但是并沒有圖書、英雄的管理入口,接下來進行第三步操作。
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表示要顯示哪些屬性
- 修改模型類BookInfo的注冊代碼如下
刷新BookInfo的列表頁,所有屬性都顯示出來了
- 最終booktest/admin.py文件代碼如下
總結
以上是生活随笔為你收集整理的DjangoORM框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 力扣--- 滑动谜题
- 下一篇: Django视图、URL、模版简介