Django——stark组件

  stark组件是仿照django的admin模块开发的一套组件,它的作用是在网页上对注册的数据表进行增删改查操作。

一、配置

 1、创建stark应用,在settings.py中注册stark应用

  stark APP专门用于存放自定义组件的核心代码。

manage.py@stark_demo > startapp stark

  在settings.py文件注册stark:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config',
    'stark.apps.StarkConfig',
]

2、项目启动加载每一个app下的所有stark文件

  在stark项目的apps.py文件加上下面的代码,ready函数的作用是让Django在启动时自动扫描每一个app下面的stark.py文件

from django.apps import AppConfig
from django.utils.module_loading import autodiscover_modules
    
class StarkConfig(AppConfig):
    name = 'stark'
    
    # 程序启动时,扫描app下得指定文件(stark.py)并执行 
    def ready(self):
        autodiscover_modules('stark')    

3、app01/models.py中创建模型

class UserInfo(models.Model):
    name=models.CharField(max_length=32)
    age=models.IntegerField()

    def __str__(self):
        return self.name


class Book(models.Model):
    title=models.CharField(max_length=32)

    def __str__(self):
        return self.title

  执行数据迁移和创建超级用户操作:

makemigrations

migrate

createsuperuser (yuan yuan1234)

4、admin.py配置

from django.contrib import admin

# Register your models here.
from .models import *

class UserAdmin(admin.ModelAdmin):
    list_display = ["pk",'name','age']
    list_filter = ['name','age']

    # 定制action具体方法
    def func(self,request,queryset):
        queryset.update(age=44)

    func.short_description = "批量初始化操作"
    actions = [func]

admin.site.register(UserInfo, UserAdmin)
admin.site.register(Book)

5、程序运行显示效果

  

二、stark组件开发

1、首先创建一个Python包,创建一个stark.py文件

  

2、stark/service/stark.py(单例)

class ModelStark(object):
    list_display=[]

    def __init__(self,model,site):
        self.model=model
        self.site=site


class StarkSite(object):
    def __init__(self):
        self._registry = {}

    def register(self, model, stark_class=None, **options):
        if not stark_class:
            # 如果注册的时候没有自定义配置类,执行
            stark_class = ModelStark   # 配置类

        # 将配置类对象加到_registry字典中,键为模型类
        self._registry[model] = stark_class(model, self)   # _registry={'model':stark_class(model)}


site = StarkSite()

(1)在使用admin组件的时候,是在我们注册时候调用一个单例对象site进行注册。stark中同样生成了一个site单例对象。然后在app01的stark文件导入:

from stark.service.stark import site

  这样就通过使用python模块的方式实现了单例模式。

(2)通过单例对象site调用注册方法,所以需要在StarkSite类创建一个register方法。  

3、app01/stark.py

from app01 import models
from stark.service.stark import site, ModelStark

# 自定义配置类
class BookConfig(ModelStark):
    pass

site.register(models.Book, BookConfig)
site.register(models.UserInfo)

  注册之后,启动项目就会将我们注册的模型类添加到字典_registry中.

猜你喜欢

转载自www.cnblogs.com/xiugeng/p/9501611.html