三十、Kingadmin
1.一、计算机初识2.二、数据概述3.六、ip地址与子网划分4.五、网络通信实现5.四、字符编码6.三、网络基础7.十四、MySQL与Django之Model基础8.十三、Django Admin9.十二、Django视图函数和模版相关10.十一、Django url控制系统11.十、Django静态文件12.九、Django环境搭建(基于anaconda环境)13.八、Python开发环境管理14.七、ip地址配置15.二十五、JSON跨域16.二十四、文件上传17.二十三、Django Serializes18.二十二、Django之Form组件19.二十一、分页20.JS笔记21.二十、基于Bootstrap和FontAwesome制作页面22.十九、Ajax和iFrame23.十八、Django之Http24.十七、Cookie和Session25.十六、Django的ORM(二)26.十五、Django的ORM27.实践中前端的一些笔记28.二十六、登录相关29.二十九、RBAC+动态菜单30.二十八、XSS31.JS第三方插件32.二十七、简单的验证码实现33.三十二、Django实践的笔记34.三十一、动态Form
35.三十、Kingadmin
Django提供了Admin来做后台管理
这里Kingadmin为自己做的后台管理
1、Kingadmin Base
from django.shortcuts import render
class BaseKingAdmin(object):
list_display = []
list_filter = []
search_fields = []
readonly_fields = []
filter_horizontal = []
list_per_page = 20
default_actions = ['delete_selected_objs']
actions = []
def __init__(self):
self.actions.extend(self.default_actions) # 这样子类定义了actions也有default_actions
def delete_selected_objs(self,request,querysets):
# 待完
return render(request,'kingadmin/table_obj_delete.html')
class AdminSite(object):
def __init__(self):
self.enabled_admins = {}
def register(self, app_class, admin_class=None):
app_name = app_class._meta.app_label # 拿到传入的model所在的app名
model_name = app_class._meta.model_name #拿到model的名字(小写)
if not admin_class: # 将kingadmin类实例化
admin_class = BaseKingAdmin()
else:
admin_class = admin_class()
admin_class.model = app_class # 将model类赋值给kingadmin对象
if app_name not in self.enabled_admins:
self.enabled_admins[app_name] = {} #分app名保存字典{model小写名:kingadmin对象}
self.enabled_admins[app_name][model_name] = admin_class
site = AdminSite() #实例一个全局的site
2、注册Kingadmin
app/kingadmin.py
from kingadmin.sites import site, BaseKingAdmin
from web import models
class CustomerAdmin(BaseKingAdmin):
list_display = ['name','source','contact_type','contact','consultant','consult_content','status','date']
list_filter = ['source','consultant','status','date']
search_fields = ['contact','consultant__name']
readonly_fields = ['status', 'contact']
filter_horizontal = ['consult_courses', ]
actions = ['change_status', ]
def change_status(self, request, querysets):
print("kingadmin action:", self, request, querysets)
querysets.update(status=0)
site.register(models.CustomerInfo,CustomerAdmin)
site.register(models.Role)
site.register(models.Menus)
site.register(models.UserProfile)
3、主动发现注册了Kingadmin的model
kingadmin/app_setup.py
from django import conf
def kingadmin_auto_discover():
for app_name in conf.settings.INSTALLED_APPS: # 遍历项目所有app名字
try: # 主动导入app下名为kingadmin的模块。这样那些model就成功注册kingadmin
mod = __import__('%s.kingadmin' % app_name)
# print(mod.kingadmin)
except ImportError:
pass
importlib与__import__
for app_name in conf.settings.INSTALLED_APPS:
try:
mod = importlib.import_module('.admin', app_name)
print(mod)
except ImportError:
pass
try:
mod = __import__('%s.admin' % app_name)
print(mod)
except ImportError :
pass
结果:
<module 'django.contrib.auth.admin' from 'C:\\Program Files\\Anaconda3\\envs\\my_env3.8\\lib\\site-packages\\django\\contrib\\auth\\admin.py'>
<module 'django' from 'C:\\Program Files\\Anaconda3\\envs\\my_env3.8\\lib\\site-packages\\django\\__init__.py'>
<module 'django.contrib.contenttypes.admin' from 'C:\\Program Files\\Anaconda3\\envs\\my_env3.8\\lib\\site-packages\\django\\contrib\\contenttypes\\admin.py'>
<module 'django' from 'C:\\Program Files\\Anaconda3\\envs\\my_env3.8\\lib\\site-packages\\django\\__init__.py'>
<module 'kingadmin.admin' from 'C:\\Users\\Administrator\\PycharmProjects\\my_env3\\CRM\\kingadmin\\admin.py'>
<module 'kingadmin' from 'C:\\Users\\Administrator\\PycharmProjects\\my_env3\\CRM\\kingadmin\\__init__.py'>
for app_name in conf.settings.INSTALLED_APPS:
try:
mod = importlib.import_module('.kingadmin', app_name)
print(mod)
except ImportError:
pass
try:
mod = __import__('%s.kingadmin' % app_name)
print(mod.kingadmin)
except ImportError :
pass
结果:
<module 'web.kingadmin' from 'C:\\Users\\Administrator\\PycharmProjects\\my_env3\\CRM\\web\\kingadmin.py'>
<module 'web.kingadmin' from 'C:\\Users\\Administrator\\PycharmProjects\\my_env3\\CRM\\web\\kingadmin.py'>
在views.py中加入
from kingadmin import app_setup
app_setup.kingadmin_auto_discover() # 主动加载一些模块
from kingadmin.sites import site # 带有model的kingadmin类
from kingadmin import form_handle # 动态的model_form
{% for app_name,app_tables in site.enabled_admins.items %} 通过site里的字典就可以拿到app名和注册的model
合集:
Python全栈(Django)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库