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系统)是管理公司当前以及未来潜在客户的系统,其主要目的是通过优化客户关系实现公司销售业绩的长期增长,它是企业信息系统的核心之一.目前,移动互联网.大数据以及人工智能技术发展日新 ...
随机推荐
- docker版本升级
docker的版本变化: Docker从1.13.x版本开始,版本分为企业版EE和社区版CE,版本号也改为按照时间线来发布,比如17.03就是2017年3月,有点类似于ubuntu的版本发布方式. 企 ...
- SpringBoot 统一异常处理
统一异常处理: @ControllerAdvice public class GlobalExceptionHandler { private Logger logger = LoggerFactor ...
- bootstrap图片上传功能
重点: fileupload .loadImage 引用js: <!-- Bootstrap CSS --> <link href="~/lib/bootstrap/ ...
- website for .Net Core
5 Ways to Build Routing in ASP.NET Core Bundling in .NET Core MVC Applications with BundlerMinifier. ...
- Nuget EPPlus的使用
EPPlus:网站 Supported Functions Excel Merge Operate public class ExcelMergeOperate { private static Lo ...
- Markdown 指南
Markdown 是一种轻量级的「标记语言」,使用用特殊的 Markdown 文档处理器将 Markdown 语法翻译成预设的文档格式.标题大小等,一般用于展示时输出的是 HTML.这个教程可以让使用 ...
- 给 layui upload 带每个文件的进度条, .net 后台代码
1.upload.js 扩展 功能利用ajax的xhr属性实现该功能修改过modules中的upload.js文件功能具体实现:在js文件中添加监听函数 //创建监听函数 var xhrOnProgr ...
- SpringLog4j日志体系实现方式
1.通过web.xml读取log4j配置文件内容 2.通过不同的配置信息,来实现不同的业务输出,注意:log4j可以写入tomcat容器,也可以写入缓存,通过第三方平台读取 #输入规则#log4j.r ...
- 【Cucumber】【命令行】
知识点 参考:https://www.cnblogs.com/worklog/p/5253297.html cucumber的命令行选项 首先查看命令行选项.和其它命令行工具一样,cucumber提供 ...
- python 目录切换
#- * -coding: utf - - * - import os, sys path = "c:\\" # 查看当前工作目录 retval = os.getcwd() pri ...