學習筆記,僅供參考
文章目錄
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: [email protected]
Password:
Password (again):
Superuser created successfully.
我們需要在Username處輸入用戶名,在Email address處輸入郵箱,在Password處輸入密碼(密碼要複雜些,否則會提示密碼太簡單),在**Password (again)**處再次輸入相同的密碼(Django爲了防止我們第一遍時輸入錯誤)
- 第二步:開啓服務器
python manage.py runserver
- 用註冊的帳號登陸後臺管理界面
後臺管理的登錄地址: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 | [email protected] |
+----+----------+----------------------+
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
方法進行註冊
from django.contrib import admin
admin.site.register(models.Book)
#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
裏定義模型管理器類
class XXXX_Manager(admin.ModelAdmin):
......
- 在
<應用app>/admin.py
裏註冊管理器類與模型類關聯
from django.contrib import admin
from . import models
admin.site.register(models.YYYY, XXXX_Manager)
#註冊管理器類與模型類關聯
#models.YYYY是模型類
#管XXXX_Manager是管理器類
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
的方式,來重新定義當前模型類和數據表的一些屬性信息。
- 用法
class Book(models.Model):
title = CharField(....)
class Meta:
1. db_table = '數據表名'
- 該模型所用的數據表的名稱。(設置完成後需要立馬更新同步數據庫)
2. verbose_name = '單數名'
- 該模型對象的一個易於理解的名稱(單數),用於顯示在/admin管理界面中
3. verbose_name_plural = '複數名'
- 該對象複數形式的名稱(複數),用於顯示在/admin管理界面中
- 舉個例子
我們在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 models
In [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。