项目名称:sass
项目描述:
Bug管理平台串讲
-
基础
-
面向对象
-
网络和并发
-
数据库
-
前端 & django
-
sass
-
技术点
-
常见问题
-
撰写简历:按照规则去编写。
-
-
路飞学城
-
爬虫 & 数据分析
-
自动化测试开发(自动化相关补课)
-
简历 & 面试注意事项
1. 相关技术点
-
虚拟环境
-
为什么用虚拟环境?
- 每个项目都会创建一个虚拟环境且各自的虚拟环境是相互隔离。
- 项目开发:
- 我让大家通过virtualenv在电脑的某个目录下创建虚拟环境,激活并使用即可(线上)。
- 虚拟环境创建在当前项目目录。(本地开发可以把虚拟环境放在项目,git管理时忽略虚拟环境) -
你用什么做的虚拟环境?
virtualenv
-
了解其他的虚拟环境吗?
pipenv
venv 【python3.3之后Python内置虚拟环境工具】
cd crm
python -m venv .venv
-
-
版本相关
-
python3.6
-
为什么选择用py3.6 ?
最新 3.7
选择 3.6(项目稳定性,当时最新的事3.7,如果遇到问题也可以在社区中搜到相关解决方案)
注意事项:时间。 -
3.6具有的功能
-
asyncio支持 async/await语法。
-
f格式化
-
-
-
django1.11.7
-
django3(asgi)
-
异步功能(asgi + 达芙妮) -> 不够成熟
-
-
django2(wsgi)
-
url路由
-
数据库的级联删除 on_delete
-
-
django1.10 + (wsgi)
-
django的中间件
-
-
django1.9 (wsgi)
-
django1.6(wsgi)
-
-
MySQL(次顶配)
-
pymysql( install_as_mysqldb() )
-
-
redis
-
windows开发,为了简单3.x
-
最新5.x
-
-
-
local_settings
本地配置和线上配置
-
git版本控制
-
都有那些工具可以做版本控制?
-
vss
-
svn,集中式版本控制。
-
git,分布式版本控制。
-
-
你们公司用什么做的代码仓库/代码的托管?
-
第三方的平台(花钱)
-
github(公共)
-
gitee(公共/私有-协同开发者最多5人)
-
coding
-
...
-
-
gitlab(开源软件)
自己搭建的代码托管平台
- 优点:不用花钱买其他人服务,数量等无任何限制。
- 缺点:自己需要有服务器 + 系统维护
-
-
项目是几个人开发的?如何基于git做的协同开发?
-
几个人做的?
-
产品经理,去设计产品都有那些功能?并产出一个axure原型图。
-
UI设计,将原型图中的每个部分进行细化,例如:字体大小、背景颜色、图标圆角。【蓝湖平台】
-
前端开发,
-
不前后端分离:根据UI设计的页面把所有静态页面编写出来,就是写出来html、css、js。
-
前后端分离:根据UI设计的页面把所有静态页面编写出来,就是写出来html、css、js + vue.js代码 + 调用后端API
-
-
后端开发,
-
不前后端分离,将前端写的html、css、js文件集成到项目,例如:templates、statics
-
前后分离,编写API给前端调用。
-
-
测试人员 将编写的好程序放在
测试环境
去运行起来,由测试人员去对项目中的各个功能进行测试。 -
运维人员 项目部署:centos + mysql + python + django + 虚拟环境 =>给他代码,将代码运行在线上服务器。
-
-
案例
- 产品
- 前端
- 后端
- 运维(测试)
几个人开发:
- 1个前端
- 2个后端
- Bug管理平台(你),为客户开发面向客户端。
- 后台运行中心(另外一个人),销售和运营管理部分。 -
协同开发
-
小项目,你一个人就能搞定。
-
中大型项目,N个人配合开发(协同开发)
- 每个人都有自己的一个分支,来开发自己的功能。
- 功能开完完成之后,通过提交pr(pull request )让组长(老大)进行代码的review。
注意:是在git基础上做的。
https://www.bilibili.com/video/BV19E411f76x
-
-
-
-
用户认证系统
-
ajax向后台发送请求后台通过ModeForm进行校验
-
ajax发送请求
$.ajax({
url:"",
type:"",
data:{},
dataType:"JSON",
success:function(res){
...
}
}) -
csrf token
-
在提交的数据中要携带token
-
注释中间件 / 装饰器
-
-
ModelForm表单验证
-
为所有Form和ModelForm编写基类BootStrapForm用于为每个字段设置样式。
-
编写钩子函数,clean_字段名
-
-
获取验证码
-
基于腾讯云短信发送短信
-
基于redis去存储短信验证码(60s)
-
-
基于PIL模块实现图片验证码( 扩展:极验验证 )
-
django中Q查询构造复杂条件
-
django配置文件实现自动化短信模板的选择。
-
-
管理中心
-
扩展django的widget实现自动化页面渲染插件,完成颜色搭配选择。
-
星标和我创建以及我参与项目的筛选。
class Project(models.Model):
""" 项目表 """
COLOR_CHOICES = (
(1, "#56b8eb"), # 56b8eb
(2, "#f28033"), # f28033
(3, "#ebc656"), # ebc656
(4, "#a2d148"), # a2d148
(5, "#20BFA4"), # #20BFA4
(6, "#7461c2"), # 7461c2,
(7, "#20bfa3"), # 20bfa3,
)
name = models.CharField(verbose_name='项目名', max_length=32)
color = models.SmallIntegerField(verbose_name='颜色', choices=COLOR_CHOICES, default=1)
desc = models.CharField(verbose_name='项目描述', max_length=255, null=True, blank=True)
use_space = models.BigIntegerField(verbose_name='项目已使用空间', default=0, help_text='字节')
star = models.BooleanField(verbose_name='星标', default=False)
join_count = models.SmallIntegerField(verbose_name='参与人数', default=1)
creator = models.ForeignKey(verbose_name='创建者', to='UserInfo')
create_datetime = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
bucket = models.CharField(verbose_name='cos桶', max_length=128)
region = models.CharField(verbose_name='cos区域', max_length=32)
# 查询:可以省事;
# 增加、删除、修改:无法完成
# project_user = models.ManyToManyField(to='UserInfo',through="ProjectUser",through_fields=('project','user'))
class ProjectUser(models.Model):
""" 项目参与者 """
project = models.ForeignKey(verbose_name='项目', to='Project')
user = models.ForeignKey(verbose_name='参与者', to='UserInfo')
star = models.BooleanField(verbose_name='星标', default=False)
create_datetime = models.DateTimeField(verbose_name='加入时间', auto_now_add=True)
-
-
项目导航
-
基于inclusion_tag和sample_tag实现读取向项目列表和展示。
-
通过URL进行项目的选择和展示。
-
基于django的中间件process_request/process_view实现权限的校验并且将
用户信息
&项目信息
封装到Tracer对象中并附加到request对象,便于后续在视图、模板、templatetags中快速获取数据。 -
基于URL和菜单的对应关系 & 匹配 实现模块项目模块功能的选中展示。
-
-
文件管理
-
基于腾讯的cos对象存储进行文件的持久化管理。
-
去咱们的接口获取凭证
-
基于凭证去cos对象存储进行上传文件
-
再向咱们的接口发送请求,上传文件名和相关ID存储到数据库,然后在页面上进行分级展示。
-
-
为什么要用cors?
由于浏览器具有同源策略的限制,所有会出现跨域的情况。
cors是用于解决跨域。
注意:咱们在项目开发中是如何设置;
- 手动方式,进入腾讯对象存储的后台来设置。
- 创建项目:创建桶 + 对桶中的跨域进行配置。 -
通过content_type和Content-Disposition实现文件实现下载。
-
层级目录操作以及多层嵌套文件和文件夹的删除(API在桶中将文件删除)。
-
处理对象存储中的碎片文件以及桶的删除操作。
-
-
wiki管理
-
基于mdeditor实现wiki内容的管理及图片的上传操作。
-
开发了一个基于Django通用markdown组件,自定义:Field、Form、widget插件、集成静态文件。
-
多层管理结构的操作。
-
递归。(在后台把wiki的层级管理先构造好,前端循环显示)
-
数据类型的嵌套。(在后台把wiki的层级管理先构造好,前端循环显示)
-
前端js和id选择器实现。(直接去数据库获取数据,前端展示)
-
-
-
问题管理
-
通过自定义CheckFilter和SelectFilter可迭代器对象及生成器实现组合筛选的功能。
-
可迭代对象
-
生成器
-
深浅拷贝
-
前端的js配合
-
url操作:url.encode()
-
-
使用自定义SelectFilter类和Select2组件实现动态条件搜索筛选。
-
基于sample_tag实现序号的规则化处理。
-
自定义通用的分页组件实现多框架的统一使用。
-
结合mdeditor、datetimepicker、bootstrap-select组件实现问题管理。
-
在使用组件时是结合前端+ModelForm后端的attr属性实现。
-
【重点】通过shown.bs.modal事件来解决md和bootstrap组件的兼容问题导致md组件无法初始化。
-
在项目中使用自动生成邀请码的机制实现成员邀请。
-
ajax
-
前端展示和拼接
-
前端的内容的拷贝
-
-
保存所有的问题信息的更新记录及自定义MD组件的事件实现描述的变更。
-
问题变更记录和多级回复和评论(js实现的多级)。
-
短信
-
邮件
-
微信
-
-
-
概览和统计
-
基于daterangepicker进行实现的选择并使用highcharts实现数据报表的展示。
-
根据项目的数据信息进行概览数据统计,例如:问题数量、空间容量、项目和动态信息。
注意:给你一个示例代码,实现动态数据统计。
-
-
购买套餐
-
基于支付宝实现套餐的支付。
-
基于redis做的购物车(redis中存储数据的结构和流程到底是什么?)
-
支付宝对数据rsa加密(支付宝私钥、商户公钥)
-
-
当支付的时,如果用户支付成功之后,在未执行回调函数时(更新状态),服务器宕机。
支付宝会在24小时以内不间断的向我们的API发送请求,直到我们给他返回成功。
-
点击购买时出现订单重复?
在redis中设计的购物车中只有当前想要购买的商品,如果再次点击购买时,会将原来的购买信息覆盖。
-