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="书籍名称”
#则会打印书籍名称

猜你喜欢

转载自www.cnblogs.com/knighterrant/p/10272253.html