公司项目相关

公司相关

自我介绍一下吧

好的,基本信息我就不说了,我主要说说我的项目经验吧,17年开始实习 我是18年毕业的,最开始 以实习生的机会我就在上海梯方教育科技有限公司工作,,我第一个接触的项目是客户管理系统,主要是用于内部 给销售人员,班主任 财务使用, 我们这个项目 功能有1. 运营管理. 权限管理 客户管理 3. 销售管理   4. 售后管理

我个人负责的是客户管理,客户录入,客户分配的逻辑 ,权限组件的编写,还有一些简单的前端页面 和 后端数据库的 增删改查的功能 等等
我的第二个项目 是公司网站的开发 (梯方在线)因为原有的网站架构是java写的 有些功能 可能不好迭代更新维护 经过讨论后所以我们公司选择了 开发效率高的 python语言开发 来进行重构  我们用的是django框架 mysql 数据库 redis 数据库 采用前后端分离模式  




我们的项目分为导师后台、管理后台、主站三大模块。
    导师后台基于 自编写 stark组件开发的,主要是给导师管理学员的作业、学习进度和跟进记录的工作
    管理后台基于 stark组件开发的,主要是给运营使用,用与上传视频、写文章、优惠卷的发放和使用、还有退款和学员休学等工作的管理
    主站基于vue开发前端单页面 后端采用Django restful 
    framework框架来编写api接口,主要包含课程、交流区、购物车、个人中心、其他的模块,主要给用户用于查看和购买课程,了解平台的页面
             

我们做这个项目初期参考了以前使用的crm模式 功能,因为有些功能原有的并不具备、我们需要定制化

你在公司具体是做什么负责什么业务

主要负责后端编写,与前端进行一个交互,在第一个项目我负责
客户管理模块,比如简单的页面展示与后端数据库的增删改查,还有就是客户分配销售的逻辑,权限组件的编写 等等
在第2个项目中写api接口 利用restful框架给前端返回 规则的json格式 进行前端页面的展示 增加修改 还有购物车的逻辑编写
个人中心的菜单展示

你遇到过什么难点

在第一个项目中 我遇到的难点 就是权限组件的

菜单表Menu	id、 name
权限表Permission	id、 title、 url、 name、 parent_id、 menu_id
角色表Role	id、 name
用户表User	id、 username、 password
角色和权限关系表	id、 role_id、 permission_id
用户和角色关系表	id、 user_id、 role_id

在web应用中, 一个URL代表一个权限, 可以访问某一URL则说明有该权限. 该权限系统中URL被分为两种, 一种是可以做二级菜单的父权限, 一种是不能做菜单的子权限. Menu表中的数据称之为一级菜单, 二级菜单被分配给一级菜单. 子权限分配给父权限.

当用户登录成功时, 根据用户所有的角色查询出所具有的权限, 将权限信息和菜单信息存放在session中. 登录成功后跳转至其他URL时, 请求经过中间件时进行权限的校验, 根据当前访问的url和session中存放的权限信息进行正则匹配. 都匹配不成功, 则拒绝访问. 匹配成功则继续走正常的流程得到相应的响应.

页面中的可点击的按钮也是权限, 在模板渲染时使用自定义filter判断该按钮所代表的权限是否在该用户所拥有的权限中, 如果是则显示该按钮, 否则不显示.

你的公司

法定代表人	彭敬明	
公司类型	其他有限责任公司
地址	上海市杨浦区隆昌路588_1号26楼2606-137室

CRM

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

permission_dict = {
    '权限的URL别名':{
        'url': 'url路径',
        'id': '权限的id',
        'pid': '父权限的id',
        'title': '权限的标题',
        'pname': '父权限的URL别名',
    }
}



menu_dict = {
    'title': '客户管理',
    'icon': 'fa-address-book-o',
    'weight': 10,
    'children': [{
        'title': '客户列表',
        'url': '/customer/list/',
        'id': 1,
    },]
}

将权限和菜单的字典存放在session中是为了给不同用户存放不同的权限和菜单, 并且session可以存放在Redis中, 读取速度快.

权限校验的中间件都做了什么事情?

(1)获取当前访问的URL, 判断是否在不需要权限校验的白名单中, 如果在则不再进行校验.

(2)从session中获取到该用户的权限信息.

(3)循环出每一个权限进行正则匹配, 匹配成功则改变flag标志位为True, 并且获取到需要默认展开菜单的权限id和要展示的路径导航信息.

(4)循环结束后, flag还未False则拒绝访问.

你的公司有多少人 部门有多少人 测试开发多少人

200  20  10    开:测试3:1 或2:1

产品采购分销系统
中这个项目 我负责的是 财务管理模块
需要解决的需求是
每个人的查询工资并且一键计算的展示(权限)
查看工资明细 历史信息
数据存数据库中

对数据库的数据做展示时,不同字段类型有不同的展示方法,分别是什么?

1.对象.属性
2.对象.属性.另外一张表的属性
3.get_字段名_display(choice字段显示)       
4.对象.属性.all()(获取到关联的多对多表的数据信息)

请详细说说你们公司销售是如何使用CRM的。

1. 登录
2. 查看公户信息,选取自己想聊的客户,拉到自己的私户中
3. 然后对客户进行一对一深入交流
4. 将每次交流体验记录到跟进记录中
5. 也负责帮助客户写报名信息
6. 然后缴费成功之后,进行售后服务

权限批量操作时, 哪些权限是需要新增的?哪些是需要删除的?哪些是可更新的?

  • 新增的: 路由系统中有, 数据库中没有的.
  • 删除: 路由系统中没有, 数据库中有的
  • 可更新: 路由系统和数据库中都有的

开发过程中遇到问题,一般都是怎样解决的?请说一下你印象比较深刻的一个问题.

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

  • 管理页面对权限进行增加,删除,更新等操作
  • 角色管理页面, 分别对角色设置权限并保存
  • 分别为用户设置角色信息并保存

简述如何将rbac组件应用到一个新项目中.

  • (1)拷贝rbac组件到新的项目中, 注册app
  • (2)修改用户表, 继承rbac中的User
  • (3)执行数据库迁移指令
    • 1)删除rbacmigrations中的记录
    • 2)注释掉admin中的User
    • 3)roles=models.ManyToManyField(to=Role, verbose_name='用户拥有的角色', blank=True) 注意: 关联的字段不要写成字符串形式
  • (4)设置rbacurl
  • (5)菜单管理
  • (6)权限的录入
    • 1)所有的url要有name
    • 2)不要忽略rbacnamespace
    • 3)注意url和别名的长度
    • 4)构建层级结构
  • (7)角色管理
  • (8)分配权限
    • 1)注意用新的用户表替换rbac中的User
    • 2)给不同角色分配权限
    • 3)给不同用户分配角色
  • (9)应用权限
    • 1)应用中间件 -- 在settings.py中写上权限的配置
    • 2)登录成功后权限信息的初始化
  • (10)动态生成二级菜单
  • (11)应用路径导航
  • (12)权限控制到按钮级别

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

技术点 作用
中间件 进行访问权限校验
inclusion_tag 动态生成二级菜单和路径导航
filter 权限控制到按钮级别
modelformset 权限的批量操作
session 保存权限和菜单的数据结构

请简述实现权限控制的流程?

1.一个URL就是一个权限
2.不同的用户对应不同的身份,不同的身份对应相应的权限,进而实现对权限的控制

列举权限有多少张表?表中都有那些字段?

6张表
用户表:用户名
身份表:身份名称
菜单表:
权限表:权限名称
用户-身份多对多表
身份-权限多对多

为什么要把权限信息放到session中?权限信息放到session有什么优点?

1.操作方便,可以配置到缓冲中、数据库中、redis中
2.权限用的比较多,去缓冲中拿要快很多

权限控制到按钮级别是如何实现的?

按钮的url别名和数据库的权限表字段url_name进行对比

如何实现把权限粒度控制到数据行?

hao添加一条件表,记录着数据表名,查询条件(id>2) 

路飞学诚

2.1 首页

功能:导航菜单、轮播图、退出登录

a. 开发背景
为了提升客户满意度,决定了给原有的官网网站进行迭代更新增加功能,项目主要用于给公司节约推广成本进行客户引流, 商品交易到售后一条龙服务
b. 团队
   - 开发     
      - 前端 1
      - 后端 4-5
   - 运维 1
   - UI 1
   - 测试 1
   - 产品经理 1
   - 运营 2
   - 销售 2
总结:我们的团队有14-15人左右,前端1个,后端4-5人,运维1人,UI一个,测试1个,还有产品经理1人  还有运营、销售各两个
 
c. 项目架构
    - 导师后台(基于Stark组件,给导师管理学员:作业、学习进度、跟进记录)
    - 管理后台(基于Stark组件,给运营使用:上传视频、写文章、优惠券、退款、休学)
    - 主站(基于Vue+Django restful framework框架)
        主要模块
            - 课程
                - 课程列表
                - 课程详细(大纲、常见问题、推荐课程)
                - 课程章节
                - 课程目录
                - 看视频(CC视频)
                - 评论
            - 深科技
                - 文章
                - 收藏
                - 点赞
                - 评论
            - 购物车
                - 加入购物车
                - 去结算
                - 立即支付(支付宝),公司叫什么名字:上海梯方教育科技有限公司
                - 基于微信消息推送
            - 个人中心
                - 我的账户
                - 我的订单
                - 我的收藏
                - 个人资料
                - 账号安全
            - 其他:关于我们、联系我们等页面
                - 基本返回数据:关于我们 联系我们 商务合作 帮助中心 意见反馈 新手指南
    - 负责人:2个人
    - 开发了多久:6个月( 从立项到目前第一个版本,最开始自己学习rest-framework框架
    - 熟悉的模块/有过问题的模块:
        - 购买
            - 优惠券/贝里/支付宝(业务逻辑比较复杂)
        - CORS
            - 前端问你
            - 最开始听说过,不太熟悉; 概述...
             
总结:项目架构分为导师后台、管理后台、主站三大模块。
    导师后台基于stark组件开发的,主要是给导师管理学员的作业、学习进度和跟进记录的工作
    管理后台基于stark组件开发的,主要是给运营使用,用与上传视频、写文章、优惠卷的发放和使用、还有退款和学员休学等工作的管理
    主站基于vue和Django restful framework框架开发的,主要包含课程、交流区、购物车、个人中心、其他的模块,主要给用户用于查看和购买课程,了解平台的页面
        - 交流区:基于restful将数据序列化,基于restful api规范的不同请求方式来实现响应的功能,如使用get方法获取文章,post方法实现点赞、收藏、评论等功能,
             使用option实现复杂请求 解决跨域问题
  


d. 表结构(有多少张表,一共多少行)
   总共48张表 1005行
      - 15张表(记住并熟悉的|课程相关)
      - 13张表(加上用户和token表)
    - 课程
      - 课程大类(CourseCategory):前端、后端...
      - 课程子类(CourseSubCategory--FK—>CourseCategory):如python、linux具体课程
        - 学位课程(DegreeCourse--MTM->Teacher):
            - 学位课程奖学金(Scholarship--FK->DegreeCourse):特点
            - 导师、讲师(Teacher--自关联):学位课程配备导师
        - 普通课程(Course--FK->CourseSubCategory,--FK->DegreeCourse)
               - 价格与课程有效周期(PricePolicy--FK->ContentType):所有课程都包含
               - 优惠卷(Coupon):所有课程都包含
            - 课程详细(CourseDetail--OTO->Course,MTM->Course,Teacher):所有课程的详细内容
            - 课程大纲(CourseOutline--FK->CourseDetail):
            - 课程章节(CourseChapter--FK->Course)
            - 课时目录(CourseSection--FK->CourseChapter)
            - 常见问题(OftenAskedQuestion--FK->ContentType) 
                      
逻辑总结:课程包含课程大类和子类两种,分别有学位课程和普通课程两种,区别在于学位课程除了包含普通课程的优惠卷和价格策略
          还包含学位奖学金和分配相应的导师,除此之外还有课程详细、课程大纲、课程章节、课时目录与常见问题等13个类

2.2 登录注册

功能:用户登录、极验验证码、多条件登录、记住密码、短信发送、短信冷却倒计时、jwt认证

我们实现简单的登录注册 要考虑到方方面面 比如验证码登录 短信登录
注册要进行md5加密
简单来说就是前端提交信息给api接口 后端接收返回规则的json字符串给前端,前端根据结果生成不同的页面 

1.验证码登录
验证码就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰元素,由用户肉眼识别其中的验证码信息,然后输入表单提交网站验证,验证成功后才能使用某项功能。
验证码通常用在用户登录或留言的网页界面中,当用户在浏览器端输入验证码之后,将用户名、密码和验证码等信息提交到服务器,服务器端获取用户的提交之后,判断用户提交的验证码字符与服务器端保存的字符是否相同。如果相同,则通过对用户提交信息的验证;否则将提示没有通过验证的提示信息。
2.短信登录
一般来说短信验证码的原理是这样的,用户在前台填写资料和手机号码后,点击“获取验证码”按钮,后台通过预先的设定,先接收到前台指令,再生成一条随机验证码,一般是一串字母或数字组成的字符,再调用短信接口,经服务器响应作答,发送用户的手机端。用户在前台相应输入框输入验证码,后台经过一定的算法支持,从而会对用户提交的随机码和后台原先存储的验证码信息做对比,如果两者无误差,那么用户的身份得以确认成功,就可以继续接下来的操作。

2.3 课程列表

功能:课程分类、课程列表、课程多条件筛选展示、课程分类展示、课程分页展示、课程章节课时展示、课程优惠策略

数据库查询·出来 数据 ,按照商量好的 数据结构 就行json序列化 给前端就行了  序列化你可以用drf中的序列化类进行实现的

2.4 课程详情

功能:课程信息展示、视频播放、富文本编辑器

2.5购物车

购物车商品信息格式:
    商品数量[因为目前路飞学城的商品是视频,所以没有数量,如果以后做到真实商品,则必须有数量]
    
    商品id
    用户id
    课程有效期
    商品勾选状态

五种数据类型
    string字符串
        键:值
    hash哈希字典
        键:{
            域:值,
            域:值,
        }
    list列表
        键:[值1,值2,....]
    set集合
        键:{值1,值2,....}
    zset有序集合
        键:{
            权重值1:值,
            权重值2:值,
        }

经过比较可以发现没有一种数据类型,可以同时存储4个字段数据的,所以我们才有2种数据结构来保存购物车数据
可以发现,上面5种数据类型中,哈希hash可以存储的数据量是最多的。
hash:哈希
    键[用户ID]:{
        域[商品ID]:值[课程有效期],
        域[商品ID]:值[课程有效期],
        域[商品ID]:值[课程有效期],
        域[商品ID]:值[课程有效期],
    }
set:    集合
    键[用户ID]:{商品ID1,商品ID2....}

集合

唯一订单号生成
3、时间戳+会员ID
优势:同一时间,一个用户不会存在两张订单
缺陷:会员ID也会透露运营数据,鸡生蛋,蛋生鸡的问题

2.6 商品结算

功能:订单商品信息列表、订单信息展示、积分计算功能、优惠券策略、课程有效期计算、第三方支付平台接口


2.7 购买成功

功能:订单状态切换,购物课程的有效期记录


2.8 个人中心

功能列表:我的订单、订单状态改变

2.9 视频播放

功能:视频加密播放

drf

drf的序列化组件:
    1.作用: 把python中的对象,转成json格式字符串
    1. 使用步骤1: 写一个类继承Serializer或者ModelSerializer
       举例(类中选取字段进行序列化):
       
drf的认证组件
1.认证组件的好处:
 比如要访问books/路径,必须登录之后才能访问。一旦登录成功,在响应结果中写一个随机字符串
 
drf权限组件
 和上述的认证组件使用方式一样,定义一个权限类,必须要有def has_permission(self,request, view):pass方法,可以在类中定义变量message指定无权限时的提示内容。
	权限组件也可以在视图中局部使用,或者在settings.py中进行全局配置
  在有注册登录操作时,为了避免认证和权限,还是继承View最好或使用局部认证配置。
  
drf的节流组件
节流(Throttling)类似于权限,因为它决定了是否应该对请求进行授权。节流表示一个临时状态,并用于控制客户端对API的请求率。访问过多就不行访问

DRF视图的组件

drf的解析器
解析器作用:解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据。本质就是对请求体中的数据进行解析。

drf的渲染器
渲染器的作用:渲染器同解析器相反,它定义了框架按照content_type来返回不同的响应。

drf的分页组件

版本的组件
自定义版本处理

路由
自动帮助开发者快速为一个视图创建4个url
        www.oldboyedu.com/api/v1/student/$
     www.oldboyedu.com/api/v1/student(?P<format>\w+)$
        www.oldboyedu.com/api/v1/student/(?P<pk>\d+)/$
        www.oldboyedu.com/api/v1/student/(?P<pk>\d+)(?

posted @ 2020-03-10 09:28  一起奥利给  阅读(298)  评论(0编辑  收藏  举报