首先创建一个名为stark_test的Django项目,创建2个app一个名为app01用来测试stark组件,一个就叫做stark,用来放stark组件
如图:
我们这里使用的是Django自带的数据库,因为没什么影响,如果你想使用其他数据库也是一样的。
创建好项目后,就要思考一下,你想想Django项目app里面有个admin.py文件每次你启动的时候都会自动执行这个文件。所以我们也要创建一个类似的文件,我们创建名字为stark.py ,然后就要添加让其自动执行这个文件的方法了。
我们通过进去admin里面可以发现是这里面的代码使其能够自动执行admin.py .如图:
我们也可以在stark里面的apps.py 里面添加以下代码用来实现其功能
from django.apps import AppConfig# 导入模块from django.utils.module_loading import autodiscover_modulesclass StarkConfig(AppConfig): name = 'stark' # 启动Django时如果有ready方法会执行里面的代码 def ready(self): autodiscover_modules('stark') # stark为要执行的py文件。
然后我们测试一下是否能自动执行。我们在app01下创建一个stark.py 文件在里面添加print("stark run!!!"),然后启动项目。发现能在启动时打印出stark run!!!了。如图:
然后我们就可以仿照admin源码进行编写我们的stark代码了。
首先在stark目录下创建一个名为services的python包。在里面创建一个stark.py文件。:
我们要在这里面编写仿照admin的代码():
# 默认的样式。这里没怎么完善的class ModelStark(object): def __init__(self, model, site): self.model = model self.site = site# 自己编写一个类。仿照admin的结构class StarkSite(object): def __init__(self): self._registry = {} def register(self, model, stark_class=None): # 判断是否有自定义的样式 if not stark_class: stark_class = ModelStark self._registry[model] = stark_class(model, self)# 形成单例模式(模块的单例模式)site = StarkSite()
写完这里后,就要注册一下了。但是注册前要创建数据表用来测试。在app01的models.py里面创建一个表用来测
from django.db import models# Create your models here.class UserInfo(models.Model): name = models.CharField(max_length=32) age = models.IntegerField()
然后进行makemigrations和migrate。生成表。
然后就进行注册了。没使用的注册:
# -*- coding: utf-8 -*-# @Time : 2019/4/11 下午 9:52# @Author : lh# @Email : 2470937072@qq.com# @File : stark.py# @Software: PyCharmfrom stark.service.stark import site, ModelStarkfrom .models import *# # 自己定义样式不使用ModelStark的自带样式# class UserInfoConfig(ModelStark):# pass# 就像注册admin那样注册表进site里面# site.register(UserInfo, UserInfoConfig)site.register(UserInfo)print(site._registry)
我们先看看没有使用stark的效果。
把表注册进去。在app01的stark.py 里面编写:
# -*- coding: utf-8 -*-# @Time : 2019/4/11 下午 9:52# @Author : lh# @Email : 2@qq.com# @File : stark.py# @Software: PyCharmfrom stark.service.stark import site, ModelStarkfrom .models import *# 自己定义样式不使用ModelStark的自带样式class UserInfoConfig(ModelStark): pass# 就像注册admin那样注册表进site里面site.register(UserInfo, UserInfoConfig)print(site._registry)
然后重启项目你会发现使用的是自己定义的样式:
这就是最基础的stark搭建了。功能后面再完善