一、先看下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】的更多相关文章

  1. stark组件之路由分发【模仿Django的admin】

    一.先看下django的admin是如何进行路由分发的 1.先看下django的admin的url路径有哪些 其实很简单,假如有一个书籍表,那么每张表对应四个url,增.删.改.查 查看的url ht ...

  2. stark组件之启动【模仿Django的admin】

    首先需要在settings注册app INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib ...

  3. stark组件之pop操作【模仿Django的admin】

    一.先看下什么django的admin的pop到底是个什么东西 其实就是这么一个东西, a.在添加页面,在一对多和多对多的项后加了一个+号 b.点击这个加号,会弹出对应的添加 页面,在新的添加 c.添 ...

  4. stark组件之批量操作【模仿Django的admin】

    一.先看下django的admin是如何实现批量操作 首先在配置类中定义一个函数 然后我们为这个函数对象设置一个属性,这个属性主要用来显示在select标签中显示的文本内容 最后把函数对象放到一个ac ...

  5. stark组件之搜索【模仿Django的admin】

    一.先看下django的admin是如何做搜索功能的 配置一个search_fields的列表就可以实现搜索的功能 class testbook(admin.ModelAdmin): # 第一步,定义 ...

  6. stark组件之过滤操作【模仿Django的admin】

    一.先看下django的admin是如何实现过滤操作 首先在配置类中顶一个list_filter的列表,把要过滤的字段作为元素写i进去就可以了 class testbook(admin.ModelAd ...

  7. stark组件之分页【模仿Django的admin】

    我们的stark组件用的我们的分页组件,没有重新写 下面直接看下分页的代码 class page_helper(): def __init__(self, count, current_page, p ...

  8. stark组件之注册与路由系统(三)

    在文章stark组件前戏中已经提到过,django的注册功能是通过AdminSite的单例进行组册的,所以在这里也可以进行单例模式. class AdminSite(object): def __in ...

  9. admin源码解析以及仿照admin设计stark组件

    ---恢复内容开始--- admin源码解析 一 启动:每个APP下的apps.py文件中. 首先执行每个APP下的admin.py 文件. def autodiscover(): autodisco ...

随机推荐

  1. hIve—timestamp时间戳问题

    先查看表 timestamp可以转换为标准的时间(精确到秒);https://tool.lu/timestamp/ 这个时间格式用处很多: 多个时间可以使用函数,来切换. 每个用户 产生行为的时候,用 ...

  2. 我要重新开始学习C++了!

    C++实在是博大精深!之前总不想读厚厚的C++ Primer. 然而,现在的水平真的只是初学者!只是因为写的代码太简单,所以没有用到一些特性.可以说还是门外汉! 写笔记!

  3. mysql5.7.21免安装版配置步骤

    1. 下载mysql5.7.21 地址https://dev.mysql.com/downloads/mysql/ 2. 解压缩 任何文件夹都行,为了避免放在系统盘,我放到了E盘,目录为E:\Prog ...

  4. vue:一个vue可以使用的视频插件

    网址:https://www.jianshu.com/p/e8e747e33ef0 1:安装依赖 npm install vue-video-player -S 2:引入配置(main.js) imp ...

  5. 何谓domReady

    我的博客已经写过好几篇如何实现domReady的文章,最近做培训,面向新手们,需要彻彻底底向他们说明这个东西,于是就有了这篇文章. 我们经常看人们用 document.getElementById(& ...

  6. Module build failed: Error: Cannot find module 'url-loader' 的坑

    本文地址:http://www.cnblogs.com/jying/p/8280956.html 开发环境:react.webpack.es5 引用图片报错:Module build failed: ...

  7. hibernate 工作原理及为什么要用

  8. pom配置详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  9. webstocket 聊天

    /** * 初始化socket **/ function initSocket(index_host){//端口号 if( !window.WebSocket ){ console.log(" ...

  10. cd-hit软件

    参考网址:https://www.jianshu.com/p/57af07b9e986 1.安装 wget https://github.com/weizhongli/cdhit/releases/d ...