本篇主要講解Django框架的admin站點管理。
django本身提供了admin站點管理應用,在每一個app提供了admin.py腳本文件,可以將當前應用的models.py中模型類,添加到admin站點中,以方便管理員管理模型對應的數據。
python manage.py createsuperuser

如上圖所示,設置的用戶名,郵箱地址,密碼均為:[email protected]
接下來,運行程序
python manage.py runserver

輸入:http://127.0.0.1:8000/admin/ 回車之後,跳轉頁面

1.1添加用戶


成功添加用戶信息,用戶名為admin,密碼為[email protected](注意,這個和超級管理員賬號不一樣)
此時注意下圖的狀態

退出登錄狀態,重新登錄

然後用新添加的用戶登錄,報如下錯誤

解決辦法:
用超級管理員賬號登錄,進區修改用戶的狀態

給此用戶增加Staff status

操作完如下

再次用此賬號登錄測試

此時在數據庫裡,下面幾張表比較重要


總結:
啟動服務之後,可以訪問/admin進入站點後台管理頁面。
可以嘗試創建後台管理人員賬號,將activate和staff status勾選上。並添加login應用的管理User模型的權限。
在login應用的admin.py文件添加代碼如下:
from django.contrib import admin
from .models import User
# Register your models here.
admin.site.register(User)

保存之後,重新刷新站點頁面


如果會有四條數據,查看數據庫可知,保存了四條數據

此時修改一下代碼,使user_id可以為空
user_id = models.IntegerField(primary_key=True,blank=True)

下面添加用戶

此時再看數據庫數據,多了一條

修改login文件裡面的models.py代碼

保存之後,刷新admin頁面


在login模塊models.py添加代碼
class Meta:
verbose_name = '會員'
verbose_name_plural = verbose_name

效果如下

1.6 修改語言和時區
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'

刷新站點頁面,效果如下:


在login的admin.py修改代碼如下:
from django.contrib import admin
from .models import User
# Register your models here.
class UserAdmin(admin.ModelAdmin):
list_display = ('user_id','name','phone','email')
list_display_links = ('name',)
# 過濾器
list_filter = ('name','phone')
list_editable = ('phone','email')
search_fields = ('name','phone','email')
admin.site.register(User,UserAdmin)

注意添加Field字段參數的blank和verbase_name

在上面代碼已經修改下面的報錯,下圖看一下即可。

保存刷新,界面如下

總結
站點有兩種寫法
方法一:
class UserAdmin(admin.ModelAdmin):
list_display = ('user_id','name','phone','email')
list_display_links = ('name',)
# 過濾器
list_filter = ('name','phone')
list_editable = ('phone','email')
search_fields = ('name','phone','email')
admin.site.register(User,UserAdmin)
方法二
@admin.register(User)
class UserAdmin(admin.ModelAdmin):
list_display = ('user_id','name','phone','email')
list_display_links = ('name',)
# 過濾器
list_filter = ('name','phone')
list_editable = ('phone','email')
search_fields = ('name','phone','email')
