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 ...
随机推荐
- 从0开始安装fedora23的笔记-- 以及使用fedora的常规问题
关于安装过程中的笔记本 触摸板 和鼠标的问题? 在安装过程中, 系统只认从usb接口插入的鼠标和触摸板上的 "左键和右键"按钮. 触摸板上的鼠标只支持"移动"的 ...
- hihoCoder week3 KMP算法
题目链接 https://hihocoder.com/contest/hiho3/problems kmp算法 #include <bits/stdc++.h> using namespa ...
- [转载]linux下core文件设置与查看
转自:https://blog.csdn.net/dingqinghui/article/details/77855330?locationNum=9&fps=1 linux下core文件设置 ...
- 3、Python迭代器、列表解析及生成器(0530)
1.动态语言 sys.getrefcount() //查看对象的引用计数 增加对象的引用计数场景 对象创建时:以赋值的方式,创建变量名的同时就会创建变量 将对象添加进容器时:类似list.app ...
- [学习一个] Matlab GUI 学习笔记 Ⅰ
Matlab GUI 学习笔记 Ⅰ 1. Foreword Matlab 是严格意义上的编程语言吗?曾经有人告诉我他是通过 Matlab 学会了面对对象编程,我是不信的,但这依然不妨碍它在特殊领域的强 ...
- Lintcode452-Remove Linked List Elements-Easy
Remove Linked List Elements Remove all elements from a linked list of integers that have value val. ...
- JavaScript运行机制详解
JavaScript运行机制详解 var test = function(){ alert("test"); } var test2 = function(){ alert(& ...
- 1 --- Vue 基础指令
1.vue 指令 1.v-model 主要在表单中使用,文本框.teaxare.单选.下拉 等 2.v-text 文本渲染 类似{{}} 3.v-show 控制Dom显示隐藏 displ ...
- 为DataGridView增加鼠标滚轮功能
#region 鼠标滚动 [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "Wi ...
- ubuntu16.04 安装docker-ce,docker-compose
2018.11.14更新 参考https://blog.csdn.net/qq_38199832/article/details/77803645 sudo curl -sSL https://dow ...