一、admin的使用

  

   app01的admin.py文件:

		 class BookConfig(admin.ModelAdmin):
list_display=[]
list_display_links=[]
list_filter=[]
search_fields=[] def patch(self,request,queryset):
pass
patch.short_desc=""
actions=[patch,] admin.site.register(Book,BookConfig)

  

二、admin的源码分析

  1.启动 

加载settings中的install_apps
from django.contrib import admin
autodiscover_modules('admin')

  2.注册

  

 源码:django.contrib.admin.sites模块
class AdminSite(object): def __init__(self):
self._registry = {} def register(self,model,admin_class=None):
# 设置配置类
if not admin_class:
admin_class = ModelAdmin self._registry[model] = admin_class(model, self) site = AdminSite() 每一个app下的admin.py文件:
from django.contrib import admin
admin.site.register(Book,BookConfig)
admin.site.register(Publish)

  

  3.设计urls

1 知识点
1 url(r"index/",views.index)
2 url方法的分发 # 分发
url(r"test/",([
url(r"yuan/",([
url(r"aaa/",aaa),
url(r"bbb/",bbb),
url(r"ccc/",ccc),
],None,None)), url(r"alex/",alex),
],None,None))
针对Food表,url:
http://127.0.0.1:8000/admin/app02/food/
http://127.0.0.1:8000/admin/app02/food/add/
http://127.0.0.1:8000/admin/app02/food/1/change/
http://127.0.0.1:8000/admin/app02/food/2/delete/ 3
model._meta.model_name :模型表的名称
model._meta.app_label :模型表所在app的名称 config_obj:某个model的配置类(自定义配置类或者默认配置类)对象

 

三、仿照admin实现一个自定义的增删改查组件

  1.随之django的启动,而注册模型

  

#app01/apps.py

from django.apps import AppConfig
from django.utils.module_loading import autodiscover_modules class App01Config(AppConfig):
name = 'app01' def ready(self):
autodiscover_modules('stark')

  2. 注册

 

# app01/stark.py

from stark.service.sites import site, ModelStark
from app01 import models print('app01................') class BookStark(ModelStark):
list_display = ['title', 'price', 'publishDate','publisher'] site.register(models.Book, BookStark) site.register(models.Publish)

  3 . 默认配置类ModelStark和全局组件类AdminSite

# stark/service/sites.py

from django.conf.urls import url
from django.shortcuts import HttpResponse, render class ModelStark(object):
list_display = ["__str__"] def __init__(self, model):
self.model = model def list_view(self, request):
header_list = []
for field in self.list_display:
field_obj = self.model._meta.get_field(field)
header_list.append(field_obj.verbose_name)
print(header_list) new_data_list = []
obj_list = self.model.objects.all()
for obj in obj_list:
temp = []
for field in self.list_display:
val = getattr(obj, field)
temp.append(val)
new_data_list.append(temp)
return render(request, 'list_view.html', locals()) def add_view(self, request):
return HttpResponse('add_view') def change_view(self, request, pk):
return HttpResponse('change_view') def del_view(self, request, pk):
return HttpResponse('del_view') def get_urls(self):
tmp = []
tmp.append(url(r'^$', self.list_view))
tmp.append(url(r'add/$', self.add_view))
tmp.append(url(r'(\d+)/delete/$', self.del_view))
tmp.append(url(r'(\d+)/change/$', self.change_view))
return tmp, None, None @property
def urls(self):
return self.get_urls() class AdminSite(object):
def __init__(self):
self._registy = {} def register(self, model, stark_class=None):
if not stark_class:
stark_class = ModelStark self._registy[model] = stark_class(model) def get_urls(self):
tmp = []
for model, config_obj in self._registy.items():
tmp.append(url(r"{}/{}/".format(model._meta.app_label, model._meta.model_name), config_obj.urls))
return tmp, None, None @property
def urls(self):
return self.get_urls() site = AdminSite()

  

   

  

day84-仿照admin实现一个自定义的增删改查组件的更多相关文章

  1. 仿照admin实现一个自定义的增删改查的组件

    1.首先,创建三个项目,app01,app02,stark,在settings里边记得配置.然后举例:在app01的model里边写表,用的db.sqlite3,所以数据库不用再settings里边配 ...

  2. BitAdminCore框架应用篇:(二)创建一个简单的增删改查模块

    NET Core应用框架之BitAdminCore框架应用篇系列 框架演示:http://bit.bitdao.cn 框架源码:https://github.com/chenyinxin/cookie ...

  3. 基于django做增删改查组件,分页器组件

    增删改查组件 一.Djangoadmin的启发 二.基于Djangoadmin实现数据的增删改查 分页器组件 分页器组件的介绍以及源码解读 补充:源码下载,

  4. Go Web --- 创建一个Article的增删改查

    掌握数据的增删改查之后,就可以做一些小demo,巩固一下基础,让语法更加熟练,所以下面是按照Go web编程里面的文章管理操作,写的一个代码: package main import ( " ...

  5. 自定义mvc增删改查

    对t_mvc_book表的增删改查 导入jar包 BaseDao package com.hmc.util; import java.lang.reflect.Field; import java.s ...

  6. 【良心保姆级教程】java手把手教你用swing写一个学生的增删改查模块

    很多刚入门的同学,不清楚如何用java.swing去开发出一个系统? 不清楚如何使用java代码去操作数据库进行增删改查一些列操作,不清楚java代码和数据库(mysql.sqlserver)之间怎么 ...

  7. 一个Servlet处理增删改查的方法

    处理的思路是在servlet中定义不同的增删改查方法,页面请求 的时候携带请求的参数,根据参数判断调用不同的方法. package cn.xm.small.Servlet; import java.i ...

  8. popup的简单应用举例(具体在增删改查组件中用到)以及补充的知识点

    一.首先说一下自执行函数 1. 立即执行函数是什么?也就是匿名函数 立即执行函数就是 声明一个匿名函数 马上调用这个匿名函数 2.popup的举例 点击,弹出一个新的窗口.保存完事,页面不刷新数据就返 ...

  9. Django项目----快速实现增删改查组件(起步阶段!!!)

    一.相关知识点回顾 1.什么是反射?   可以用字符串的方式去访问对象的属性 2.反射有四种方法? hasattr(object,name):判断一个对象是不是有name属性或者方法 getattr: ...

随机推荐

  1. C# 读取驱动器盘符及信息

    System.IO.DriveInfo[] hardDiskDrives = System.IO.DriveInfo.GetDrives(); foreach (System.IO.DriveInfo ...

  2. Golang channel 特性

    最近在项目中遇到了 Go channel 的一些问题,在此记录下 close channel 的一些特性. 关闭channel ch := make(chan bool) close(ch) clos ...

  3. springcloud-1: 用官方的pom.xml配置添加依赖失败

    在eclipse中用STS生成了一个springcloud应用,pom.xml的核心配置如下: <parent> <groupId>org.springframework.bo ...

  4. python习题实例(上)_update18/07/03

    用以记录python学习过程中做过的小习题~ ヾ(◍°∇°◍)ノ゙ 1.生成两个列表,分别存放将100以内的偶数&奇数 odd_number=[] even_number=[] for i i ...

  5. python-模块入门二(模块循环导入,区分python文件的两种用途,模块搜索路径,软件开发的目录规范)

    一.模块的循环导入问题 run.py # import m1 # 第一次导入 m1.py # 错误示范 ''' print('正在导入m1') from m2 import y #第一次导入m2 x= ...

  6. noj算法 装载问题 回溯法

    描述: 有两艘船,载重量分别是c1. c2,n个集装箱,重量是wi (i=1…n),且所有集装箱的总重量不超过c1+c2.确定是否有可能将所有集装箱全部装入两艘船. 输入: 多个测例,每个测例的输入占 ...

  7. Modbus库开发笔记之九:利用协议栈开发Modbus TCP Server应用

    前面我们已经完成了Modbus协议栈的开发,但这不是我们的目的.我们开发它的目的当然是要使用它来解决我们的实际问题.接下来我们就使用刚开发的Modbus协议栈开发一个Modbus TCP Server ...

  8. Confluence 6 Windows 中以服务方式自动重启为服务手动安装 Confluence 分发包

    在 Windows: 打开一个命令输入框,然后修改目录到 <CONFLUENCE-INSTALL>/bin 目录中.你需要以管理员权限运行这个命令行输入框(Run as administr ...

  9. Confluence 6 临时目录(安装目录)

    temp 目录是由 Java 运行时进行配置的,同时一些 Confluence 的组件将会写入历史文件或者锁定文件到这个目录中. 临时目录位于安装目录下的 /temp 目录中. 希望修改这个目录的位置 ...

  10. Confluence 6 升级自定义的站点和空间仔细测试你的修改

    修改可能对 Confluence 的后续版本不兼容,当你对 Confluence 进行升级的时候,你应该总是对你自定义修改的模板文件进行仔细的测试来确定所有的修改对新版本的 Confluence 兼容 ...