02.29 「Django 學習筆記」2、模型

0x00 模型

  • 當前項目的開發, 都是數據驅動的。
  • 使用Django進行數據庫開發的提示 :MVT設計模式中的Model, 專門負責和數據庫交互.對應(models.py)由於Model中內嵌了ORM框架, 所以不需要直接面向數據庫編程.而是定義模型類, 通過模型類和對象完成數據庫表的增刪改查.ORM框架就是把數據庫表的行與相應的對象建立關聯, 互相轉換.使得數據庫的操作面向對象.
  • 使用Django進行數據庫開發的步驟 :定義模型類模型遷移操作數據庫

1、定義模型類

在這之前需要先設計數據庫的表什麼的,這裡就不詳細的說了(主要是我太懶了,手動狗頭),感興趣的可以看本文的參考鏈接,下面直接貼定義模型類的代碼.

<code> # BookManager/Book/models.py from django.db import models ​ class BookInfo(models.Model):  # 定義數據信息類模型     name = models.CharField(max_length=10)  # 設計name屬性      class PeopleInfo(models.Model):  # 定義人物信息類模型     name = models.CharField(max_length=10)     gender = models.BooleanField()     book = models.ForeignKey(BookInfo)/<code>

2、模型遷移

由兩步完成,首先生成遷移文件,根據模型類生成創建表的語句;接下來執行遷移,根據第一步生成的語句在數據庫中創建表。分別由以下兩句完成。

<code> python3 manage.py makemigrations python3 manage.py migrate/<code>

運行結果:

<code> BookManager/ > python3 manage.py makemigrations Traceback (most recent call last):   File "manage.py", line 21, in <module>     main() ………內容太多,此處省略……… TypeError: __init__() missing 1 required positional argument: 'on_delete'/<module>/<code>

在運行第一個命令的時候報錯了,此時只需要修改定義外鍵的那行代碼即可。

<code> # 原來的 book = models.ForeignKey(BookInfo) #修改後 book = models.ForeignKey(BookInfo,on_delete=models.CASCADE)/<code>

發生這個錯誤的原因是由於我看的教程使用的是1.8版本的Django,而我安裝的是3.0,Django在2.0版本後,如果定義外鍵就需要加上on_delete選項了,OK,接下來,繼續運行這兩個代碼。

<code> BookManager/ > python3 manage.py makemigrations Migrations for 'Book':   Book\\migrations\\0001_initial.py     - Create model BookInfo     - Create model PeopleInfo ​ BookManager/ > python3 manage.py migrate Operations to perform:   Apply all migrations: Book, admin, auth, contenttypes, sessions Running migrations:   Applying Book.0001_initial... OK ………內容太多,此處省略………   Applying sessions.0001_initial... OK/<code>

到此,將主目錄下生成的db.sqlite3文件拖拽到Database窗口中即可,如果沒有Database的窗口,可以用Pycharm專業版試試。

「Django 學習筆記」2、模型

0x01 站點管理

  • 站點分為內容發佈和公共訪問兩部分。
  • 使用django站點管理模塊步驟:管理界面本地化創建管理員註冊模型類自定義站點管理界面


1、管理界面本地化

將語言,時間設置為本地的語言時間,大陸使用的簡體中文,時區使用亞洲/上海時區,修改settings.py文件。

ps:為什麼是上海時區,而不是北京時區?可能老外感覺上海才是國際大都市,北京只是二三線城市,畢竟老外對中國的印象都是陸家嘴而不是天安門(道聽途說,不要當真,嘿嘿)

<code> # BookManager/BookManager/settings.py LANGUAGE_CODE = 'zh-Hans' TIME_ZONE = 'Asia/Shanghai'/<code>

2、創建管理員

<code> python3 manage.py createsuperuser/<code>

運行命令

<code> BookManager/ > python3 manage.py createsuperuser 用戶名 (leave blank to use 'dora'): test 電子郵件地址: [email protected] Password: Password (again): Superuser created successfully./<code>

運行服務

<code>BookManager/ > python3 manage.py runserverWatching for file changes with StatReloaderPerforming system checks...System check identified no issues (0 silenced).February 29, 2020 - 20:52:43Django version 3.0.3, using settings 'BookManager.settings'Starting development server at http://127.0.0.1:8000/Quit the server with CTRL-BREAK./<code>

運行之後,在瀏覽器打開 http://127.0.0.1:8000/admin,使用剛才創建的用戶名密碼登陸。

3、註冊模型類

剛打開管理員界面的時候,只能看到認證和授權管理欄,這時候就需要將模型類註冊進去。

修改admin.py代碼

<code># BookManager/Book/admin.pyfrom django.contrib import adminfrom Book.models import BookInfo,PeopleInfoadmin.site.register(BookInfo)admin.site.register(PeopleInfo)/<code>

刷新瀏覽器頁面,即可看到剛添加的兩個模型類。如果頁面無法加載,可以看看是不是服務出現異常,如果出現異常,重新啟動服務即可。

「Django 學習筆記」2、模型

4、自定義站點管理界面

在管理頁面中,隨便添加點數據,之後會發現書籍的名稱都顯示成了BookInfo object

「Django 學習筆記」2、模型

此時,只需要在model.py裡的class裡添加以下內容即可。

<code>def __str__(self):return self.name/<code>

model.py完整的代碼就是這個樣子:

<code># BookManager/Book/models.pyfrom django.db import modelsclass BookInfo(models.Model):  # 定義數據信息類模型name = models.CharField(max_length=10)  # 設計name屬性def __str__(self):return self.nameclass PeopleInfo(models.Model):  # 定義人物信息類模型name = models.CharField(max_length=10)gender = models.BooleanField()book = models.ForeignKey(BookInfo,on_delete=models.CASCADE)def __str__(self):return self.name/<code> 

此時,再刷新頁面,就可以看到顯示正常了,同樣 people info 界面也是正常的了。

「Django 學習筆記」2、模型

但是,這樣顯示還是不夠直觀,所以就需要自定義站點管理界面了,接下來修改admin.py頁面,添加以下語句:

<code>class PeopleInfoAdmin(admin.ModelAdmin):list_display = ['id', 'name', 'gender', 'book']/<code>

admin.py完成的代碼如下:

<code># BookManager/Book/admin.pyfrom django.contrib import adminfrom Book.models import BookInfo, PeopleInfoclass PeopleInfoAdmin(admin.ModelAdmin):list_display = ['id', 'name', 'gender', 'book']admin.site.register(BookInfo)admin.site.register(PeopleInfo, PeopleInfoAdmin)#注意此處添加PeopleInfoAdmin以註冊/<code>

再來刷新一下頁面,就舒服很多了。

「Django 學習筆記」2、模型


分享到:


相關文章: