美文网首页
CMDB 结束

CMDB 结束

作者: 两分与桥 | 来源:发表于2018-06-28 10:28 被阅读16次

    cmdb,客户管理系统

    CRM 开发
    customer relationship management::简单来说,就是管理用户数据
    1.数据安全
    2.数据来源
    3.防止数据篡改
    

    IT管理系统开发(审计系统+主机管理)

    queue, rebbitmq, redis, celery
    
    
    
    爬虫
    
    tornado, flask, webpy, bottle
    
    算法
        数据结构,堆栈,二叉树
        
    设计模式
        工厂,单例,代理模式,装饰器,享元,组合,。。。23个
    
    git, unittest
    
    敏捷开发,持续集成
    生产环境部署
    

    CRM 开发,,也就是客户管理系统

    1.数据安全
    2.数据来源
    3.防止数据篡改
    
    需求分析:
        存储所有的客户咨询信息
        避免重复存储数据
        客户的多次跟踪记录
        客户来源、成单率分析
        每个销售只能修改自己的客户信息
        报名流程开发
        班级管理
        学员成绩,出勤管理
        问卷调查
        校区管理
        课程管理
            课程大纲,周期,价格,代课老师
        讲师的上课记录
        学员就业情况
        知识库
        权限管理
        角色
            销售
                销售主管
            讲师
            学员
            管理员
            
    

    思维导图

    业务场景分析(用户使用场景)
        分析各个是否能够成立
        销售
            1.销售人员A刚从 百度推广 聊了一个客户,录入了CRM系统,咨询了Python全栈开发课程,但是没报名
            2.销售B 从 QQ 群聊了客户,且报名了Python全栈5期课程,给用户发送了报名链接,待用户填写完毕后,
            把他添加到了PYTHON PULLSTACK S5的班级里
            3.销售C 打电话给之前的一个用户,说服他报名Linux 36期,但是没说服成功,更新了跟踪记录
            4.销售D 聊了一个客户,录入时发现,此客户已存在,不能录入,随后通知相应的客户负责人 跟进
            5.销售B 从客户库里过滤出了 所有 超过一个人未跟踪的客户,进行跟踪
            6.销售主管 查看了部门 本月的销售报表,包括来源分析,成单率分析,班级报名数量分析,销售额环比,同比
    
    学员
        1. 客户A 填写了销售发来的 报名链接,上传了个人的证件信息,提交,过了一小会,发现收到一个邮件,告知他报名Python
        5期课程成功,并帮他开通了学员账号,
        2. 学员A 登陆了学院系统,看到了自己的合同,报名的班级,课程大纲
        3. 学员A 提交了Py 5期的 第三节课的作业
        4. 学员A 查看了自己在Py 5期的 学习成绩,排名
        5. 学员A 录入了一条 转介绍信息
        6. 学员A 在线 搜索了一个问题,发现没有答案,于是提交了一个问题。
    
        
    讲师
        1. 登陆了CRM,查看了自己管理的班级列表
        2. 进入了python 5期,创建了第三节课的上课记录,填入了本机内容,作业需求
        3. 为Python 5 的第三节课 进行点名,发现小东北迟到了,标记他为迟到状态
        4. 批量下载了所有学员的Py 5期第二节课的作业,给每个人在线 批了成绩 + 批注
        
        
    管理员
        1. 创建了,课程linux,python,
        2. 创建了 校区 北京,上海,
        3. 创建了 班级python FULLSTACK S5 和 Linux 36,
        4. 创建了 账号A,B,C,D,
        5. 创建了 销售,讲师,学员三个角色,并把ABCD分配到了销售角色里
        6. 设置了销售可以操作的权限
    

    原型图

        Axure
        
    开发工具选型
        Python
        Django
        Mysql
        Jquery
        Bootstrap
        Linux
        Nginx
        Pycharm
        
    创建项目
        设计表结构
        写代码
        
        写表结构,先建立各个表,再补充表内容
            
    大部分的CRM都有部分的财务管理功能,不过都不会用
        公司都是用专业的财务管理软件
    
    python 3 中字符串默认都是unicode
    python 2 中字符串默认都是ascii
    
    
    
    day 79 
        动态菜单
        销售角色
            客户的增删改查
            
        one 反向查 直接 request.user.userprofile 后面跟反向的小写表名
        foreignkey 反向查 直接 request.user.userprofile_set 后面跟反向的小写表名
        
        
    {{ request.user.userprefile.role.all }}
    和下面相同
    {{ request.user.userprefile.role.select_related }}
    
    
    
    from django import conf
    conf.settings 动态获取项目setting配置
    
    要注意避免类的内存地址多次覆盖赋值,最好实例为对象使得都有独立的内存空间
    
    
    a.get_status_display() 获取choice中对应的值
    
    models.CustomerInfo._meta.fields 获取所有models的字段对象
    
    In [25]: models.CustomerInfo._meta.get_field('status')  获取其中一个字段对象
    Out[25]: <django.db.models.fields.SmallIntegerField: status>
    
    models.CustomerInfo.object.filter(date__year) # 按年查询
    models.CustomerInfo.object.filter(date__gte='2017-04-21') # 大于今天的时间
    
    
    态度要认真*****认认真真
    想成事,一个是选对方向,一个是跟对了人,一个是坚持住
            IT方向是对的
            
            
    分页的功能就是避免一次性在数据库中读取过多的数据,给服务器造成压力
    
    selec * from tablename limit offset 50 limit 10 从第50条开始取10条
    selec * from tablename limit limit 50,10 从第50条开始取10条
    
    
    contact_list = Contacts.object.all()  这句并不是把所有的数据都取出来,而是在内封装了一个生成器,
                                          在调用的时候去取数据
                                          
                                         
    js 添加样式是会有延迟的,所以一般不再js中添加
    

    csrf // xsrf
    跨域请求伪造,假设A是银行网站,B是某个网站,C是某个人,B中设置了一个超链接,post或者get,一般都为隐藏,
    路径为A,数据为转账具体信息,具体针对C而设置的,诱使C点击,点击之后发送的数据
    就是C本地发送过去的,会带上C浏览器上A网站的cookie,发送请求

    浏览器有同源策略,每一个网站都只能访问自己的cookie
    GET 获取数据,对数据无影响,幂等请求(无论请求多少次数据都不变化)

    csrf token 令牌 口令,,django的csrf可以解决这个问题 {% csrf_token %}

    爬虫只是一个小方面,,

    action 优化
    面包屑导航

    报名流程
    销售 发起报名流程,选择班级,发报名链接给学员
    选择班级
    选择客户
    生成报名链接
    学员 填写在线报名表,提交个人信息,上传证件信息,同意
    销售 审核报名表,审核通过后,创建一条缴费记录,自动把学员添加到相应的班级,报名成功

    开发软件需要注意时区的问题,,(国际性软件的时候)

    自定义用户认证
    request.user.userprofile

    class Meta:
    abstract = True 不创建表,只是把字段传递给继承自己的子类

    找问题要到django网站上去找

    OA 内部报销系统,请假,报销,什么的

    数据库中的密码绝对不是明文,是加密过后的密文
    验证的话,也就是把输入的密码加密后与数据库中的密文比对

    正向破解,也就是撞库,将明文密码加密后与密文比对,
    

    django 的加密方式 md5+盐

    md5 理论上是不可以反解的,但是可以用撞库的方式

    LDAP 轻量级目录账号管理协议 集中账号管理
    Single Sign on 单点登陆,SSO,也就是公司内有很多个服务器,但是用的是一套登陆接口

    django 提供了远程认证的方式,在官网搜索 custom authentication,setting中设置

    设置权限,,是否有权限,permission

    In [29]: jack.has_perm('best.change_branch')
    Out[29]: True

    In [30]: jack.has_perm('best.add_branch')
    Out[30]: False

    记得 manytomany 字段需要加 .all() 方法获取数据

    c/s
    b/s
    

    权限管理

    student = [
        my_course
        my_contract
        my_homework
    ]
    sales = [
        customers
            get 获取客户表
            post 修改 客户信息
        my_customers
            ....
    ]
    

    一条权限 = 一个动作 = 一个URL + 请求方法 + 请求参数

    all(True,False) #python 方法,检测内部是否都为真

    crm 权限管理,角色分配,通用的增删改查框架

    CRM项目结束

        conditions = {'customer':1,'class_grade':1}
        aa = models.Student.objects.filter(customer__id=1,class_grade__id=1).all() 这三条语句都是可以的 __id 是跨表
        aa = models.Student.objects.filter(customer_id=1,class_grade_id=1).all()   _id 
        aa = models.Student.objects.filter(customer=1,class_grade=1).all()
        print(aa)
    
    

    perm_dic={
        'crm_table_index':['table_index','GET',[],{},],  #可以查看CRM APP里所有数据库表
        'crm_table_list':['table_list','GET',[],{}],    #可以查看每张表里所有的数据
        'crm_table_list_view':['table_change','GET',[],{}],#可以访问表里每条数据的修改页
        'crm_table_list_change':['table_change','POST',[],{}], #可以对表里的每条数据进行修改
    
        }
    
    
        'crm_table_list':['table_list','GET',['source','status'],{}]
    
    
        def perm_check(*args,**kwargs):
    
            1. 获取当前请求的url
            2. 把url 解析成url_name ,
            3. 判断用户是否已登录user.is_authenticated()
            3. 拿url_name 到permission_dict 去匹配,匹配时要包括请求方法和参数
            4. 拿匹配到可权限key, 调用user.has_perm(key)
    
    

    参考博客: www.cnblogs.com/alex3714/articles/6661911.html

    相关文章

      网友评论

          本文标题:CMDB 结束

          本文链接:https://www.haomeiwen.com/subject/cmxgyftx.html