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.二级分发
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组件 (一)的更多相关文章
- 【django之stark组件】
一.需求 仿照django的admin,开发自己的stark组件.实现类似数据库客户端的功能,对数据进行增删改查. 二.实现 1.在settings配置中分别注册这三个app # Applicatio ...
- django 之 stark组件
----------------------------------------------------------------烦恼没完没了,内心动荡不安,呜呼哀哉. 一.有个特殊的需求,需要用sta ...
- 设计stark组件
设计stark组件 作者:Eric 微信:loveoracle11g 新建Django项目crm_1随便起名 然后再创建一个App manage.py@crm_1 > startapp star ...
- stark组件的分页,模糊查询,批量删除
1.分页组件高阶 2.整合展示数据showlist类 3.stark组件之分页 3.stark组件之search模糊查询 4.action批量处理数据 4.总结 1.分页组件高阶 1.分页的class ...
- stark组件配置,二层URL
1.django的admin配置 2 stark组件开发 3.2层url分发 4.小结 1.django的admin配置 model.py from django.db import models # ...
- CRM项目之stark组件
. stark也是一个app(用startapp stark创建),目标时把这个做成一个可以拔插的组件 . setting文件下INSTALLED_APPS 路径要配置好(app的注册) . 写好si ...
- stark组件开发之列表页面应用示例
已经解决的,自定义的扩展函数,功能.但是 不可能返回. 一个 固定的页面把! 应该是,点击那条 记录之后的编辑, 就会跳转到相应的,编辑页面.所以 这个标签的 <a href="/ ...
- Django之stark组件
现在让我说啥是stark组件,我也说不清楚.反正从今天讲的知识来看,今天完成的就是自己写一个模块,这个模块包含了admin后台管理工具的一些比较好用的功能,我们把它提炼出来,也就是相当于自己写一个ad ...
- CRM项目之stark组件(2)
那么从今天开始呢,我们就要开始设计属于我们自己的admin组件,起个名字就叫stark吧(当然你愿意叫什么都可以). stark组件之四步走 仿照admin组件实现流程,stark组件要实现四件事情: ...
- python 全栈开发,Day112(内容回顾,单例模式,路由系统,stark组件)
一.内容回顾 类可否作为字典的key 初级 举例: class Foo(object): pass _registry = { Foo:123 } print(_registry) 执行输出: {&l ...
随机推荐
- 在fedora23中安装virtualbox, 然后实现虚拟机irtualbox 或者 vmware 下的xp操作系统
参考: http://blog.csdn.net/statdm/article/details/7756788 参考: http://www.cnblogs.com/fengbohello/p/488 ...
- SpringBoot 利用过滤器Filter修改请求url地址
要求: 代码中配置的url路径为http://127.0.0.1/api/associates/queryAssociatesInfo 现在要求http://127.0.0.1/associates/ ...
- POJ 2226 Muddy Fields(最小点覆盖)题解
题意:一片r*c的地,有些地方是泥地,需要铺地板.这些地板宽1,长无限,但只能铺在泥地上不能压到其他地方,问你铺满所有泥地最少几块 思路:我们把一行中连续的泥地看成整体,并把所有横的整体里的点编成一个 ...
- Golang踩坑录 两种方式来读取文件一行所导致的问题
前两天零零碎碎看完了golang的基础,想着找个小项目练练手,可是出现了一个十分棘手的问题 我要做的东西是网站路径爆破 所以我会从文本字典中把一行行路径读取然后与域名拼接,但是我在跑起程序后出现了问题 ...
- HIHOcoder 1466 后缀自动机六·重复旋律9
思路 后缀数组+博弈论的好题,首先对两个串都建出SAM,然后题目的要求实际上就是在SAM的trans上转移即可 DAG的博弈是经典问题,然后dfs求出SG函数,两个游戏的组合就是把SG函数异或起来,异 ...
- (转)PaperWeekly 第二十二期---Image Caption任务综述
本文转自:http://mp.weixin.qq.com/s?__biz=MzIwMTc4ODE0Mw==&mid=2247484014&idx=1&sn=4a053986f5 ...
- watch监控,对比新值和旧值做出相应判断
数据变化的监控经常使用,我们可以先来看一个简单的数据变化监控的例子.例如天气预报的穿衣指数,它主要是根据温度来进行提示的,当然还有其它的,咱们就不考虑了. html <div id=" ...
- (转载)C# winform 在一个窗体中如何设置另一个窗体的TextBox的值
方法1:修改控件的访问修饰符.(不建议使用此法) public System.Windows.Forms.TextBox textBox1; 在调用时就能直接访问 Form1 frm = new Fo ...
- CentOS7使用firewalld和selinux
转载自莫小安的博客:https://www.cnblogs.com/moxiaoan/p/5683743.html 如何查看和使用selinux https://blog.csdn.net/edide ...
- 【译】第9节---EF Code First中数据注解
原文:http://www.entityframeworktutorial.net/code-first/dataannotation-in-code-first.aspx EF Code-First ...