Xadmin的实现
一、启动
1、前提
配置setting.py文件 INSTALLED_APPS
2、定位Xadmin,找到对应的类
'Xadmin.apps.XadminConfig',
3、根据admin源码,实现启动
from django.apps import AppConfig
from django.utils.module_loading import autodiscover_modules class XadminConfig(AppConfig):
name = 'Xadmin' # 启动Xadmin
def ready(self):
autodiscover_modules('Xadmin')
二、注册
1、根据需求,需要自定义 注册的对象和方法
根据admin源码
# 定义ModelXadmin, models的样式
class ModelXadmin: def __init__(self, model, site):
self.model = model
self.site = site # 定义 XadminSite类
class XadminSite: def __init__(self, name='Xadmin'):
self._registry = {} def register(self, model, admin_class=None, **options):
if not admin_class:
admin_class = ModelXadmin
self._registry[model] = admin_class(model, self) site = XadminSite()
2、注册
from Xadmin.service.Xadmin import site
from app01.models import Book, Publish, Author, AuthorDetail # Register your models here. site.register(Book)
site.register(Publish)
site.register(Author)
site.register(AuthorDetail)
三、设置url
1、设置url
from django.contrib import admin
from Xadmin.service.Xadmin import site
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
path('Xadmin/', site.urls),
]
2、分发url
from django.urls import path
from django.shortcuts import HttpResponse # 定义ModelXadmin, models的样式
class ModelXadmin: def __init__(self, model, site):
self.model = model
self.site = site # 定义 XadminSite类
class XadminSite: def list_view(self, request):
print(request.path)
return HttpResponse("list_view") def add_view(self, request):
print(request.path)
return HttpResponse("add_view") def change_view(self, request, id):
print(request.path)
return HttpResponse("change_view") def delete_view(self, request, id):
print(request.path)
return HttpResponse("delete_view") def __init__(self, name='Xadmin'):
self._registry = {} def register(self, model, admin_class=None, **options):
if not admin_class:
admin_class = ModelXadmin
self._registry[model] = admin_class(model, self) # 一级urls
def get_urls(self):
temp = []
for models, admin_class_obj in self._registry.items():
app_name = models._meta.app_label
models_name = models._meta.model_name
temp.append(path('%s/%s/' % (app_name, models_name), self.urls2)),
return temp # 二级urls
def get_urls2(self):
temp = []
temp.append(path('', self.list_view))
temp.append(path('add/', self.add_view))
temp.append(path('<id>/change/', self.change_view))
temp.append(path('<id>/delete/', self.delete_view))
return temp @property
def urls(self):
return self.get_urls(), None, None @property
def urls2(self):
return self.get_urls2(), None, None site = XadminSite()
3、将有关样式的分发迁移到样式类中
from django.urls import path
from django.shortcuts import HttpResponse, render # 定义ModelXadmin, models的样式
class ModelXadmin: def __init__(self, model, site):
self.model = model
self.site = site def list_view(self, request):
print(request.path) # /Xadmin/app02/food/
print(self.model) # <class 'app02.models.Food'>
data_list = self.model.objects.all()
# return HttpResponse("list_view")
return render(request, "show_food.html", {"data_list": data_list}) def add_view(self, request):
print(request.path)
return HttpResponse("add_view") def change_view(self, request, id):
print(request.path)
return HttpResponse("change_view") def delete_view(self, request, id):
print(request.path)
return HttpResponse("delete_view") # 二级urls
def get_urls(self):
temp = []
temp.append(path('', self.list_view))
temp.append(path('add/', self.add_view))
temp.append(path('<id>/change/', self.change_view))
temp.append(path('<id>/delete/', self.delete_view))
return temp @property
def urls(self):
return self.get_urls(), None, None # 定义 XadminSite类
class XadminSite: def __init__(self, name='Xadmin'):
self._registry = {} def register(self, model, admin_class=None, **options):
if not admin_class:
admin_class = ModelXadmin
self._registry[model] = admin_class(model, self) # 一级urls
def get_urls(self):
temp = []
# admin_class_obj 是 ModelXadmin的对象
for models, admin_class_obj in self._registry.items():
app_name = models._meta.app_label
models_name = models._meta.model_name
temp.append(path('%s/%s/' % (app_name, models_name), admin_class_obj.urls)),
return temp @property
def urls(self):
return self.get_urls(), None, None site = XadminSite()
优点
1、每一个表对应不同的模板
2、在样式类中方便调用表的数据
self.models # <class 'app02.models.Food'>
models.Food
Xadmin的实现的更多相关文章
- 关于django xadmin的学习改造(菜单名称,更改默认前缀数据库)
路径xadmin-master\demo_app\app\models.py class c(models.Model): ip_address = models.CharField(max_leng ...
- xadmin 自定义视图在uwsgi部署时的一坑
比如修改登录页的template,代码如下: xadmin.site.register(xadmin.views.LoginView, login_template="card_pool/s ...
- django xadmin 外键
style_fields = {'db栏位名称': "fk-ajax"} 实体关系: Account (*)-->(1) user 表单控件: 下拉框 美化用了selecti ...
- django xadmin 插件(3) 列表视图新增自定义按钮
效果图: 编辑按钮是默认的list_editable属性对应的插件(xadmin.plugins.editable) 放大按钮对应的是自定义插件. 自定义按钮源码: xplugin.py(保证能够直接 ...
- django xadmin 插件(2) 列表视图新增一功能列
以默认的related_link为例(即最后一列). 源码:xadmin.plugins.relate.RelatedMenuPlugin class RelateMenuPlugin(BaseAdm ...
- django xadmin 插件(1)
1. 插件的作用可以是全局的,也可以是只针对某个模型的.通过其 init_request控制是否加载此插件, demo如下: class SCPCardOverviewPlugin(BaseAdmin ...
- django xadmin自定义菜单
1. 自定义菜单 adminx.py class GlobalSetting(object): site_title = u'xxx后台' def kuF_site_menu(self): retur ...
- django xadmin多个model的数据渲染在统一个template中
adminx.py demo class ModelAdmin(object): #.... def get_context(self): context = super(SimCardService ...
- django xadmin 模板的定制
编辑新增等页面对应的modelform为ModelFormAdminView (xadmin.views.edit.ModelFormAdminView) 通过源码分析,新增对象的template属性 ...
- Django1.9开发博客(14)- 集成Xadmin
xadmin是一个django的管理后台实现,使用了更加灵活的架构设计及Bootstrap UI框架, 目的是替换现有的admin,国人开发,有许多新的特性: 兼容 Django Admin 使用 B ...
随机推荐
- Spring Boot实战之单元测试
Spring Boot实战之单元测试 本文介绍使用Spring测试框架提供的MockMvc对象,对Restful API进行单元测试 Spring测试框架提供MockMvc对象,可以在不需要客户端-服 ...
- zookeeper(1)-概述
ZooKeeper概述 ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现.它提供了简单原始的功能,分布式应用可以基于它实现更高级 ...
- 2018-2-13-win10-UWP-Markdown-含源代码
title author date CreateTime categories win10 UWP Markdown 含源代码 lindexi 2018-2-13 17:23:3 +0800 2018 ...
- 第三阶段:3.Web端产品设计:5.产品设计-视觉设计
视觉设计主要在表现层. 色彩心理产品经理可以也是应当掌握的.什么颜色的选择都是有理有据的. 信息清晰度. 比如这个图:当用户操作出问题,谷歌会给出问题同时给出解决方法. 视觉动物. 2/8分布原则.用 ...
- Ubuntu 18.04 64位安装tensorflow-gpu
第一步(可直接跳到第二步):安装nvidia显卡驱动 linux用户可以通过官方ppa解决安装GPU驱动的问题.使用如下命令添加Graphic Drivers PPA: 1 sudo add-apt- ...
- 解决echarts中的点击事件点击后走多次接口
使用echarts图点击图之后,走了很多次接口,后来发现添加一个off事件就可以解决了,具体如下:
- QTableView 控件的简单使用
QTableView类提供了一个表视图的默认模型/视图实现. 一个QTableView实现一个表视图,它显示来自一个模型的项目.这个类用于提供以前由QTable类提供的标准表,但是使用Qt的模型/视图 ...
- VBA工程密码破解
如何破解VBA密码呢? 见过网上很多关于破解VBA工程密码的方式,最常见的如下这种,但其实对于很多版本是不可行的. 基本都会提示“请先对VBA编码设置一个保护密码...” Sub VBAPassw ...
- Markdown破解及汉化
首先,附上用到的资源链接: 链接:https://pan.baidu.com/s/1ULvvCPcCv_P3KyD9ajXUjQ 提取码:5fkb 第一步 直接解压就可以,解压后运行该程序,会出现下图 ...
- 在Mac/linux上查找(并终止)进程锁定特定端口的几种方法
前言 无论是做网站还是做产品,经常使用到杀死某个进程的方法.制作脚本并熟悉运用是一个非常节省时间的方法. 基本命令 查找: [sudo] lsof -i :3000 杀戮 kill -9 方法一 ...