企业项目开发流程
项目开发流程
-
需求分析
架构师 和开发组组长 草拟一些项目的大致技术点和流程
架构师 + 产品经理 + 开发组组长去客户公司听客户需求
在跟客户聊的时候 你要有意识有目的引导客户朝着你之前已经想好的
功能思路上去提需求
-
架构设计
架构师(框架 语言 数据库 缓存数据库 表设计 拆分功能 项目的报价(参与开发人员的个数 一个人1000~2000))
-
分组开发
开会(架构师组长会议) 分任务 按模块功能分的开会(小组会议) 组长在拆分功能 每个组员写几个小功能小组成员写代码 自己需要提前测试一下有没有bug
-
交付测试
一些不是显而易见的bug如果是显而易见的bug 就需要扣你绩效
-
运维上线
委托给你们公司帮忙上线帮忙维护
交给对方公司
BBS表设计
表
先确定表名
然后是表中的字段
最后才是表关系
-
用户表
利用auth_user表 手机号 头像 注册时间 blog 一对一个人站点表
-
个人站点表
站点名称 站点标题 站点样式
-
文章标签表
标签名 blog 一对多个人站点表
-
文章分类表
分类名 blog 一对多个人站点表
-
文章表
文章标题 文章简介 文章内容 文章发布时间 blog 一对多个人站点表 tags 多对多文章标签表 category 一对多文章标签表 # 文章的点赞数 点踩数 评论数 数据库优化设计方案(*****) up_num down_num comment_num # 你只需要保证上面的三个普通字段跟对应的表中的数据同步更新即可
-
文章的点赞点踩表
user_id 一对多用户表 article_id 一对多文章表 is_up BooleanField user_id article_id 1 1 1 2 1 3 2 1 3 1 4 1
-
文章的评论表
user_id 一对多用户表
article_id 一对多文章表
content TextField()
create_time
自关联 根评论子评论
parent 跟自己所在的表外键关联 一对多
id user_id article_id parent_id
1 1 1
2 2 1 1
3 3 1
4 4 1
5 5 1 3
6 1 1
Userinfo表中的字段avatar = models.FileField(upload_to='avatar/',default='static/img/default.jpg')
该字段你直接传文件即可 会自动将文件保存到avatar文件夹下 然后数据库里面存文件路径
Blog表中的site_theme字段
该字段存的是用户自己写的css文件路径
Article表中 有数据库优化三个普通字段
up_num = models.IntegerField(default=0)
down_num = models.IntegerField(default=0)
comment_num = models.IntegerField(default=0)
外键字段
category = models.ForeignKey(to='Category',null=True)
blog = models.ForeignKey(to='Blog',null=True)
tags = models.ManyToManyField(to='Tag',through='Article2Tag',through_fields=('article','tags'))
数据库同步
执行数据库迁移命令makemigrations,migrate
注册功能
需要利用内置对象 FileReader
完成文件的读取操作
$('#mdd').on('change',function ()
获取用户上传的文件对象
let MyFileReader = new FileReader()
让文件阅读器 读取文件
let fileObj = $(this)[0].files[0]
将读取之后的文件的内容替换到img标签src属性中
MyFileReader.readAsDataURL(fileObj) //IO操作 异步
等待文件阅读器读取完文件之后执行下面的代码
MyFileReader.onload = function(){
$('#img').attr('src',MyFileReader.result)
}
提交按钮
将用户输入的数据全部发送给后端 (普通的键值对 文件)
不停的朝里面添加数据
$('#submit').click(function () {
let MyFormData = new FormData()
}
普通键值对添加完毕 (利用form标签内部有一个自动序列化普通键值对方法)
手动添加数据
MyFormData.append('avatar',$('#mdd')[0].files[0])
发送ajax请求
发送文件一定要指定两个参数
不要让浏览器处理你的数据
processData:false,
不要使用任何的编码 django能识别对象本身
contentType:false
利用回调函数 跳转到登录页面
window.location.href = data.url
index就是报错字段 obj就是错误信息 是数组的形式
获取报错字段 手动拼接出该字段所对应的input框的id值
let targetId = '#id_' + index;
$(targetId).next().text(obj[0]).parent().addClass('has-error')
input框获取焦点事件
$('input').focus(function () {
$(this).next().text('').parent().removeClass('has-error')