CRM系统之stark组件流程分析
CRM系统主要通过自定义stark组件来实现的(参照admin系统自定义):
STARK组件:
1 admin组件
1 如何使用admin
2 admin源码
3 创建自己的admin组件:stark
(1)当django启动时加载每一个app下的stark.py文件 做法:在stark组件的apps.py文件下写下如下代码,这样就会启动每个app下的stark文件
from django.apps import AppConfig
from django.utils.module_loading import autodiscover_modules class StarkConfig(AppConfig):
name = 'stark'
def ready(self):
autodiscover_modules('stark')
(2) 注册模型
基于模块单例模式:
func.py:
class A():
pass
a=A()
main.py:
from func import a
from func import a as b
a==b
stark组件的单例类:
class ModelStark(object):
list_display=["__str__"]
def __init__(self,model):
self.model=model
class StarkSite(object):
"""
stark组件的全局类
"""
def __init__(self):
self._registry = {}
# 1 模型类的注册功能
def register(self, model, admin_class=None):
# 设置配置类
admin_class=admin_class or ModelStark
self._registry[model] = admin_class(model)
site= StarkSite()
在某一个app下的stark.py文件下:
from .models import *
class BookConfig(ModelStark):
list_display=["title"]
site.register(Book,BookConfig)
site.register(Publish)
(3) 设计URL
语法:url或者path的分发
path("test1/",([
path('test02/', ([
path('test04/', views.test04),
path('test05/', views.test05),
],None,None)),
path('test03/', views.test03),
],None,None))
class ModelStark(object):
list_display=["__str__"]
def __init__(self,model):
self.model=model
def list_view(self,request):
print(self)
print(self.model)
print(self.list_display)
def add_view(self,request):
pass
def change_view(self,request,id):
pass
def del_view(self,request):
pass
# url的二级分发
def get_urls(self):
model_name=self.model._meta.model_name
app_label=self.model._meta.app_label
temp = [
url(r"^$", self.list_view,name="%s_%s_list"%(app_label,model_name)),
url(r"add/", self.add_view,name="%s_%s_add"%(app_label,model_name)),
url(r"(\d+)/change/", self.change_view,name="%s_%s_change"%(app_label,model_name)),
url(r"(\d+)/delete/", self.del_view,name="%s_%s_delete"%(app_label,model_name)),
]
temp.extend(self.extra_url())
return temp
@property
def urls(self):
return self.get_urls(), None, None
class StarkSite(object):
"""
stark组件的全局类
"""
def __init__(self):
self._registry = {}
# 1 模型类的注册功能
def register(self, model, admin_class=None):
# 设置配置类
admin_class=admin_class or ModelStark
self._registry[model] = admin_class(model)
# 2 动态创建模型类的增删改查URL
def get_urls(self):
temp = []
for model, config_obj in self._registry.items(): # {Book:BookConfig(Book),Publish:ModelStark(Publish)}
model_name = model._meta.model_name # "book"
app_label = model._meta.app_label # "app01"
# url的一级分发
temp.append(url(r"%s/%s/" %(app_label,model_name),config_obj.urls))
'''
path("stark/app01/book/",[
url(r"^$", BookConfig(Book).list_view),
url(r"add/", BookConfig(Book).add_view),
url(r"(\d+)/change/", BookConfig(Book).change_view),
url(r"(\d+)/delete/", BookConfig(Book).del_view),
])
path("stark/app01/publish/",[
url(r"^$", ModelStark(Publish).list_view),
url(r"add/", ModelStark(Publish).add_view),
url(r"(\d+)/change/",ModelStark(Publish).change_view),
url(r"(\d+)/delete/",ModelStark(Publish).del_view),
])
'''
return temp
@property
def urls(self):
return self.get_urls(),None,None
site= StarkSite()
# urls.py(设计URL):
path('stark/', site.urls),
补充:有关meta的介绍.可参考官方文档:https://docs.djangoproject.com/zh-hans/2.0/ref/models/options/
中文相关博客可参考:https://www.cnblogs.com/lfxiao/p/8883660.html
(4) 设计增删改查的视图函数
--查看
<1> 展示表头和表体(self.list_display)
<2> 分页
<3> serach
<4> action
<5> filter
--添加,编辑 modelform组件
--删除
业务逻辑
CRM系统之stark组件流程分析的更多相关文章
- CRM项目之stark组件(2)
那么从今天开始呢,我们就要开始设计属于我们自己的admin组件,起个名字就叫stark吧(当然你愿意叫什么都可以). stark组件之四步走 仿照admin组件实现流程,stark组件要实现四件事情: ...
- crm项目之stark组件前戏(二)
stark组件的设计主要来源于django中admin的功能,在django admin中只需要将模型表进行注册,就可以在页面对该表进行curd的动作,那么django admin是如何做的呢? 在d ...
- Android系统之LK启动流程分析(一)
1.前言 LK是Little Kernel的缩写,在Qualcomm平台的Android系统中普遍采用LK作为bootloader,它是一个开源项目,LK是整个系统的引导部分,所以不是独立存在的,但是 ...
- 企业定制CRM系统的5步流程
由于所处的行业不同,不同的企业对CRM系统的需求也不同.除了行业通用的功能之外,每个企业都有自己独特的功能需求.为了让CRM系统跟上这种需求的变化,CRM厂商通常也会提供CRM系统定制开发功能来满足不 ...
- CRM项目之stark组件
. stark也是一个app(用startapp stark创建),目标时把这个做成一个可以拔插的组件 . setting文件下INSTALLED_APPS 路径要配置好(app的注册) . 写好si ...
- CRM项目之stark组件(1)
admin组件 admin组件的简单使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py ...
- window2008 64位系统没有office组件问题分析及解决
服务器是windows server2008 64位系统, 我的系统需要用到Microsoft.Office.Interop.Excel组件 在上传Excel单据遇到错误:检索 COM 类工厂中 CL ...
- DRF认证组件流程分析
视图函数中加上认证功能,流程见下图 import hashlib import time def get_random(name): md = hashlib.md5() md.update(byte ...
- CRM系统新思维
客户关系管理系统(CRM系统)是管理公司当前以及未来潜在客户的系统,其主要目的是通过优化客户关系实现公司销售业绩的长期增长,它是企业信息系统的核心之一.目前,移动互联网.大数据以及人工智能技术发展日新 ...
随机推荐
- word如何替换行首?
在替换窗口, 要使用通配符 要使用 替换中的 分组, 高级替换 表示行首的符号, 使用 (<*) 表示 单词开始的位置, 使用 <, 表示单词结束的位置, 使用 > 替换的示例:
- 全排列+字符串查找|扑克排序|2014年蓝桥杯A组题解析第六题-fishers
标题:扑克序列 A A 2 2 3 3 4 4, 一共4对扑克牌.请你把它们排成一行. 要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌. 请填写出所有符合要求的排 ...
- Python, pandas: how to sort dataframe by index// Merge two dataframes by index
pd.concat([df1, df2], axis=1) df.sort_index(inplace=True) https://stackoverflow.com/questions/404680 ...
- oracle单行函数 之 数字函数
Round(数字 \ 列 [,保留小数的位数]):四舍五入 select Round(1234.45,1) from dual = 1234.5 Trunc(数字 \ 列 [,保留小数的位数] ...
- Linux邮件服务入门
前言 想定期查询天气并提示我,很容易想到了创建定时任务然后给我自己发邮件,进而学习了linux如何发邮件,下面就开始吧. 开启邮件服务(Ubuntu) 首先执行mail命令看有没有安装,没有的话会提示 ...
- (转)PaperWeekly 第二十二期---Image Caption任务综述
本文转自:http://mp.weixin.qq.com/s?__biz=MzIwMTc4ODE0Mw==&mid=2247484014&idx=1&sn=4a053986f5 ...
- Mybatis工程搭建
工程搭建 • 1依赖包 • 2配置文件 • 2.1spring-mybatis.xml • 2.2mybatis-config.xml自带配置文件 • 2.3 mapper(dao)对象 • 2.4 ...
- mac终端不好用?用brew神器代替
一.概念 Brew是一款Mac OS平台下的软件包管理工具,拥有安装.卸载.更新.查看.搜索等很多实用的功能.简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷. 官 ...
- _event_spawn
EventId 事件ID Entry 刷新生物或物体的entry,正数为生物,负数为物体 Phase 刷新生物或物体的阶段ID SpawnTime 刷新生物或物体的时间(单位:秒),从阶段开始时开始计 ...
- BZOJ 4584 【APIO2016】 赛艇
题目链接:赛艇 讲道理好好的Boat为啥要翻译成赛艇呢……题面中不也是划艇么…… 这道题考虑一下dp.由于划艇数量过于庞大,所以肯定不能直接记录到dp状态中.所以一个想法就是把数量离散化,然后把每个学 ...