视频加载失败

后台管理功能

965 字
5 分钟
后台管理功能

【一】前提#

  • 我们在书写模型表时,已经将所有的模型表注册到了对应 APP 下的 admin.py文件中
  • 在定义模型表时我们会在每一个字段的后面看到 verbose_name属性,该属性的作用时,当我们登陆到admin后台后,我们可以在每一张表中看到每一个字段对应的中文,也就是我们定义的属性值,否则为当前字段

【二】Django注册超级管理员#

Terminal window
python manage.py createsuperuser
# 依次输入 用户名 邮箱 密码 二次确认密码 即可完成超级管理员注册

【三】美化 admin 后台页面#

【1】安装第三方模块#

Terminal window
pip install django-simpleui

【2】注册 APP#

INSTALLED_APPS = [
# pip install django-simpleui
# 注册simpleui
'simpleui',
]

【四】自定制后台展示模板#

【1】公共模型#

class BaseModelAdmin(admin.ModelAdmin):
# display_字段名(self,obj)
def display_created_time(self, obj):
# 将需要格式化后的样式返回
return obj.create_time.strftime("%Y-%m-%d %H:%M:%S")
# 定制后台字段展示文字和 verbose_name 同理
display_created_time.short_description = "创建时间"
def display_update_time(self, obj):
return obj.update_time.strftime("%Y-%m-%d %H:%M:%S")
display_update_time.short_description = "更新时间"
def display_avatar(self, obj):
# 获取默认的avatar路径
avatar_path = obj.avatar if obj.avatar else 'avatar/default.png'
# 拼接完整的URL
avatar_url = f'http://127.0.0.1:8000/media/{avatar_path}'
# 格式化为HTML链接,并返回
# return format_html('<img href=>{}</a>', avatar_url, avatar_url)
return format_html(
f'<a href="{avatar_url}" target="_blank">'
f'<img src="{avatar_url}" alt="请稍后再试哦" style="width: 50px;height: auto">'
f'</a>')
display_avatar.short_description = "用户头像" # 设置列名显示为"Avatar"

【2】模型表示例#

from django.contrib import admin
from django.utils.html import format_html
from lib.CommonAdmin import BaseModelAdmin
from user.models import UserInfo
# Register your models here.
# 创建一个类并用它来定制UserInfo
@admin.register(UserInfo)
# 这个类必须继承 admin.ModelAdmin
class UserInfoAdmin(BaseModelAdmin):
def display_avatar(self, obj):
# 获取默认的avatar路径
avatar_path = obj.avatar if obj.avatar else 'static/advImg/default.png'
# 拼接完整的URL
avatar_url = f'http://127.0.0.1:8000/{avatar_path}'
# 格式化为HTML链接,并返回
# return format_html('<img href=>{}</a>', avatar_url, img_url)
return format_html(
f'<a href="{avatar_url}" target="_blank">'
f'<img src="{avatar_url}" alt="请稍后再试哦" style="width: 50px;height: auto">'
f'</a>')
display_avatar.short_description = "头像" # 设置列名显示为"Avatar"
# 后台展示的信息,默认是全部都展示,但是可以定制展示的字段
list_display = ['username', 'last_name', 'email', 'phone', 'display_avatar', 'display_created_time',
'display_update_time',
'is_deleted',
'blog']

【五】注册管理后台模型表#

【1】注册用户模型表后台#

  • user/admin.py
from django.contrib import admin
from django.utils.html import format_html
from lib import BaseModelAdmin
from user.models import UserInfo
# Register your models here.
# 创建一个类并用它来定制UserInfo
@admin.register(UserInfo)
# 这个类必须继承 admin.ModelAdmin
class UserInfoAdmin(BaseModelAdmin):
ordering = ["id"]
def display_avatar(self, obj):
# 获取默认的avatar路径
avatar_path = obj.avatar if obj.avatar else 'avatar/default.png'
# 拼接完整的URL
avatar_url = f'http://127.0.0.1:8000/media/{avatar_path}'
# 格式化为HTML链接,并返回
# return format_html('<img href=>{}</a>', avatar_url, img_url)
return format_html(
f'<a href="{avatar_url}" target="_blank">'
f'<img src="{avatar_url}" alt="请稍后再试哦" style="width: 50px;height: auto">'
f'</a>')
display_avatar.short_description = "头像" # 设置列名显示为"Avatar"
# 后台展示的信息,默认是全部都展示,但是可以定制展示的字段
list_display = ["id", 'username', 'last_name', 'email', 'phone', 'display_avatar', 'display_created_time',
'display_update_time',
'is_deleted',
'blog']

【2】注册个人站点模型表后台#

  • blog/admin.py
from django.contrib import admin
from django.utils.html import format_html
from lib.CommonAdmin import BaseModelAdmin
# Register your models here.
from blog.models import Blog, Adv
@admin.register(Blog)
class BlogAdmin(BaseModelAdmin):
ordering = ["id"]
list_display = ['id', 'site_name', 'site_title', 'display_created_time', 'display_update_time', 'site_theme']
@admin.register(Adv)
class AdvAdmin(BaseModelAdmin):
ordering = ["id"]
def display_img(self, obj):
# 获取默认的avatar路径
img_path = obj.img if obj.img else 'static/advImg/default.png'
# 拼接完整的URL
img_url = f'http://127.0.0.1:8000/media/{img_path}'
# 格式化为HTML链接,并返回
# return format_html('<img href=>{}</a>', avatar_url, img_url)
return format_html(
f'<a href="{img_url}" target="_blank">'
f'<img src="{img_url}" alt="请稍后再试哦" style="width: 50px;height: auto">'
f'</a>')
# 设置列名显示为"广告图片"
display_img.short_description = "广告图片"
list_display = ['id', 'title', 'content', 'display_created_time', 'display_update_time', 'mobile',
'is_background_img', 'display_img']

【3】注册文章模型表后台#

  • article/admin.py
from django.contrib import admin
# Register your models here.
from article.models import CategoryClass, CategoryTag, Comment, UpAndDown, Article, ArticleToTag
from lib.CommonAdmin import BaseModelAdmin
@admin.register(Article)
class ArticleAdmin(BaseModelAdmin):
ordering = ["id"]
def display_content(self, obj):
return obj.content[:30]
display_content.short_description = "文章内容"
list_display = ['id', 'title', 'desc', 'up_num', 'down_num', 'comment_num', 'display_content',
'display_created_time', 'display_update_time', 'blog', 'category']
@admin.register(CategoryClass)
class CategoryClassAdmin(BaseModelAdmin):
ordering = ["id"]
list_display = ['id', 'name', 'blog']
@admin.register(CategoryTag)
class CategoryTagAdmin(BaseModelAdmin):
ordering = ["id"]
list_display = ['id', 'name', 'blog']
@admin.register(ArticleToTag)
class CategoryTagAdmin(admin.ModelAdmin):
ordering = ["id"]
list_display = ['id', 'article', 'tag']
@admin.register(UpAndDown)
class UpAndDownAdmin(BaseModelAdmin):
ordering = ["id"]
list_display = ['id', 'user', 'article', 'up_or_down', 'display_created_time', 'display_update_time']
@admin.register(Comment)
class CommentAdmin(BaseModelAdmin):
ordering = ["id"]
list_display = ['id', 'user', 'article', 'content', 'is_deleted', 'parent', 'display_created_time',
'display_update_time']

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
Profile Image of the Author
Dream
Hello, I'm Dream.
公告
欢迎来到我的博客!爱学习爱进步。
分类
标签
最新动态
站点统计
文章
169
分类
3
标签
26
总字数
334,507
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Vercel
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录