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. CSS的再深入(更新中···)

    在上一章我们提到了一个新的概念,叫做块级样式,讲到这里就要科普一下: 标签又分为两种: (1)块级标签 元素特征:会独占一行,无论内容多少,可以设置宽高··· (2)内敛标签(又叫做行内标签) 元素特 ...

  2. git给log设置别名来快速查看友好的log信息

    把lg配置成了:git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(y ...

  3. Git rebase的使用

    rebase 在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase. 在本节中我们将学习什么是“rebase”,怎样使用“rebase”,并将展示该操作的惊艳之处,以及指 ...

  4. POJ 2018 Best Cow Fences(二分最大区间平均数)题解

    题意:给出长度>=f的最大连续区间平均数 思路:二分这个平均数,然后O(n)判断是否可行,再调整l,r.判断方法是,先求出每个数对这个平均数的贡献,再求出长度>=f的最大贡献的区间,如果这 ...

  5. 【Dalston】【第六章】API服务网关(Zuul) 下

    Zuul给我们的第一印象通常是这样:它包含了对请求的路由和过滤两个功能,其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础.过滤器功能则负责对请求的处理过程进行干预,是实 ...

  6. 题解——loj6277 数列分块入门1(分块)

    分块裸题 然后就是记得左右边界处理和分块的初始化 忘了初始化会被卡成暴力 #include <cstdio> #include <algorithm> #include < ...

  7. Twitter REST API, Streaming API

    原文链接           用Twitter自己的话来说:   REST API The REST API provides simple interfaces for most Twitter f ...

  8. FICO年终完全手册

    FICO年终完全手册 一:系统增加配置部分 1,FBN1增加凭证号码范围,OBH2维护会计凭证号码到新的会计年度 2,KS13检查成本中心的有效期 3,KA23检查成本要素的有效期 4,KL03检查作 ...

  9. Gym 100247C Victor's Research(有多少区间之和为S)

    https://vjudge.net/problem/Gym-100247C 题意: 给出一串数,求有多少个区间的和正好等于S. 思路:计算处前缀和,并且用map维护一下每个前缀和出现的次数.这样接下 ...

  10. linux 换源

    Ubuntu换源 ubuntu 的默认源是美国的,所以下载起来特别慢.更换国内源:用vi和gedit 打开 /etc/apt/sources.list 将其中的us.archive 全部替换为 cn. ...