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. NodeJs中npm使用

    什么是 NPM npm 之于 Node ,就像 pip 之于 Python , gem 之于 Ruby , pear 之于 PHP . npm 是 Node 官方提供的包管理工具,他已经成了 Node ...

  2. 关于 RabbitMQ 的 Dead-Letters-Queue “死信队列”

      来自一个队列的消息可以被当做‘死信’,即被重新发布到另外一个“exchange”去,这样的情况有: 消息被拒绝 (basic.reject or basic.nack) 且带 requeue=fa ...

  3. Chrome浏览器F12开发者工具的几个小技巧总结

    1.直接修改页面元素 选择页面上元素,右键“检查”,会打开开发者工具窗口,显示当前选择元素的源代码,可以双击进行修改.如果要修改的东西比较多,可以折叠元素并单击选择,再右键Edit as HTML修改 ...

  4. No mapping found for HTTP request with URI [/Portal/download] in DispatcherServlet with name 'springmvc'

    本文为博主原创,未经允许不得转载: 遇到这个异常,总结一下这个问题发生的原因: 这个原因是在springmvc中在DispatcherServlet分发请求时,解析不到相应的请求路径.后台要请求的路径 ...

  5. [0413] FFTSHIFT的四种写法

    FFTSHIFT的四种写法 前言 matlab说,"你读过书,--我便考你一考.fftshift的函数,怎样写的?"我想,讨饭一样的人,也配考我么?便回过脸去,不再理会.matla ...

  6. Python lambda 表达式

    def ds(x): *x+ print(ds()) g = lambda x:*x+ print(g()) #------------ def sf(a,b): return a+b print(s ...

  7. C++中substr函数的用法

    #include<iostream> #include<string> using namespace std; int main(){ string str("12 ...

  8. SPA中,Node路由优先级高于React路由

    一.问题描述 在一场面试中,面试官问到了React和Node路由之间的关系. 现在SPA(单页面应用)的使用越来越广. Node(后台)和React(前端)都有自己的路由,当我页面访问一个URL的时候 ...

  9. eclipse打开失败

    以前eclipse运行好好的,某一次运行启动不了,一直图标那里转圈,不能启动, 运行eclipsec.exe后,查看发现出现以下错误 SLF4J: Class path contains multip ...

  10. "不是内部或外部命令"

    问题描述: 使用cmd 运行某个路径下(一般是C:PROGRAM FILES\...或者E:\program files\....或者D:\program files\......下面的某个)的exe ...