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.二级分发

class ModelStark():
def __init__(self,model):
self.model=model def list_view(self,request): return HttpResponse("list_view") def add_view(self, request):
return HttpResponse("add_view") def change_view(self, request):
return HttpResponse("change_view") def delete_view(self, request):
return HttpResponse("delete_view") @property
def urls(self): tmp= [
path("",self.list_view),
path("add/",self.add_view),
path("(\d+)/change/",self.change_view),
path("(\d+)/delete/",self.delete_view),
] return tmp,None,None
class StarkSite(): def __init__(self):
self._rigistry={} def register(self,model,stark_class=None): stark_class = stark_class or ModelStark self._rigistry[model] = stark_class(model) @property
def urls(self):
tmp = []
for model,config_obj in self._rigistry.items():
app1_name = model._meta.app_label
model_name = model._meta.model_name
tmp.append(
path("%s/%s/"%(app1_name,model_name),config_obj.urls)
) return
tmp,None,None site = StarkSite()

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组件 (一)的更多相关文章

  1. 【django之stark组件】

    一.需求 仿照django的admin,开发自己的stark组件.实现类似数据库客户端的功能,对数据进行增删改查. 二.实现 1.在settings配置中分别注册这三个app # Applicatio ...

  2. django 之 stark组件

    ----------------------------------------------------------------烦恼没完没了,内心动荡不安,呜呼哀哉. 一.有个特殊的需求,需要用sta ...

  3. 设计stark组件

    设计stark组件 作者:Eric 微信:loveoracle11g 新建Django项目crm_1随便起名 然后再创建一个App manage.py@crm_1 > startapp star ...

  4. stark组件的分页,模糊查询,批量删除

    1.分页组件高阶 2.整合展示数据showlist类 3.stark组件之分页 3.stark组件之search模糊查询 4.action批量处理数据 4.总结 1.分页组件高阶 1.分页的class ...

  5. stark组件配置,二层URL

    1.django的admin配置 2 stark组件开发 3.2层url分发 4.小结 1.django的admin配置 model.py from django.db import models # ...

  6. CRM项目之stark组件

    . stark也是一个app(用startapp stark创建),目标时把这个做成一个可以拔插的组件 . setting文件下INSTALLED_APPS 路径要配置好(app的注册) . 写好si ...

  7. stark组件开发之列表页面应用示例

    已经解决的,自定义的扩展函数,功能.但是 不可能返回. 一个 固定的页面把!  应该是,点击那条 记录之后的编辑, 就会跳转到相应的,编辑页面.所以 这个标签的  <a href="/ ...

  8. Django之stark组件

    现在让我说啥是stark组件,我也说不清楚.反正从今天讲的知识来看,今天完成的就是自己写一个模块,这个模块包含了admin后台管理工具的一些比较好用的功能,我们把它提炼出来,也就是相当于自己写一个ad ...

  9. CRM项目之stark组件(2)

    那么从今天开始呢,我们就要开始设计属于我们自己的admin组件,起个名字就叫stark吧(当然你愿意叫什么都可以). stark组件之四步走 仿照admin组件实现流程,stark组件要实现四件事情: ...

  10. python 全栈开发,Day112(内容回顾,单例模式,路由系统,stark组件)

    一.内容回顾 类可否作为字典的key 初级 举例: class Foo(object): pass _registry = { Foo:123 } print(_registry) 执行输出: {&l ...

随机推荐

  1. 【lg1799】数列

    题目描述 虽然msh长大了,但她还是很喜欢找点游戏自娱自乐.有一天,她在纸上写了一串数字:1,l,2,5,4.接着她擦掉了一个l,结果发现剩下l,2,4都在自己所在的位置上,即1在第1位,2在第2位, ...

  2. P4556 [Vani有约会]雨天的尾巴

    目录 思路 优化 过程中的问题/疑问 错误 代码 思路 每个节点维护一课线段树(当然是动态开点) 线段树的作用是统计这个节点有多少种粮食型号,以及最多的粮食型号 然后树上差分,u和v点 +1,lca( ...

  3. L2-001:dijskstra + 多条最短路径 + 记录中间路径

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805073643683840 思路: dijkstra算出最短路 ...

  4. (转)Understanding Memory in Deep Learning Systems: The Neuroscience, Psychology and Technology Perspectives

    Understanding Memory in Deep Learning Systems: The Neuroscience, Psychology and Technology Perspecti ...

  5. Java创建对象的几种方式。

    Java创建对象的几种方式(重要): (1) 用new语句创建对象,这是最常见的创建对象的方法. (2) 运用反射手段,调用java.lang.Class或者java.lang.reflect.Con ...

  6. Kylin简介

    来源 Cube: 用空间换时间(类似:BI分析) 预计算把用户需要查询的维度以及他们所对应的考量的值,存储在多维空间里 当用户查询某几个维度的时候,通过这些维度条件去定位到预计算的向量空间,通过再聚合 ...

  7. JS加载获取父窗体传递的参数

    JS加载获取父窗体传递的参数 $(document).ready(function () { var query = location.search.substring(1); var values ...

  8. perl hash array 嵌套 push

    $hash{"A"}=["pp"];想变成:$hash{"A"}=["p","q"];因为 $has ...

  9. 前端分页插件bootstrapPaginator的使用

     引入bootstrap-paginator.js <table class="table table-striped table-bordered table-hover dataT ...

  10. Vue--获取数据

    一.Jsonp抓取数据 用 npm 安装 jsonp npm install jsonp 创建 jsonp.js import originJsonp from 'jsonp' export defa ...