You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DjangoBlog/djangoblog/admin_site.py

109 lines
3.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#gq:
# 从 Django 内置的 admin 模块导入 AdminSite 基类
from django.contrib.admin import AdminSite
# 导入 LogEntry 模型,用于记录管理员操作日志
from django.contrib.admin.models import LogEntry
# 导入 Site 模型及其默认的 Admin 配置
from django.contrib.sites.admin import SiteAdmin
from django.contrib.sites.models import Site
# 批量导入各个自定义 App 的 Admin 配置和模型
# 这种星号(*)导入方式在项目规模较小时很方便,但大型项目中可能影响代码可读性
from accounts.admin import *
from blog.admin import *
from blog.models import *
from comments.admin import *
from comments.models import *
# 导入自定义的 LogEntryAdmin用于自定义操作日志的后台显示
from djangoblog.logentryadmin import LogEntryAdmin
from oauth.admin import *
from oauth.models import *
from owntracks.admin import *
from owntracks.models import *
from servermanager.admin import *
from servermanager.models import *
class DjangoBlogAdminSite(AdminSite):
"""
自定义的 Admin 站点类,继承自 Django 的 AdminSite。
用于定制 Admin 后台的外观和行为。
"""
# 定制 Admin 后台顶部的标题
site_header = 'djangoblog administration'
# 定制浏览器标签页上的标题
site_title = 'djangoblog site admin'
def __init__(self, name='admin'):
"""
初始化方法
:param name: 站点的名称,默认是 'admin',这会影响 URL 反向解析等。
"""
super().__init__(name)
def has_permission(self, request):
"""
重写权限检查方法。
这个方法决定了一个请求是否有权限访问 Admin 后台。
:param request: 当前的 HTTP 请求对象
:return: Boolean表示是否允许访问
"""
# 只有超级用户(superuser)才能访问这个自定义的 Admin 站点
# 这是一个比默认更严格的权限控制
return request.user.is_superuser
# def get_urls(self):
# """
# (已注释)重写 get_urls 方法来添加自定义的 URL 路由。
# 这是一个示例,展示了如何在 Admin 后台中加入自己的视图。
# """
# # 先获取父类的所有 URL
# urls = super().get_urls()
# from django.urls import path
# # 导入一个自定义的视图函数,用于刷新缓存
# from blog.views import refresh_memcache
#
# # 定义自己的 URL 模式
# my_urls = [
# # 使用 self.admin_view() 包装自定义视图,以确保它受到 Admin 权限保护
# path('refresh/', self.admin_view(refresh_memcache), name="refresh"),
# ]
# # 返回合并后的 URL 列表
# return urls + my_urls
# 创建一个自定义 Admin 站点的实例
# 这个实例将被用于注册所有的模型
admin_site = DjangoBlogAdminSite(name='admin')
# --- 开始注册各个 App 的模型到自定义的 admin_site ---
# 注册 blog App 的模型
admin_site.register(Article, ArticlelAdmin)
admin_site.register(Category, CategoryAdmin)
admin_site.register(Tag, TagAdmin)
admin_site.register(Links, LinksAdmin)
admin_site.register(SideBar, SideBarAdmin)
admin_site.register(BlogSettings, BlogSettingsAdmin)
# 注册 servermanager App 的模型
admin_site.register(commands, CommandsAdmin)
admin_site.register(EmailSendLog, EmailSendLogAdmin)
# 注册 accounts App 的模型
admin_site.register(BlogUser, BlogUserAdmin)
# 注册 comments App 的模型
admin_site.register(Comment, CommentAdmin)
# 注册 oauth App 的模型
admin_site.register(OAuthUser, OAuthUserAdmin)
admin_site.register(OAuthConfig, OAuthConfigAdmin)
# 注册 owntracks App 的模型
admin_site.register(OwnTrackLog, OwnTrackLogsAdmin)
# 注册 Django 内置的 Site 模型
admin_site.register(Site, SiteAdmin)
# 注册 Django 内置的 LogEntry 模型,使用自定义的 LogEntryAdmin 配置
admin_site.register(LogEntry, LogEntryAdmin)