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组件流程分析的更多相关文章

  1. CRM项目之stark组件(2)

    那么从今天开始呢,我们就要开始设计属于我们自己的admin组件,起个名字就叫stark吧(当然你愿意叫什么都可以). stark组件之四步走 仿照admin组件实现流程,stark组件要实现四件事情: ...

  2. crm项目之stark组件前戏(二)

    stark组件的设计主要来源于django中admin的功能,在django admin中只需要将模型表进行注册,就可以在页面对该表进行curd的动作,那么django admin是如何做的呢? 在d ...

  3. Android系统之LK启动流程分析(一)

    1.前言 LK是Little Kernel的缩写,在Qualcomm平台的Android系统中普遍采用LK作为bootloader,它是一个开源项目,LK是整个系统的引导部分,所以不是独立存在的,但是 ...

  4. 企业定制CRM系统的5步流程

    由于所处的行业不同,不同的企业对CRM系统的需求也不同.除了行业通用的功能之外,每个企业都有自己独特的功能需求.为了让CRM系统跟上这种需求的变化,CRM厂商通常也会提供CRM系统定制开发功能来满足不 ...

  5. CRM项目之stark组件

    . stark也是一个app(用startapp stark创建),目标时把这个做成一个可以拔插的组件 . setting文件下INSTALLED_APPS 路径要配置好(app的注册) . 写好si ...

  6. CRM项目之stark组件(1)

    admin组件 admin组件的简单使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py ...

  7. window2008 64位系统没有office组件问题分析及解决

    服务器是windows server2008 64位系统, 我的系统需要用到Microsoft.Office.Interop.Excel组件 在上传Excel单据遇到错误:检索 COM 类工厂中 CL ...

  8. DRF认证组件流程分析

    视图函数中加上认证功能,流程见下图 import hashlib import time def get_random(name): md = hashlib.md5() md.update(byte ...

  9. CRM系统新思维

    客户关系管理系统(CRM系统)是管理公司当前以及未来潜在客户的系统,其主要目的是通过优化客户关系实现公司销售业绩的长期增长,它是企业信息系统的核心之一.目前,移动互联网.大数据以及人工智能技术发展日新 ...

随机推荐

  1. CentOS7.2中systemctl的使用

    CentOS 7.x开始,CentOS开始使用systemd服务来代替daemon,原来管理系统启动和管理系统服务的相关命令全部由systemctl命令来代替. 1.原来的 service 命令与 s ...

  2. HDU 5929 Basic Data Structure(模拟 + 乱搞)题解

    题意:给定一种二进制操作nand,为 0 nand 0 = 10 nand 1 = 1 1 nand 0 = 1 1 nand 1 = 0 现在要你模拟一个队列,实现PUSH x 往队头塞入x,POP ...

  3. (转)Spring Cloud(二)

    (二期)23.微服务框架spring cloud(二) [课程23]熔断器-Hystrix.xmind0.1MB [课程23]微服务...zuul.xmind0.2MB 熔断器-Hystrix 雪崩效 ...

  4. 【特性】MySQL 8 新特性

    MySQL 8.0 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 注意:从 MySQL 5.7 升级到 MySQL 8 ...

  5. VHDL 类型转换

    STD_LOGIC_1164包集合 函 数 名 功 能 TO_STDLOGICVECTOR(A) 由BIT_VECTOR转换为STD_LOGIC_VECTOR TO_BITVECTOR(A) 由STD ...

  6. POJ 3693 Maximum repetition substring(连续重复子串)

    http://poj.org/problem?id=3693 题意:给定一个字符串,求重复次数最多的连续重复子串. 思路: 这道题确实是搞了很久,首先枚举连续子串的长度L,那么子串肯定包含了r[k], ...

  7. Java中String型与Date型数据的互相转换

    /** * Date类型转为指定格式的String类型 * * @param source * @param pattern * @return */ public static String Dat ...

  8. Vue--获取数据

    一.Jsonp抓取数据 用 npm 安装 jsonp npm install jsonp 创建 jsonp.js import originJsonp from 'jsonp' export defa ...

  9. unity shader base pass and additional pass

      [Unity Shaders]Shader中的光照,shadersshader 写在前面 自己写过Vertex & Fragment Shader的童鞋,大概都会对Unity的光照痛恨不已 ...

  10. mongdb使用技巧

    进入shell的方法:mongo 命令   # 使用系统服务启动 mongodb /etc/init.d/mongod # 或 service mongod start # 或 service mon ...