自定义admin组件,Xamin
看完前一篇,相信你对Django中admin组件有了一定的了解,下面就一起来设计一个自己的admin组件,Xadmin
Xadmin初始化
首先,在一个django项目中新建两个app,一个用于测试Xadmin(testXadmin),一个书写Xadmin组件(Xadmin),然后将两个app都注册到setting文件中:
然后在template文件夹中设置四个网页页面:
add_view.html
change_view.html
delete_view.html
list_view.html
以一个页面为例,做一个简单的示范:add_view.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h3>查看</h3>
</body>
</html>
步骤一 书写注册语句
注册语句为:
在Xadmin.apps.py中添加如下代码:
from django.apps import AppConfig
from django.utils.module_loading import autodiscover_modulesclass XadminConfig(AppConfig):name = 'Xadmin'def ready(self): # 加载类的时候会自动加载autodiscover_modules("Xadmin")
步骤二 书写site单例对象,渲染基类对象
在一个利于导入的地方写下生成site的url生成对象,和渲染基类对象,例如我在Xadmin APP下新建一个server文件夹,server中新建Xadmin.py文件
Xadmin.py:
from django.conf.urls import url
from django.shortcuts import HttpResponse, render, redirectclass ModelXadmin(object):def __init__(self, model, site):self.model = modelself.site = sitedef list_view(self, request):print("self.model", self.model)data_list = self.model.objects.all()print("data_list", data_list)return render(request, 'list_view.html', {"data_list": data_list})def add_view(self, request):return render(request, 'add_view.html')def change_view(self, request, id):return render(request, 'change_view.html')def delete_view(self, request, id):return render(request, 'delete_view.html')def get_urls2(self):temp = []temp.append(url(r"^$", self.list_view))temp.append(url(r"^add/$", self.add_view))temp.append(url(r"^(\d+)/change/$", self.change_view))temp.append(url(r"^(\d+)/delete/$", self.delete_view))return temp@propertydef urls2(self):return self.get_urls2(), None, Noneclass XadminSite(object):"""url分配,生成对象"""def __init__(self, name='admin'):self._registry = {}def get_urls(self):print(self._registry) # {Book:modelAdmin(Book),.......}temp = []for model, admin_class_obj in self._registry.items():app_name = model._meta.app_labelmodel_name = model._meta.model_nametemp.append(url(r'^{0}/{1}/'.format(app_name, model_name), admin_class_obj.urls2), )'''url(r"app01/book",ModelXadmin(Book,site).urls2)url(r"app01/publish",ModelXadmin(Publish,site).urls2)url(r"app02/order",ModelXadmin(Order,site).urls2)'''return temp@propertydef urls(self):return self.get_urls(), None, None # 返回的是一个元组,元组第一个参数是列表def register(self, model, admin_class=None, **options):if not admin_class:admin_class = ModelXadminself._registry[model] = admin_class(model, self) # {Book:ModelAdmin(Book),Publish:ModelAdmin(Publish)}site = XadminSite()
这里生成的site对象就是url中用的site对象
改写url.py文件
将原来admin对应的路径处理函数换成自己Xadmin组件中的site.urls
在测试app中进行测试:
在testXadmin下的models.py文件中书写表关系对应的类:
from django.db import models# Create your models here.class Author(models.Model):nid = models.AutoField(primary_key=True)name = models.CharField(max_length=32)age = models.IntegerField()# 与AuthorDetail建立一对一的关系authorDetail = models.OneToOneField(to="AuthorDetail", on_delete=models.CASCADE)def __str__(self):return self.nameclass AuthorDetail(models.Model):nid = models.AutoField(primary_key=True)birthday = models.DateField()telephone = models.BigIntegerField()addr = models.CharField(max_length=64)class Publish(models.Model):nid = models.AutoField(primary_key=True)name = models.CharField(max_length=32)city = models.CharField(max_length=32)email = models.EmailField()def __str__(self):return self.nameclass Book(models.Model):nid = models.AutoField(primary_key=True)title = models.CharField(max_length=32)publishDate = models.DateField()price = models.DecimalField(max_digits=5, decimal_places=2)# 与Publish建立一对多的关系,外键字段建立在多的一方publish = models.ForeignKey(to="Publish", to_field="nid", on_delete=models.CASCADE)# 与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表authors = models.ManyToManyField(to='Author', )def __str__(self):return self.title
在testXadmin下新建Xadmin.py文件,文件内容如下:
from Xadmin.service.Xadmin import site, ModelXadmin
from testXadmin.models import *# Register your models here.class BookConfig(ModelXadmin):list_display = ["title", "prcie"]class PublishConfig(ModelXadmin):list_display = ["name"]site.register(Book, BookConfig)
site.register(Publish, PublishConfig)site.register(Author)
site.register(AuthorDetail)
这样就完成了使用Xadmin组件提换了原来的admin组件,而且在测试app中还进行了测试,下面看测试结果
验证成功,后面编写前端页面即可替代原admin组件
转载于:https://www.cnblogs.com/wlx97e6/p/10110505.html
自定义admin组件,Xamin相关推荐
- Python自定义分页组件
为了防止XSS即跨站脚本攻击,需要加上 safe # 路由 from django.conf.urls import url from django.contrib import admin from ...
- Django admin组件源码流程
admin 组件 Django 自带的用户后台组件 用于用户便携的操作 admin 组件核心 启动 注册 设计url 启动核心代码 每个app 通过 apps.py 扫描 admin.py 文件 并执 ...
- 扩展自定义mq组件,使用rabbitmq_delayed_message_exchange延迟组件,完善消息延迟消息精度问题
一 引言 最近在项目中发现消息的延迟消费是通过redis的过期消息监听,存在很大的安全问题,由于服务的宕机或其他问题会导致消息的丢失,本想系采用延迟队列和死信队列完成消息的延迟消费,但这种方案存在一定 ...
- react ——withRouter——页面隐式传值—嵌套路由——渲染方式——自定义导航组件
withRouter import {Route,Switch,withRouter} from "react-router-dom" withRouter高阶组件增强组件--获取 ...
- django的admin组件使用详解
一.admin组件介绍 admin作为django的超级用户,权限包括注册目录列表,注册用户权限,注册需要维护的数据库信息等. 二.admin组件的使用 1. 启动项目 访问localhost:800 ...
- 【Flutter】自定义 Flutter 组件 ( 创建自定义 StatelessWidget、StatefulWidget 组件 | 调用自定义组件 )
文章目录 一.Flutter 组件简介 二.Flutter 自定义 StatelessWidget 组件流程 1.导入父类包 2.选择继承的父类 3.设置成员变量及构造函数 4.重写 build 方法 ...
- php动态写入vue,Vue自定义动态组件使用详解
这次给大家带来Vue自定义动态组件使用详解,Vue自定义动态组件的注意事项有哪些,下面就是实战案例,一起来看一下. 现在基于vue的UI组件库有很多,比如iview,element-ui等.但有时候这 ...
- 开发自定义JSF组件(4) 保存状态与恢复状态
2019独角兽企业重金招聘Python工程师标准>>> 完整的教材: 开发自定义JSF组件(1) HelloWorld 开发自定义JSF组件(2) 使用Render渲染器 开发自定义 ...
- 【MSDN文摘】使用自定义验证组件库扩展 Windows 窗体: Form Scope
使用自定义验证组件库扩展 Windows 窗体,第 2 部分(Windows 窗体探索) 发布日期: 5/28/2004 | 更新日期: 5/28/2004 Michael Weinhardt www ...
- 为SSIS编写自定义数据流组件(DataFlow Component)之进阶篇:自定义编辑器
我们之前几篇讨论过自定义数据流组件的一些技术,分别如下 入门篇 http://www.cnblogs.com/chenxizhang/archive/2009/06/20/1507467.html 数 ...
最新文章
- Your stream was neither an OLE2 stream, nor an OOXML stream.问题的解决
- 双一流高校出新规:研究生未经导师同意发论文,不得用于毕业、评奖!
- CAN总线-位时序、波特率、采样点
- xml学习4-dtd
- 工业交换机的性能优势有哪些?
- 高级软件工程2017第2次作业—— 个人项目:四则运算题目生成程序(基于控制台)...
- 19楼网站服务器配置,简单的DNS 服务器配置
- Gridview光棒效果
- ES8新特性_async和await结合使用读取文件内容---JavaScript_ECMAScript_ES6-ES11新特性工作笔记050
- 2013总结和2014展望
- 【人脸识别】基于matlab PCA+LDA人脸识别【含Matlab源码 680期】
- 中播放*.mid格式及其它格式的音乐
- 【简单的小技巧】如何从网页上下载内嵌的PDF文件?
- 嵌入式linux指纹识别项目,基于嵌入式应用平台的指纹识别系统设计
- linux tomcat 验证码无法显示
- Windows系统连接蓝牙音箱,已连接,没有声音
- mysql属于dbms还是dbs_DB、DBMS和DBS三者之间有什么关系_数据库
- Review KD(2)
- 浙大版《C语言程序设计实验与习题指导(第3版)》题目集
- B1192 [HNOI2006]超级英雄Hero 二分图匹配