加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
第四次考试练习(1).py 7.60 KB
一键复制 编辑 原始数据 按行查看 历史
winxp 提交于 2019-07-23 20:08 . rm cms
'''
一.CRM
1.crm系统是什么?里面都有哪些功能(业务)(6分)?
客户关系管理系统(customer relationship managerment)
记录跟客户的相关记录信息
功能:
登录 注册 注销 --认证
1.客户的管理
客户信息展示(公私户的转换)
新增 编辑 删除客户信息
公私户的转换
2.客户的跟进记录管理
查询当前销售的所有的跟进记录
查询某个客户的所有的跟进记录
对跟进记录进行增删改
3.报名记录管理
查询当前销售的所有客户的报名表
查询某个客户的报名表
报名表的增删改
4.缴费记录管理
查看当前销售的所有客户的所有缴费记录
查看某个客户的所有缴费记录
缴费记录的增删改
5.班级记录
查看所有的班级记录
对班级记录进行增删改
6.课程记录
查看某个班级的课程记录
对课程记录进行增删改
7.学习记录,记录学生的学习情况,是否正常出勤,是否正常完成作业
查看某个课程的所有学生的学习记录
对学习记录进行增删改
2.什么是公户?什么是私户?为什么要做这个区分(3分)?
公户:尚未分配销售的客户,属于公户
私户:已分配到销售,属于某个销售的客户
区分公户和私户,可以明确该客户是否有销售跟进,若是公户,则需要尽快分配到相关销售去做跟进工作,
若是私户,则其他销售无权访问,以免造成撞单现象.
3.通过ORM操作对数据库的数据做展示时,不同字段类型有不同的展示方法,分别是什么(4分)?
{%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)
4.请列举出CRM项目中的技术点,以及实现的功能(至少写5个)(5分)
1.分页功能
2.Form组件(modelform) 对表进行增删改查
3.模糊查询(Q对象)
4.分页保留源搜索条件(QueryDict)
5.url命令和反向解析
6.修改或新增后跳转到原界面
7.加锁,事务 公私户的转换
8.批量插入学习记录
7.限制choice的选择
8.登录的密码二次校验
9.给密码加密haslib
10.中间件,登录校验,登录成功后返回原网址
11.母版的继承
12.自定义temple_tag
1.使用几张表来完成权限控制的?每张表中有哪些字段(5分)?
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)
2.请简述实现权限控制的流程(6分)
给不同的用户分配不同的功能,这里主要阐述的是基于角色的权限控制rbac(role based access control)
在web开发中,一个url就可以看做是一个权限
控制流程:
1.要实现权限控制需要有表[一个简单的权限控制,需要6张表]
2.登录成功后查询当前用户的权限信息,保存在session中
3.利用中间件进行权限校验
根据当前访问的url和session中存放的权限进行正则匹配,匹配成功,则按照正常流程走,匹配不成功则
告知未有访问的权限
页面中可见的按钮代表也有权限,在模板设置中,根据filter进行判断,若返回true则代表有权限,若返回False
则代表无权限
4.动态生成一级菜单
5.动态生成二级菜单,对一级菜单进行排序
6.二级菜单默认选中并展示
7.非菜单权限的归属(二级菜单和子权限,都有选中的效果)
8.路径导航
9.权限控制到按钮级别
3.初始化权限时,定义了两个字典,分别是什么数据结构?为什么要把他们存在session中(6分)
permission_dict={permissions__name:{url:,title:,parent_id:permissions__parent_name:,permissions__parent_id}}
menu_dict={一级菜单的id:{title:,icon:children:{}}}
保存在sessions是为了在进行权限校验和菜单展示时通过request调用
session保存在服务器上安全
4.开发过程中遇到,一般都是怎么解决的?请说一下你印象比较深刻的一个问题(答上课的例子不得分)(3分)
业务需求的变化是在开发过程中遇到的比较棘手的问题,之前做过一个CRM项目,做语言培训的,一开始我们理解的
需求是一个语言合同是由一个老师一对一对学生进行授课,项目已经开发的差不多的时候,需求方突然想起来说
他们的学生有时候不是一个老师授课的,可能会有其他老师帮着一起,我们的表结构是以合同对授课老师多对一的关系
这样的需求就需要先从数据库表改起,后来改成一个授课记录跟授课老师是多对一的关系,这样就可以通过提取每个老师的授课
记录来计算课时,而不是通过合同来计算课时了,像这种很细小的需求经常会遇到,前期对接的时候说的都是正常情况下
后期开发的时候说的都是特殊情况下也可以这样,规则不明朗,很不好弄!
5.请简述下管理权限信息的流程(管理 分配权限是如何操作的)(3分)
可以通过admin进行角色的新增,菜单的新增,权限的分配
也可以通过设计权限分配的批量操作来实现
6.简述如何将rbac应用到一个项目中(4分)
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%}
7.rbac组件中有哪些技术点,用于做什么(5分)?
1.中间件
权限校验
权限控制到按钮级别
2.登录
获取权限
构建权限列表和菜单列表
保存在session中
非菜单权限的归属
3.模板
动态生成二级菜单
路径导航
权限控制到按钮级别
母版和继承
'''
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化