日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DjangoORM框架

發布時間:2024/4/11 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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框架的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品国产综合区久久久久久 | 在线色 | 婷婷伊人 | 亚洲欧美精品久久 | 在线播放91灌醉迷j高跟美女 | 激情网络 | 男人和女人在床的app | 中文字幕+乱码+中文字幕明步 | 亚洲九九爱 | 成人3d动漫一区二区三区91 | 久久亚洲中文字幕无码 | 久久综合激的五月天 | 天天综合色网 | 999精品在线观看 | 精品一区二区视频在线观看 | 日本美女逼| 精品一区二区三区在线观看 | 精品国产91乱码一区二区三区 | 国产毛片91 | 久久黄色大片 | 亚洲国产精品无码观看久久 | 91蝌蚪| 91精品国自产| 国产美女www | 亚洲欧美另类在线观看 | 亚洲一区中文字幕在线观看 | 无套内谢少妇毛片 | 欧美一级免费看 | 欧美成人一区二区三区四区 | 无码gogo大胆啪啪艺术 | 久草最新视频 | 中文在线字幕免 | 免费黄色一级视频 | 日韩欧美精品一区二区三区 | 亚洲欧洲视频 | 中文字幕在线观看高清 | av免费一区| 在线播放网址 | 国产欧美网站 | 永久中文字幕 | 久久色中文字幕 | 人人妻人人澡人人爽国产一区 | 亚洲精品色午夜无码专区日韩 | 日韩av在线观看免费 | 色老妹 | heyzo北岛玲在线播放 | 国产精品美女主播 | 中文字幕亚洲一区二区三区五十路 | av在线免费不卡 | 神马午夜电影一区二区三区在线观看 | 久久综合高清 | 永久免费av无码网站性色av | 亚洲精品电影网 | 男女羞羞无遮挡 | 91久精品| 福利一区在线观看 | 亚洲裸体视频 | 欧美中文字幕一区 | 国产精品一区二区三区免费在线观看 | 色欲av无码精品一区 | 婷婷日韩| 超碰在线进入 | 日韩在线精品强乱中文字幕 | 四级毛片 | 日韩精品免费一区二区三区 | 欧美一区二区三区爽爽爽 | 久久婷婷色综合 | 一本久久a精品一合区久久久 | 成人合集| 国产热 | 亚洲免费黄色网址 | 国产精品视频一区二区三区在3 | 色播五月激情五月 | 日日操影院 | 欧美日韩在线免费播放 | 不卡免费av | 国产精品九色 | 91久久一区二区 | 91av影院 | 大学生高潮无套内谢视频 | 91欧美日韩国产 | 三级中文字幕在线 | 亚洲AV无码久久精品浪潮 | 久色网 | 999国产精品亚洲77777 | 老太脱裤让老头玩ⅹxxxx | аⅴ资源中文在线天堂 | 男人资源站| 男生女生羞羞网站 | 国产18照片色桃 | 亚洲一区二区综合 | 成人在线视屏 | 天天干天天做 | 国产在线一区二 | 美女a视频 | 香蕉视频成人在线观看 | 黄色香港三级三级三级 | av日韩在线播放 | 一起操网址 |