stark组件之注册【模仿Django的admin】
一、先看下django的admin是如何实现注册功能
首先导入admin这个对象和我们的model模块
from django.contrib import admin # Register your models here. from app1 import models
然后调用admin的register方法进行注册
admin.site.register(models.book,testbook)
admin.site.register(models.publist)
admin.site.register(models.auther)
我们看下页面的效果,这里我们就可以看到我们注册的表,然后就可以对表做各种增删改查的操作了

二、然后在看下stark组件是如何实现注册功能的
首先需要在我们的stark组件的apps文件定义一下,扫码所有的app的stark.py文件,并执行
from django.apps import AppConfig
from django.utils.module_loading import autodiscover_modules class StarkConfig(AppConfig):
name = 'stark' def ready(self):
# 扫描所有的stark.py文件,并执行
autodiscover_modules("stark")

下面我们开始进行注册的功能
这里我们要用到一个单例对象,也就是所有的app只要通过stark组件进行注册,那么他们使用同一个单例对象

然后我们看下Starksite类中的register方法
class Starksite(object):
def __init__(self):
self._register = {} def register(self,model,stark_class=None):
if not stark_class:
stark_class = Starkclass self._register[model] = stark_class(model,self)
先初始化一个空的字典的变量

然后定义一个register方法
def register(self,model,stark_class=None):
if not stark_class:
stark_class = Starkclass self._register[model] = stark_class(model,self)
这里的model是就是我们要注册的表,这里stark_class就是我们要注册的表的对应的类,比如要显示哪些字段啊的配置信息,用户可以不传递这个配置类,我们为这个参数传递了一个默认参数为None,如果用户没有传递这个配置类,那么我们就用默认的配置类即可
下面是我们默认的配置类,只要在客户自定义的类中有的参数,这里必须要来一份
class Starkclass(object):
list_display = ['__str__']
list_display_links = []
search_fields = []
modelformclass = None
actions = []
下面我们看下注册的的方法
from stark.services import stark
from django.utils.safestring import mark_safe from app1 import models from django.forms import ModelForm
from django import forms class mybookmodelform(forms.ModelForm):
class Meta:
model = models.book
fields = '__all__'
labels = {
"title":"书籍名称",
"price":"书籍价格"
} class bookclass(stark.Starkclass): list_display = ["id","title","price","auther","publish"]
list_display_links = ["id","price","auther"]
search_fields = ["title","price"]
def test_action(self,request,queryset):
print(queryset,) actions = [test_action]
# test_action.__name__ = "测试批量操作的函数"
test_action.short_description = "测试批量操作的函数" modelformclass = mybookmodelform list_filter = ["title","auther", "publish",] stark.site.register(models.book,bookclass) stark.site.register(models.auther) stark.site.register(models.publist) stark.site.register(models.test)
这里我们在看默认的配置类对象的__init__方法
class Starkclass(object):
list_display = ['__str__']
list_display_links = []
search_fields = []
modelformclass = None
actions = [] list_filter = [] def __init__(self,model,site):
self.model = model
self.site = site
他需要3个参数
参数1:这个类的实例对象
参数2:表对应的对象实例
参数3:单例对象
然后我们在看下我们的注册的函数
def register(self,model,stark_class=None):
if not stark_class:
stark_class = Starkclass self._register[model] = stark_class(model,self)

然后在看下我们自定义配置类的是怎么定义的
class bookclass(stark.Starkclass):
list_display = ["id","title","price","auther","publish"]
list_display_links = ["id","price","auther"]
search_fields = ["title","price"]
def test_action(self,request,queryset):
print(queryset,)
actions = [test_action]
# test_action.__name__ = "测试批量操作的函数"
test_action.short_description = "测试批量操作的函数"
modelformclass = mybookmodelform
list_filter = ["title","auther", "publish",]
stark.site.register(models.book,bookclass)
def register(self,model,stark_class=None):
if not stark_class:
stark_class = Starkclass self._register[model] = stark_class(model,self)
这里传递一个表的对象,和这个表的配置类,切记,这里是传递了一个这个表的配置类,而不是对象,我们在register函数中在实例化这个配置类
stark组件之注册【模仿Django的admin】的更多相关文章
- stark组件之路由分发【模仿Django的admin】
一.先看下django的admin是如何进行路由分发的 1.先看下django的admin的url路径有哪些 其实很简单,假如有一个书籍表,那么每张表对应四个url,增.删.改.查 查看的url ht ...
- stark组件之启动【模仿Django的admin】
首先需要在settings注册app INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib ...
- stark组件之pop操作【模仿Django的admin】
一.先看下什么django的admin的pop到底是个什么东西 其实就是这么一个东西, a.在添加页面,在一对多和多对多的项后加了一个+号 b.点击这个加号,会弹出对应的添加 页面,在新的添加 c.添 ...
- stark组件之批量操作【模仿Django的admin】
一.先看下django的admin是如何实现批量操作 首先在配置类中定义一个函数 然后我们为这个函数对象设置一个属性,这个属性主要用来显示在select标签中显示的文本内容 最后把函数对象放到一个ac ...
- stark组件之搜索【模仿Django的admin】
一.先看下django的admin是如何做搜索功能的 配置一个search_fields的列表就可以实现搜索的功能 class testbook(admin.ModelAdmin): # 第一步,定义 ...
- stark组件之过滤操作【模仿Django的admin】
一.先看下django的admin是如何实现过滤操作 首先在配置类中顶一个list_filter的列表,把要过滤的字段作为元素写i进去就可以了 class testbook(admin.ModelAd ...
- stark组件之分页【模仿Django的admin】
我们的stark组件用的我们的分页组件,没有重新写 下面直接看下分页的代码 class page_helper(): def __init__(self, count, current_page, p ...
- stark组件之注册与路由系统(三)
在文章stark组件前戏中已经提到过,django的注册功能是通过AdminSite的单例进行组册的,所以在这里也可以进行单例模式. class AdminSite(object): def __in ...
- admin源码解析以及仿照admin设计stark组件
---恢复内容开始--- admin源码解析 一 启动:每个APP下的apps.py文件中. 首先执行每个APP下的admin.py 文件. def autodiscover(): autodisco ...
随机推荐
- Linux kafka 单机安装
Kafka地址(选择最新地址1.1.1) http://archive.apache.org/dist/kafka/
- Directshow 采集与FFDshow 冲突
在使用Directshow 进行视频采集的时候,发现与本地安装的一个ffdshow有冲突. 见下图: 经过测试发现dshow 在设置采集媒体类型的时候,如果设置RGB32就会崩溃,如果设置RGB24就 ...
- javascript的DOM操作获取元素
一.document.getElementById() 根据Id获取元素节点 <div id="div1"> <p id="p1"> ...
- BlockingQueue之DelayQueue的学习使用
DelayQueue 是一中阻塞队列,需要实现接口Delayed定义的方法.做下使用记录和心得吧, @Datapublic class DelayQueueExample implements Del ...
- 利用目录函数(opendir,readdir,closedir)查找文件个数
如何知道一个目录下的所有文件个数呢?或许可以用tree来学(zhuang)习(bi)的同时知道文件个数.Linux系统io函数为我们提供了目录操作函数,其中有一个比较重要(实际上有三个,因为它们经常配 ...
- 跨域(二)——WebSocket
严格地说,WebSocket技术不属于HTML5,这个技术是对HTTP无状态连接的一种革新,本质就是一种持久性socket连接,在浏览器客户端通过javascript进行初始化连接后,就可以监听相关的 ...
- 卸载数据盘、更改Inodes
更改inodes 会格式化数据库,记得先备份 1.fuser -m -v /dev/vdb查看哪些进程正在占用数据库 2.然后kill 掉进程 3.umount /data1/ 4.mkfs.ext ...
- Rust语言学习笔记(5)
Structs(结构体) struct User { username: String, email: String, sign_in_count: u64, active: bool, } let ...
- 基础的正则表达式与re模块(2)
一.元字符 字符组是元字符中的一个.在字符组中所有的字符都可以匹配任意一个字符位置上能出现的内容,如果在字符串中有任意一个字符是字符组中的内容,那么就是匹配上的项. [0-9] [a-z] ...
- 学习BOS物流项目第九天
1 教学计划 1.业务受理需求分析 a. 业务通知单 b.工单 c.工作单 2.创建业务受理环节的数据表 a.业务通知单 b.工单 c.工作单 3.实现业务受理自动分单 a.在CRM服务端扩展方法根据 ...