第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開發(fā)者教程

Django 入門教程

課程導(dǎo)學(xué)
Django 慕課教程使用指南
Django開發(fā)實戰(zhàn)
35 開發(fā)實戰(zhàn)
首頁 慕課教程 Django 入門教程 Django 入門教程 21 Django 自帶的 Admin 管理工具

Django 自帶的 Admin 管理工具

Django 給我們提供了一個內(nèi)置的完整功能的管理頁面。在這個管理頁面,我們可以對實現(xiàn)的模型對象進行完整的增刪改查操作,足以滿足我們的日常需求,接下來開始進入這個管理工具的使用。

1. 初識 Admin Web

首先 Django 工程中默認自帶 Admin 管理工具并作為內(nèi)置應(yīng)用在 settings.py 中的 INSTALLED_APPS 上進行了注冊:

INSTALLED_APPS = [
    # 注冊 admin 應(yīng)用
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 注冊應(yīng)用
    'hello_app'
]

接下來為了能訪問到這個后臺管理的 Web 頁面,Django 在初始化項目時,自動為我們添加了這個 Web 頁面的相關(guān)的路由信息:

# first_django_app/urls.py

urlpatterns = [
    # admin后臺管理頁面的地址
    url('admin/', admin.site.urls),
]

注意:如果不想要這個自帶的后臺管理系統(tǒng),也可以直接刪除這個 URLconf 配置即可。

我們啟動測試的 Django 工程,然后手動訪問這個 admin 后臺,具體操作如下:

(django-manual) [root@server first_django_app]# python manage.py runserver 0.0.0.0:8888
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

April 12, 2020 - 15:11:39
Django version 2.2.11, using settings 'first_django_app.settings'
Starting development server at http://0.0.0.0:8888/
Quit the server with CONTROL-C.

注意:對于上面出現(xiàn)的告警信息是因為我們沒有做數(shù)據(jù)庫的遷移。在 Django 中為我們設(shè)計了一些內(nèi)部的表,比如用來保存 admin 管理工具賬號的表,比如保存 session 的表等。只需要使用 Django 提供的 makemigrationsmigrate 命令即可:

(django-manual) [root@server first_django_app]# python manage.py makemigrations
Migrations for 'hello_app':
  hello_app/migrations/0002_auto_20200412_1512.py
    - Alter field vip_level on member
(django-manual) [root@server first_django_app]# python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, hello_app, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying hello_app.0002_auto_20200412_1512... OK
  Applying sessions.0001_initial... OK

可以通過 Navicate 工具查看到 Django 給我們生成了 10 張表內(nèi)部表,這 10 張表之間存在許多關(guān)聯(lián)的地方。如下圖所示:

圖片描述

再次使用 runserver 命令啟動 Django 工程時,就不會再有遷移相關(guān)的告警提示了。這個時候我們訪問 admin/ 地址,就可以看到如下的登錄頁面。

圖片描述

這里的登錄賬號和密碼我們可以通過 Django 提供的 createsuperuser 命令完成:

(django-manual) [root@server first_django_app]# python manage.py createsuperuser
Username (leave blank to use 'root'): admin
Email address: 22@11.com
Password: 
Password (again): 
Superuser created successfully.

上面命令執(zhí)行成功后,我們可以看到數(shù)據(jù)庫的 auth_user 表中多出了一條用戶信息的記錄,正是我們上面設(shè)置的用戶名和密碼信息。

圖片描述

使用這個剛創(chuàng)建的用戶名和密碼登錄進入管理系統(tǒng)頁面如下:

圖片描述

在首頁中,我們可以對用戶和用戶組進行管理,包括對表中數(shù)據(jù)的更新、修改和刪除。如下是新增用戶以及新增完成后的操作示例。完成新增完成后,還可以選擇該條記錄進行調(diào)整,直接影響的就是數(shù)據(jù)庫中的 auth_user 表。

圖片描述

圖片描述
除了管理內(nèi)置的表外,Django 的 admin 功能還可以管理我們定義的模型表,實現(xiàn)基本的增刪改查操作。我們繼續(xù)用前面的會員表和會員等級表進行實操。

hello_app/admin.py 文件中添加如下代碼,將我們定義的模型注冊到 admin 模塊中:

from django.contrib import admin
from .models import Member, VIPLevel

# Register your models here.
admin.site.register([Member, VIPLevel])

重啟 Django 工程,然后繼續(xù)訪問 admin 管理頁面,讓我們可以看到我們定義的模型出現(xiàn)在了管理頁面上。而且我們還可以操作我們的模型,進行增刪改查數(shù)據(jù)。

圖片描述

注意:這里表中數(shù)據(jù)的展示方式是按照模型類中定義的 __str__ 魔法函數(shù)決定的。

圖片描述

圖片描述

這里可以看到 Member 表的關(guān)聯(lián)表中數(shù)據(jù),使用起來非常方便。

2. 深入 Admin Web

2.1 自定義模型管理頁面

我們可以看到,默認 Admin 管理頁面給我們提供的增刪改查操作,頁面的內(nèi)容比較單一。如果我們想自定義管理頁面的內(nèi)容以及功能的時候,可以使用 ModelAdmin 類,它是模型在 Admin 界面中的表示形式,封裝了模型的 Admin 功能和選項。通常,會將它們放在應(yīng)用中的名為 admin.py 的文件里。

from django.contrib import admin
from .models import Member, VIPLevel

@admin.register(Member)
class MemberAdmin(admin.ModelAdmin):
    pass

@admin.register(VIPLevel)
class VIPLevelAdmin(admin.ModelAdmin):
    pass

上面這樣的寫法等價于我們使用默認的管理方式,和之前的 admin.site.register([Member, VIPLevel]) 注冊函數(shù)功能一致,僅僅是表示注冊。我們來看看 ModelAdmin 的常用屬性值:

  • actions_on_top / actions_on_bottom:用來控制列表頁按鈕顯示位置;
  • date_hierarchy:只可作用在 DateField 和 DateTimeField 上。設(shè)置后, 可以根據(jù)時間段, 去過濾數(shù)據(jù);
  • empty_value_display:此屬性會覆蓋記錄字段為空的默認顯示值。 默認值為-(破折號);
  • exclude:排除新增/編輯頁面需要顯示的字段;
  • fields:指定新增、編輯頁面要顯示的字段;
  • fieldsets:設(shè)置 fieldsets 以控制管理頁面的 “Add” 和 “Change” 按鈕跳轉(zhuǎn)頁面的布局;
  • list_display:控制列表頁要顯示的字段;如果我們沒有設(shè)置 list_display 屬性,那么 admin 站點僅顯示一列,顯示 __str__() 的結(jié)果,這正是我們前面看到的現(xiàn)象;
  • list_display_links:指定哪些在列表頁顯示的字段上加鏈接;
  • list_editable:指定哪些字段可以直接在列表頁編輯;
  • list_filter:指定列表頁過濾字段;
  • list_per_page:指定列表頁每頁顯示的記錄數(shù);
  • ordering:指定字段的排序,比如正序、倒敘等等。

我們使用 ModelAdmin 類來改造下前面的 Member 模型的展示頁面,代碼如下:

from django.contrib import admin
from .models import Member, VIPLevel

# Register your models here.

@admin.register(Member)
class MemberAdmin(admin.ModelAdmin):
    actions_on_top = False
    actions_on_bottom = True
    date_hierarchy = 'register_date'
    empty_value_display = '-empty-'
    list_display = ('name', 'age', 'city', 'sex', 'occupation', 'phone_num')
    list_editable = ('age', 'sex')
    list_filter = ('occupation', 'city')
    ordering = ['-age']
    list_per_page = 5

@admin.register(VIPLevel)
class VIPLevelAdmin(admin.ModelAdmin):
    pass

每個屬性值對應(yīng)的效果如下圖所示:

圖片描述

更多關(guān)于 ModelAdmin 類的屬性及其用法,我們需要參看官方文檔,那里有十分詳細的屬性說明以及代碼演示。及時查看官方文檔輔助學(xué)習(xí) Django 是一個非常有效的學(xué)習(xí)手段,畢竟那里才是 Django 一切學(xué)習(xí)文檔的來源地。

2.2 Admin 中的 actions

我們前面看到,Admin 中的 actions 是控制模型列表的動作,比如頁面上批量更新操作等。來看如下的示例代碼:

from django.contrib import admin
from .models import Member, VIPLevel

# Register your models here.
def make_men(modeladmin, request, queryset):
    queryset.update(sex=0)
make_men.short_description = "全部轉(zhuǎn)成男性"

@admin.register(Member)
class MemberAdmin(admin.ModelAdmin):
    actions_on_top = False
    actions_on_bottom = True
    date_hierarchy = 'register_date'
    empty_value_display = '-empty-'
    list_display = ('name', 'age', 'city', 'sex', 'occupation', 'phone_num')
    list_editable = ('age', 'sex')
    list_filter = ('occupation', 'city')
    ordering = ['-age']
    list_per_page = 5
    actions = [make_men]

@admin.register(VIPLevel)
class VIPLevelAdmin(admin.ModelAdmin):
    pass

我們自定義了一個 make_men() 方法,這個方法會作為 MemberAdmin 對象的一個 action 方法。然后給該方法添加 short_description 屬性,最后將該方法添加到 ModelAdmin 對象的 actions 屬性中去。這樣在模型管理頁面的 Action 欄會出現(xiàn)對應(yīng)的標簽,用于實現(xiàn)相應(yīng)的動作,如下圖所示:

圖片描述

該 action 方法固定有三個參數(shù):

  • 當(dāng)前的 ModelAdmin 對象實例;
  • 一個 HttpRequest 實例,用于表示當(dāng)前的 HTTP 請求;
  • 用戶選中記錄對應(yīng)組成的 QuerySet 實例;

選擇我們定義的 action 方法,然后點擊 Go 按鈕,就可以將所有選中記錄的性別改為男性。操作結(jié)果如下:

圖片描述

我們可以看到每個模型管理頁面的 Action 欄的下拉框都會有一個默認的動作,就是刪除選中的記錄。如果我們不想要這個動作選項,可以在 admin.py 中加上admin.site.disable_action 代碼即可。如果有的模型想要有這個選項,而另一個模型不想要這個選項,則可以使用如下的方式完成需求:

# 關(guān)閉本應(yīng)用模型的刪除選中動作選項
admin.site.disable_action('delete_selected')

# Member模型管理頁面不會有刪除選中動作選項
@admin.register(Member)
class MemberAdmin(admin.ModelAdmin):
    ...

# VIPLevel模型管理頁面則會有刪除選中動作選項
class VIPLevelAdmin(admin.ModelAdmin):
    actions = ['delete_selected', 'a_third_action']
    ...

圖片描述

最后,如果直接不想要這個 Action 欄,我們直接給模型對應(yīng)的 ModelAdmin 對象設(shè)置 action = None 即可,結(jié)果如下:

圖片描述

3. 小結(jié)

這里我們簡單的介紹了下 Django 自帶的 Admin 管理頁面,同時通過配置一行代碼可以管理我們定義的模型。此外,為了能夠自定義管理頁面的內(nèi)容以及相關(guān)的功能,學(xué)習(xí)了 Django 提供的 ModelAdmin 類并進行了實操演示。不過,盡管 Django 為我們提供了這么多功能,在大多數(shù)場景下還是顯得非常簡陋和不友好,還需要引入第三方的插件來豐富和美化我們的后臺管理功能。在后面的第三方模塊小節(jié)中我們會介紹一個第三方的 Django 后臺管理系統(tǒng)—xadmin,然后會在該管理系統(tǒng)的基礎(chǔ)上進行實戰(zhàn)開發(fā)。