Django(part31)--admin后台数据库管理
學習筆記,僅供參考
文章目錄
- admin后臺數據庫管理
 - 使用步驟
 - 自定義后臺管理數據表
 - 配置步驟
 
- 模型管理器類
 - 模型管理器的使用方法
 - ModelAdmin模型管理器類中的高級管理功能
 
- 數據庫表管理
 - 修改模型類字段的顯示名字
 - 通過Meta內嵌類定義模型類的屬性及展現形式
 
admin后臺數據庫管理
django 提供了后臺管理數據庫的接口admin,我們可以在開發的測試階段使用。django 會搜集所有已注冊的模型類,為這些模型類提拱數據管理界面,供開發者使用。
在開發階段,我們使用admin后臺數據庫管理界面進行調試將非常的方便。
使用步驟
- 第一步:創建后臺管理賬號
 
創建管理員帳號,并根據提示完成注冊:
F:\MyStudio\PythonStudio\goatbishop.project01\Django\mywebsite_db>python manage.py createsuperuser Username (leave blank to use 'goatbishop'): darkgoat Email address: goatbishop@gmail.com Password: Password (again): Superuser created successfully.我們需要在Username處輸入用戶名,在Email address處輸入郵箱,在Password處輸入密碼(密碼要復雜些,否則會提示密碼太簡單),在**Password (again)**處再次輸入相同的密碼(Django為了防止我們第一遍時輸入錯誤)
- 第二步:開啟服務器
 
- 用注冊的帳號登陸后臺管理界面
 
后臺管理的登錄地址:http://127.0.0.1:8000/admin
我們向http://127.0.0.1:8000/admin發起請求:
輸入用戶名和密碼,點擊Log in,得到如下頁面:
我們點開Users:
我們看到,這里有一張表,表里有一條記錄,這張表對應著我們mywebdb數據庫中的auth_user數據表:
mysql> select id,username,email from auth_user; +----+----------+----------------------+ | id | username | email | +----+----------+----------------------+ | 1 | darkgoat | goatbishop@gmail.com | +----+----------+----------------------+ 1 row in set (0.00 sec)我們點開darkgoat,填入姓和名:
點擊保存,并查看auth_user數據表:
mysql> select username, first_name, last_name from auth_user; +----------+------------+-----------+ | username | first_name | last_name | +----------+------------+-----------+ | darkgoat | 揚 | 桂 | +----------+------------+-----------+ 1 row in set (0.00 sec)更改成功!
自定義后臺管理數據表
若想要自己定義的模型類也能在 /admin 后臺管理界中顯示和管理,需要將自己的類注冊到后臺管理界面,添加自己定義模型類的后臺管理數據表的,需要用admin.site.register(自定義模型類) 方法進行注冊
配置步驟
- 在應用app中的admin.py中導入注冊要管理的模型models類
 
我們打開bookstore應用的admin.py,導入模型類:
from . import models- 調用 admin.site.register 方法進行注冊
 
現在,我們回到http://127.0.0.1:8000/admin/后臺管理界面:
界面中多了一個Books,我們點進去看看:
我們看到5本書,這些記錄都是我們之前手動添加到數據庫的。
現在,我們點進去第一個記錄:
這個界面是Django通過我們的模型類,自動幫我們生成的。在這個界面中,我們可以對記錄進行修改或刪除。
現在,我們對這條記錄做出如下修改,并點擊保存:
回到http://127.0.0.1:8000/admin/bookstore/book/:
我們再對Author進行注冊,并刷新admin數據庫管理界面:
再點擊Authors:
我們發現,這里是一堆Author object(#),而不像Books界面中顯示的那么直觀,利于我們進行后續的判斷,這是因為我們在Book模型類中對__str__方法進行了重寫,現在,我們也對Author模型類的__str__方法進行重寫。
models.py
class Author(models.Model):name = models.CharField("姓名", max_length = 30, null = False, unique = True, db_index = True)age = models.IntegerField("年齡, ", null = False,default = 1)email = models.EmailField("郵箱", null = True)def __str__(self):string = "姓名:{}, 年齡:{}".format(self.name, self.age) return string記得更改過models.py文件后要進行遷移操作。
我們再刷新一下界面:
very well
模型管理器類
模型管理器類可以用后臺管理界面添加新功能。后臺管理器類須繼承自 django.contrib.admin 里的 ModelAdmin 類
模型管理器的使用方法
- 在 <應用app>/admin.py 里定義模型管理器類
 
- 在<應用app>/admin.py 里注冊管理器類與模型類關聯
 
ModelAdmin模型管理器類中的高級管理功能
| list_display | 控制哪些字段會顯示在Admin的修改列表頁面中 | 
| list_display_links | 控制list_display中的字段是否應該鏈接到對象的“更改”頁面 | 
| list_filter | 設置激活Admin修改列表頁面右側欄中的過濾器 | 
| search_fields | 設置啟用Admin更改列表頁面上的搜索框 | 
| list_editable | 設置在更改列表頁面上對某字段直接進行編輯修改 | 
其它參見https://docs.djangoproject.com/en/1.11/ref/contrib/admin/
- 舉個例子
 
我們將Book管理器類與Book模型類關聯起來,并在更改列表頁面中添加一些高級功能。
bookstore應用下的admin.py文件:
from django.contrib import admin from . import models # Register your models here.class Book_Manager(admin.ModelAdmin):list_display = ['title', 'pub','exfacPrice', 'price']list_filter = ['pub']admin.site.register(models.Author) admin.site.register(models.Book, Book_Manager)向Book更改列表頁面http://127.0.0.1:8000/admin/bookstore/book/發起請求:
數據庫表管理
修改模型類字段的顯示名字
在模型類中,各字段的第一個參數為verbose_name,此字段的值會在后臺數據庫管理頁面顯示,比如我們的Book模型類是這樣定義的:
class Book(models.Model):title = models.CharField("書名", max_length = 30)pub = models.CharField("出版社名", max_length = 50,null = True)exfacPrice = models.DecimalField("出廠價", max_digits = 6, decimal_places = 2,default = 0)price = models.DecimalField("售價", max_digits = 6, decimal_places = 2,default = 0)def __str__(self):string = "書名:%s, 出版社:%s" % (self.title, self.pub) return string我們查看一下后臺數據庫管理頁面:
通過Meta內嵌類定義模型類的屬性及展現形式
在模型類中,可以通過定義內部類class Meta的方式,來重新定義當前模型類和數據表的一些屬性信息。
- 用法
 
- 舉個例子
 
我們在models.py中新增一個Publisher模型類,并定義Meta內部類:
class Publisher(models.Model):pub = models.CharField("出版社名", max_length = 50,null = True)booknumber = models.PositiveIntegerField("初版書籍總量", default = 0)tele = models.CharField("聯系電話", max_length = 11, null = False)class Meta:db_table = "china_publisher"verbose_name = "ChinaPublisher"verbose_name_plural = "ChinaPublishers"在Django shell中給china_publisher數據表添加一些數據:
In [2]: from bookstore import modelsIn [3]: models.Publisher.objects.create(pub="人民郵電出版社", tele="81055364") Out[3]: <Publisher: Publisher object (1)>In [4]: models.Publisher.objects.create(pub="清華大學出版社", tele="62783933") Out[4]: <Publisher: Publisher object (2)>In [5]: models.Publisher.objects.create(pub="機械工業出版社", tele="88379833") Out[5]: <Publisher: Publisher object (3)>In [6]: models.Publisher.objects.create(pub="電子工業出版社", tele="88258888") Out[6]: <Publisher: Publisher object (4)>打開admin數據庫管理界面:
點開ChinaPublishers:
查看mywebdb數據庫中的數據表們:
mysql> show tables; +----------------------------+ | Tables_in_mywebdb | +----------------------------+ | auth_group | | auth_group_permissions | | auth_permission | | auth_user | | auth_user_groups | | auth_user_user_permissions | | bookstore_author | | bookstore_book | | china_publisher | | django_admin_log | | django_content_type | | django_migrations | | django_session | +----------------------------+ 13 rows in set (0.00 sec)可以看到,Publisher模型類創建的數據表名字為china_publisher。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Django(part31)--admin后台数据库管理的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: spi总线协议及spi时序图详解_奔创s
 - 下一篇: Django(part32)--一对一映