Django(part31)--admin後臺數據庫管理

學習筆記,僅供參考



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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章