Django-CRM 总结2

Django-Crm总结第二篇

1. 什么是CRM系统,具有哪些功能

  • 客户关系管理系统(customer relationship managerment),记录跟客户的相关记录信息

  • 功能

    # 登录 注册 注销 --认证
    
    1.客户的管理
        客户信息展示(公私户的转换)
        新增 编辑 删除客户信息
        公私户的转换
    
    2.客户的跟进记录管理
        查询当前销售的所有的跟进记录
        查询某个客户的所有的跟进记录
        对跟进记录进行增删改
        
    3.报名记录管理
        查询当前销售的所有客户的报名表
        查询某个客户的报名表
        报名表的增删改
        
    4.缴费记录管理
        查看当前销售的所有客户的所有缴费记录
        查看某个客户的所有缴费记录
        缴费记录的增删改
    
    5.班级记录
        查看所有的班级记录
        对班级记录进行增删改
        
    6.课程记录
        查看某个班级的课程记录
        对课程记录进行增删改
        
    7.学习记录,记录学生的学习情况,是否正常出勤,是否正常完成作业
        查看某个课程的所有学生的学习记录
        对学习记录进行增删改
    

什么是公户?什么是私户?

公户:尚未分配销售的客户,属于公户
私户:已分配到销售,属于某个销售的客户
区分公户和私户,可以明确该客户是否有销售跟进,若是公户,则需要尽快分配到相关销售去做跟进工作,

# 目的: 若是私户,则其他销售无权访问,以免造成撞单现象.

通过ORM操作对数据库的数据做展示时,不同字段类型有不同的展示方法

# 模板遍历 ORM对象
{%for obj in all_obj%}

# 假设name为字段
1.普通字段
    {{obj.name}}
2.带有choices参数
    {{obj.get_name_display}}
3.自定义
    在models对应的类下,自定义一个方法,供调用,主要是对于多对多的情况下
    def show_name(self):
        return '{}_OK'.format(self.name)

列举出CRM项目中的技术点

1.分页功能 
2.Form组件(modelform) 对表进行增删改查
3.模糊查询(Q对象)
4.分页保留源搜索条件(QueryDict)
5.url命令和反向解析
6.修改或新增后跳转到原界面
7.加锁,事务 公私户的转换
8.批量插入学习记录
7.限制choice的选择
8.登录的密码二次校验
9.给密码加密haslib
10.中间件,登录校验,登录成功后返回原网址
11.母版的继承
12.自定义temple_tag

几张表来完成权限控制?每张表中有哪些字段?

# 6张表

# menu 菜单表
	(id,name,icon,weight) 
# permission 权限表
	(id,url title name icon menu parent) 
# role 角色表
	(id,name permissions)
# user 用户表
	(id,username password roles)
# user与role的多对多关系表, 使用户和角色存在多对多关系!
	(id user_id role_id)
# role与permission的多对多的关系表 , 使角色和权限存在多对多关系!
	(id role_id permission_id)

简述实现权限控制的流程

# 给不同的用户分配不同的功能,这里主要阐述的是基于角色的权限控制rbac(role based access control)

# 在web开发中,一个url就可以看做是一个权限
  控制流程:
      1.要实现权限控制需要有表[一个简单的权限控制,需要6张表]
      2.登录成功后查询当前用户的权限信息,保存在session中,也可以存到redis中
      3.利用中间件进行权限校验 process_request中间件,请求到来之前进行权限校验。
          3.1 根据当前访问的url和session中存放的权限进行正则匹配,匹配成功,则按照正常流程走,匹配不成功则,告知未有访问的权限。
          3.2 页面中可见的按钮代表也有权限,在模板设置中,根据filter进行判断,若返回true则代表有权限,若返回False则代表无权限
      4.动态生成一级菜单
      5.动态生成二级菜单,对一级菜单进行排序
      6.二级菜单默认选中并展示
      7.非菜单权限的归属(二级菜单和子权限,都有选中的效果)
      8.路径导航
      9.权限控制到按钮级别

初始化权限时,定义了两个字典,分别是什么数据结构?为什么要把他们存在session中

# 全局权限表
permission_dict={
  	# permissions__name 权限名称
    permissions__name:{
      url:"路由地址",
      title:"菜单标题",
      parent_id:"权限id",
      permissions__parent_name:"父权限名称(标题)",
      permissions__parent_id:"父权限id"
    }
}

# 全局权限菜单表
menu_dict={
  	一级菜单的id:{
      title:"菜单标题",
      icon:"菜单图标",
      children:{} # 二级(子级)菜单{title:"菜单标题",icon:"菜单图标", children:{} # 三级(子级)菜单} 
    }
}
    
保存在sessions是为了在进行权限校验和菜单展示时通过request调用session保存在服务器上安全

开发过程中遇到,一般都是怎么解决的?

业务需求的变化是在开发过程中遇到的比较棘手的问题,之前做过一个CRM项目,做语言培训的,一开始我们理解的
需求是一个语言合同是由一个老师一对一对学生进行授课,项目已经开发的差不多的时候,需求方突然想起来说
他们的学生有时候不是一个老师授课的,可能会有其他老师帮着一起,我们的表结构是以合同对授课老师多对一的关系
这样的需求就需要先从数据库表改起,后来改成一个授课记录跟授课老师是多对一的关系,这样就可以通过提取每个老师的授课
记录来计算课时,而不是通过合同来计算课时了,像这种很细小的需求经常会遇到,前期对接的时候说的都是正常情况下
后期开发的时候说的都是特殊情况下也可以这样,规则不明朗,很不好弄!

简述下管理权限信息的流程(管理 分配权限是如何操作的)

1. 可以通过admin 即:django-admin模块。进行角色的新增,菜单的新增,权限的分配
2. 也可以通过设计权限分配的批量操作来实现

简述如何将rbac应用到一个项目中

1. 先把rbac的文件拷贝到项目中,并注册该APP
2.迁移数据库
        修改rbac中User,把permissions=models.ManyToMany(Role,...)Role的引号去掉
        在class Meta中添加:abstract = True 迁移时不生成表,继承使用
        在crm中引入rbac的User from rbac.models importUser
        让UserProfile继承User
        执行数据库迁移的命令
        python manage.py makemigrations
        pyton manage.py migrate
3.配置rbac的路由
    url(r'^rbac/',include('rbac.urls',namespace='rbac))

4.把rbac中的admin中User表去掉
5.把自定义的中间件(登录认证先取消),然后添加角色,菜单,批量操作权限,中间涉及到使用User表都需要改成UserProfile
6.分配权限,给用户分配角色,给角色分配权限
7.应用上角色
    把权限校验的中间件添加上,也把登录认证的添加上
    在settings中添加几个常量
        白名单
        免认证名单
        权限session key
        菜单session key
        登录权限的初始化,在登录成功后添加
        from rbac.service.init_permission import init_permission
        init_permission(request,obj)
8.动态生成二级菜单
    在母版中添加{%load rbac%} {% menu request%}
    加上css js样式
9.路径导航 {%breadcrumb%}
10.权限控制到按钮级别
    在模板中:{%load rbac%}
    在需要控制的按钮下写上:
    {%if request|has_permission:'add_customer'%}
        显示
    {%endif%}

rbac组件中有哪些技术点,用于做什么

1.中间件
    权限校验
    权限控制到按钮级别
2.登录
    获取权限
    构建权限列表和菜单列表
    保存在session中
    非菜单权限的归属
3.模板
    动态生成二级菜单 dymaic menu
    路径导航  # 面包屑导航
    权限控制到按钮级别 # button permission
    表字段粒度级别 # table field permission
    母版和继承 templates extend
posted @ 2023-09-20 22:40  染指未来  阅读(29)  评论(0编辑  收藏  举报