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="书籍名称” #则会打印书籍名称
原文地址:https://www.cnblogs.com/knighterrant/p/10272253.html