Stark组件

Posted knighterrant

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Stark组件 相关的知识,希望对你有一定的参考价值。

Stark组件构建

1.启动所有app下的stark.py文件,的配置实现步骤

1.创建一个Django项目crm,并创建  app1 ,app2, stark 三个app

技术分享图片

2.在crm 项目的settings中配置:

INSTALLED_APPS = [
    django.contrib.admin,
    django.contrib.auth,
    django.contrib.contenttypes,
    django.contrib.sessions,
    django.contrib.messages,
    django.contrib.staticfiles,
    ‘app1.apps.App1Config‘,
    ‘app2.apps.App2Config‘,
    ‘stark.apps.StarkConfig‘,
]

3.在app1 和app2 下分别新建一个stark.py 的文件

 

技术分享图片

 

4.在stark     app.py 文件中 :

技术分享图片
from django.apps import AppConfig

from django.utils.module_loading import autodiscover_modules

class StarkConfig(AppConfig):
    name = stark

    def ready(self):
        autodiscover_modules(stark)
stark的app.py文件中

 

技术分享图片

 

以上步骤完成后,crm项目一启动,就可以执行所有(app1和app2)下的stark.py 文件:

测试,在app1 的stark.py 文件中写入测试代码:print("app1...."),在app2的stark.py 文件中写入测试代码:print("app2...")

测试结果:

技术分享图片

 

2.注册模型类

1.在stark app 中创建一个service包

 2.然后在service文件夹 中创建sites.py 文件(stark组件源码的位置),该文件下有模型类 ,基础类

技术分享图片

3.在app1 和app2 的model.py 文件中:

技术分享图片
from django.db import models

# Create your models here.
from django.db import models

# Create your models here.
class Book(models.Model):
    title = models.CharField( max_length=32,verbose_name="书籍名称")
    pub_date=models.DateField(verbose_name="出版日期")
    price=models.DecimalField(max_digits=5,decimal_places=2,verbose_name="价格")
    publish=models.ForeignKey(to="Publish",to_field="id",on_delete=models.CASCADE,null=True)
    authors=models.ManyToManyField("Author",db_table="book2authors") # 创建关系表
    def __str__(self):
        return self.title

class Publish(models.Model):
    name=models.CharField( max_length=32,verbose_name="名字")
    city=models.CharField( max_length=32)
    email=models.CharField(max_length=32)
    def __str__(self):
        return self.name

class Author(models.Model):
    name=models.CharField( max_length=32)
    age=models.IntegerField()
    #books=models.ManyToManyField("Book")
    ad=models.OneToOneField("AuthorDetail",null=True,on_delete=models.CASCADE)
    def __str__(self):
        return self.name
class AuthorDetail(models.Model):
    birthday=models.DateField()
    telephone=models.BigIntegerField()
    addr=models.CharField( max_length=64)
    # author=models.OneToOneField("Author",on_delete=models.CASCADE)
    def __str__(self):
        return str(self.telephone)
app1 model.py 文件中内容
技术分享图片
from django.db import models

# Create your models here.

class Article(models.Model):
    title=models.CharField(max_length=32)
    def __str__(self):
        return self.title
app2 model.py 文件中

在项目下进行数据迁移,执行:

python manage.py  makemigrations

prython manage.py migrate

 

4.到某一个app (以app1为例)下的stark.py文件中注册:

技术分享图片
from stark.service.sites import site ,ModelStark#导入实例化好的单例对象

from . import models


class Bookconfig(ModelStark):
    pass


site.register(models.Book,Bookconfig)

site.register(models.Publish)

print(site._registry)
app1 下stark.py 中

技术分享图片

 以上基本实现了stark组件的注册效果。

3.二级分发

1.静态文件和模板引入问题

  1.django 中每个app 下可以创建自己的templates包,django先会去全局的templates,在去每一个app 下的templates下找模板文件(按app 注册顺序找)

  2.所以为了避免全局的模板文件和app先的模板文件重名,在stark app templates 文件夹下再建一个stark文件夹 用来存放模板文件。

  3. app下(此处指stark  app )创建静态文件夹static , 并且app 创建的静态文件夹,不需要进行相关的配置,就可以直接用。因为django 会默认去每个app 下找静态文件。

  4.静态文件的引入:

技术分享图片

 2.  新语法

from app1.models import Book

obj = Book._meta.get_field("title")

   # obj 为 一个field 对象       打印结果: <django.db.models.fields.CharField: title>

print(obj.verbose_name)   
#  默认打印为“title” ,如果模型类中设置为该字段设置了,verbose_name="书籍名称”
#则会打印书籍名称

 

以上是关于Stark组件 的主要内容,如果未能解决你的问题,请参考以下文章

模拟admin组件自己开发stark组件之搜索和批量操作

stark组件4_pop功能

django 之 stark组件

Stark组件

10.20stark组件已经完工

stark组件之批量操作模仿Django的admin