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. Java 实现一个自己的显式锁Lock(有超时功能)

    Lock接口 package concurency.chapter9; import java.util.Collection; public interface Lock { static clas ...

  2. P2519 [HAOI2011]problem a

    思路 神仙思路,就差一步就能想出来了... 看到第i个人给出的条件,发现有\(a_i\)个大于,\(b_i\)个小于并不好处理 考虑把条件转化成第i个人对应的排名处理,设第i个人的排名为\(a_i+1 ...

  3. 论文笔记之:Learning Cross-Modal Deep Representations for Robust Pedestrian Detection

    Learning Cross-Modal Deep Representations for Robust Pedestrian Detection 2017-04-11  19:40:22  Moti ...

  4. C#接口的作用详解

    .C#接口的作用 : C#接口是一个让很多初学C#者容易迷糊的东西,用起来好像很简单,定义接口,里面包含方法,但没有方法具体实现的代码,然后在继承该接口的类里面要实现接口的所有方法的代码,但没有真正认 ...

  5. 51nod 1689 逛街(优先队列)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1689 题意: 题意: 枚举终点,这样就确定路上的花费,接下来只需要计算进 ...

  6. _itemmod_strengthen_item

    `enchant_id`升级后的附魔Id `prev_enchant_id` 上级附魔Id `description` 描述,出现在菜单中 `enchantReqId`升级附魔效果的消耗模板 `rem ...

  7. Oracel中的NVL函数

    Oracle中函数以前介绍的字符串处理,日期函数,数学函数,以及转换函数等等,还有一类函数是通用函数.主要有:NVL,NVL2,NULLIF,COALESCE,这几个函数用在各个类型上都可以. 下面简 ...

  8. Python day2_int以及string的常见方法1_笔记

    Python中,主要的基本类型有:数字(int型).字符串(string型).列表(list型).元祖(tuple型).字典(direct型).布尔值(boolean型) 1.int型 1.强转int ...

  9. Missing artifact com.oracle:ojdbc6:jar:10.2.0.4.0问题解决 ojdbc包pom.xml出错

    遇到的问题:ojdbc.jar包出错 原因:因为oracle的ojdbc.jar是收费的,所以maven的中央仓库中没有这个资源,只能通过配置本地库才能加载到项目中去. 解决办法: (前提是安装好了m ...

  10. 内连接查询输出到datagridView

    实现步骤: 1. 新建两张对应表的类 例如: 第一张表对应的类 { class ManagerInfo { public Table1 group { get; set; } //重点 需要内连接的字 ...