2018-10-10 15:11:55

这几天讲的是xadmin插件

就是把表单,数据内容封装到类里面,简化的增删改查步骤!

放上源代码:

app01/xadim.py

from django.contrib import admin

# Register your models here.

from Xadmin.service.Xadmin import site,ModelXadmin

print("app01 Xadmin")

from app01.models import *
from django.utils.safestring import mark_safe class BookConfig(ModelXadmin):
def edit(self,obj=None,is_header=False):
if is_header:
return "操作"
# 反向解析:url
return mark_safe("<a href='%s/change/'>编辑</a>"%obj.pk) def delete(self,obj=None,is_header=False): if is_header:
return "操作" return mark_safe("<a href=''>删除</a>") def check(self,obj=None,is_header=False):
if is_header:
return "选择" return mark_safe("<input type='checkbox'>") list_display=[check,"nid","title","publish",edit,delete]
#list_display=["nid","title","publish"] site.register(Book,BookConfig) site.register(Publish)
site.register(Author)
site.register(AuthorDetail)

app02/xadmin.py

from Xadmin.service.Xadmin import site,ModelXadmin

from app02.models import *

site.register(Order)

class FoodConfig(ModelXadmin):
list_display = ["id","title"]
site.register(Food,FoodConfig) print("_registry",site._registry)

Xadmin/service/xadmin.py

from django.conf.urls import url
from django.shortcuts import HttpResponse,render,redirect
class ModelXadmin(object):
list_display=["__str__",]
def __init__(self,model,site): self.model=model
self.site=site def list_view(self, request):
print("self.model", self.model) # 用户访问哪张表,self.model就是谁。
model_name=self.model._meta.model_name
data_list = self.model.objects.all()
print("list_display:",self.list_display) ## ['title', 'prcie'] # 处理表头
#header_list=["ID","书籍名称","出版社"]
header_list=[] for field in self.list_display: # [check,"nid","title","publish",edit,delete]
if isinstance(field,str):
if field=="__str__":
val= self.model._meta.model_name.upper()
else:
field_obj=self.model._meta.get_field(field)
val=field_obj.verbose_name else:
val=field(self,is_header=True) # 获取表头,传is_header=True header_list.append(val)
# 处理表单数据
new_data_list=[]
for obj in data_list: # data_list [book_obj,book_obj2,...] temp=[]
for field in self.list_display: # ['title', 'prcie',edit,delete]
if isinstance(field,str):
val=getattr(obj,field)
else:
val=field(self,obj) temp.append(val) new_data_list.append(temp) '''
new_data_list=[
["北京折叠",122,<a href=''>编辑</a>,<a href=''>删除</a>],
["三体", 222,<a href=''>编辑</a>,<a href=''>删除</a>],
]
''' return render(request, 'list_view.html', {"new_data_list": new_data_list,"model_name":model_name,"header_list":header_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 @property
def urls2(self):
return self.get_urls2(), None, None class XadminSite(object): 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():
# 获取当前循环的model的字符串与所在app的字符串
app_name = model._meta.app_label # "app01"
model_name = model._meta.model_name # "book" temp.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 @property
def urls(self):
return self.get_urls(),None,None def register(self, model, admin_class=None, **options):
if not admin_class:
admin_class = ModelXadmin self._registry[model] = admin_class(model, self) # {Book:ModelAdmin(Book),Publish:ModelAdmin(Publish)} site=XadminSite()

10.10xadmin的更多相关文章

  1. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...

  2. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...

  3. ArcGIS 10.0紧凑型切片读写方法

    首先介绍一下ArcGIS10.0的缓存机制: 切片方案 切片方案包括缓存的比例级别.切片尺寸和切片原点.这些属性定义缓存边界的存在位置,在某些客户端中叠加缓存时匹配这些属性十分重要.图像格式和抗锯齿等 ...

  4. CI Weekly #10 | 2017 DevOps 趋势预测

    2016 年的最后几个工作日,我们对 flow.ci Android & iOS 项目做了一些优化与修复: iOS 镜像 cocoapods 版本更新: fir iOS上传插件时间问题修复: ...

  5. 10个最好用的HTML/CSS 工具、插件和资料库

    大家在使用HTML/CSS开发项目的过程中,有使用过哪些工具,插件和库?下面介绍的10种HTML/CSS工具,插件和资料库,是国外程序员经常用到的. Firebug Lite FirebugLite ...

  6. 【Win 10 应用开发】启动远程设备上的应用

    这个功能必须在“红石-1”(build 14393)以上的系统版中才能使用,运行在一台设备上的应用,可以通过URI来启动另一台设备上的应用.激活远程应用需要以下前提: 系统必须是build 14393 ...

  7. 在Ubuntu 16.10安装mysql workbench报未安装软件包 libpng12-0错误

    1.安装mysql workbench,提示未安装软件包 libpng12-0 下载了MySQL Workbench 6.3.8   在安装的时候报错: -1ubu1604-amd64.deb 提示: ...

  8. Ubuntu 16.10 安装byzanz截取动态效果图工具

    1.了解byzanz截取动态效果图工具 byzanz能制作文件小,清晰的GIF动态效果图,不足就是,目前只能通过输入命令方式来录制. byzanz主要的参数选项有: -d, --duration=SE ...

  9. Ubuntu 16.10 安装KolourPaint 4画图工具

    KolourPaint 4画图工具简单实用,可以绘画.视频处理和图标编辑: • 绘画:绘制图表和“手绘” • 视频处理:编辑截图和照片;应用特效 • 图标编辑:绘画剪贴和标识透明化 1.在Ubuntu ...

随机推荐

  1. EF6 DbModelBuilder

    protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Produc ...

  2. JFinal提示:java.lang.RuntimeException: dao 只允许调用查询方法

    public class UserModel extends Model<UserModel>{ public static final UserModel userDao = new U ...

  3. NIO-新的io操作方式

    1.BIO带来的挑战 BIO即阻塞IO,不管是磁盘IO,还是网络IO,数据在写入OutputStream或者从InputStream读取时都有可能发生阻塞,一旦有阻塞,当前线程将会被挂起,即线程进入非 ...

  4. php调试用的几个小方法

    1.PHP把一个对象转化成json字符串 $json_string = json_encode($object, JSON_FORCE_OBJECT); json_encode($object); / ...

  5. Oracle 12c RMAN备份文档

    创建备份目录,查看剩余空间 [cistest@cistest ~]$ df -h df: '/home/oratest/.gvfs': Permission denied Filesystem Siz ...

  6. DropDMG for Mac(dmg 文件打包工具)破解版安装

    1.软件简介    DropDMG 是 macOS 系统上的一款帮助用户快速打包 DMG 文件的 Mac 文件管理软件,DropDMG 不但可以将影像档加密.更可以配合 GZip .BZip2 .Ma ...

  7. ajax请求中的6个全局事件

    //事件触发顺序ajaxStart,ajaxSend,ajaxSuccess或ajaxError,ajaxComplete,ajaxStop $(document).ajaxStart(functio ...

  8. python prettytable模块

    简介 Python通过PrettyTable模块可以将输出内容如表格方式整齐地输出. 安装 pip install prettytable 1 示例 from prettytable import P ...

  9. 【iCore1S 双核心板_ARM】例程一:ARM驱动三色LED

    实验原理: 通过STM32的三个GPIO驱动一个三色LED,引脚PF3接蓝色LED(ARM_LEDB), 引脚PF4接绿色LED(ARM_LEDG),引脚PF5接红色LED(ARM_LEDR),  G ...

  10. 【GMT43智能液晶模块】例程六:WWDG看门狗实验——复位ARM

    实验原理: STM32内部包含窗口看门狗,通过看门狗可以监控程序运行,程序运行 错误时,未在规定时间喂狗,自动复位ARM.本实验通过UI界面中按钮按下 停止喂狗,制造程序运行错误,从而产生复位. 示例 ...