CIMP系统项目实战

点击这里,边看视频讲解,边学习以下内容

系统功能介绍

CIMP系统,中文全称:校园信息管理平台。

CIMP 实现校园 学生老师账号、通知公告、校园新闻动态、学生老师论文、学生毕业设计等数据的发布和管理。

其中内置了一个灵活的工作流系统,实现了毕业设计项目的申请、审批、提交、评分功能。

该工作流系统的引擎设计灵活,将来可以迅速拓展开发出 各种其他工作流,比如:出差报销、学生社团活动 等流程的电子化。

该系统可以作为 大学生 毕业设计 、企业软件工程师 前后端开发锻炼 的 优质实战项目。

如需高效学习,建议报白月黑羽1对1的小班培训,全程指导0基础学员,大量练习实战。学习速度,学习深度远非自学能够达到。

联系方式:微信 18502556834


具体功能描述,参见视频讲解

下载运行

百度云盘

链接:https://pan.baidu.com/s/19zJzs6ysqNIzUUuSfur6pA

提取码:rofe

下载zip包后,解压即可。

注意: CIMP 存放的路径上 一定不能有中文 ,否则前端模块启动不了(这是Nginx的问题)


进入到目录中,分别运行 启动前端.bat , 启动后端.bat

首次运行时,会有防火墙提示,选择允许即可。

已经创建了系统管理员账号 byhy , 密码 111111

系统采用前后分离的模式进行开发,后端系统缺省服务端口号为 8210。

具体操作,参见视频讲解。

接口概述

本接口是校园信息管理平台 (CIMP) 前端 和 后端子系统之间的接口。

所有的HTTP请求响应消息,如果有消息体,一律为json格式。

所有的API响应消息,如果操作不成功,返回消息体格式如下

{
    "ret": 1,    
    "msg":  "用户名或者密码错误"
}

ret 不为 0 表示操作失败, msg字段描述 API 操作失败的原因


登录

3种类型的账号:管理员、老师、学生, 均使用该接口进行登录。

前端发送的登录请求中包含账号、密码。

后端接收后,对账号密码的正确性进行校验。

CIMP系统使用session会话机制。

如果校验通过,服务端在响应消息头Set-Cookie 中存入sessionid ,该用户的后续请求头Cookie中必须携带sessionid。

请求

  • 请求头
POST /api/sign
Content-Type: application/json
  • 消息体

为json格式

{
    "action" : "signin",
    "username" : "xxxx",
    "password" : "yyyy"
}

响应

  • 响应头
200 OK
Content-Type: application/json
Set-Cookie: sessionid=<sessionid数值>
  • 消息体

如果校验通过,返回消息如下

{
    "ret": 0,
    "usertype":1,
    "userid":1,
    "realname":"白月黑羽 ",
}

ret 为 0 表示登录成功

usertype 是用户类型。 1:管理员,2000:学生,3000:老师

userid 是用户在系统中的id

realname 是用户的姓名

登录成功后, 服务端在消息头Set-Cookie 中存入sessionid ,该用户的后续请求头Cookie中必须携带sessionid。

如果登录校验失败,返回失败的原因,示例如下

{
    "ret": 1,    
    "msg":  "用户名或者密码错误"
}

ret 不为 0 表示登录失败, msg字段描述登录失败的原因

登出

请求

  • 请求头
POST /api/sign
Cookie: sessionid=<sessionid数值>
Content-Type: application/json
  • 消息体

为json格式

{
    "action" : "signout"
}

响应

后端应该根据sessionid清除掉session,然后返回响应消息

  • 响应头
200 OK
Content-Type: application/json
Set-Cookie: sessionid=""
  • 消息体
{
    "ret": 0
}

账号管理

该API接口 用来 列出、添加、修改、删除系统中的账号。

发出账号管理的API 只能是管理员用户。后端要根据session校验。

账号管理的API 路径均为 /api/account

列出账号

用来列出系统中的账号信息。

请求

  • 请求头
GET /api/account?action=listbypage&pagenum=1&pagesize=5&keywords=
Cookie: sessionid=<sessionid数值>
  • url参数
参数名 示例 必要性 含义
action listbypage 必填项 必须为 listbypage
pagesize 1 必填项 分页的 每页获取多少条记录
pagenum 2 必填项 获取第几页的信息
keywords 白月 黑 可选项 搜索关键字,如果提供,表示用户姓名中包含的关键字。 多个关键字以空格隔开,表示姓名中同时包含的关键字词

响应

后端返回列出结果

  • 消息体
{
  "ret": 0,
  "items": [
    {
      "id": 4,
      "username": "student-2",
      "realname": "学生-2",
      "studentno": "00002",
      "desc": "学生-2",
      "usertype": 2000
    },
    {
      "id": 3,
      "username": "student-1",
      "realname": "学生-1",
      "studentno": "00001",
      "desc": "学生-1",
      "usertype": 2000
    },
    {
      "id": 1,
      "username": "byhy",
      "realname": "白月黑羽",
      "studentno": null,
      "desc": null,
      "usertype": 1
    }
  ],
  "total": 8,
  "keywords": ""
}

ret 为 0 表示列出成功

total 为 8 表示系统中(不是当前页)总共有8个账号

items 数组 里面包含了当前页中的账号信息。

每个账号信息以如下格式存储

    {
      "id": 1,
      "username": "byhy",
      "realname": "白月黑羽",
      "studentno": null,
      "desc": null,
      "usertype": 1
    }

studentno 表示学号,非学生为null

usertype 表示 账号类型,取值前面已经说过

添加账号

用来添加系统中的账号信息。

请求

  • 请求头
POST /api/account
Cookie: sessionid=<sessionid数值>
Content-Type: application/json
  • 消息体

要添加的账号的具体信息,格式如下

{
  "action": "addone",
  "data": {
    "realname" : "紫一元",
    "username" : "ziyiyuan",
    "password" : "111111",
    "studentno": "300005",
    "desc"     : "白月黑羽的优秀学员",
    "usertype" : 2000
  }
}

其中

action: 填写 addone, 表示 添加一个账号的操作

realname: 用户的姓名

username: 用户的登录名

password: 用户的密码

studentno: 如果该用户为学生,则为学生的学号,如果不是学生,此字段为空字符串

usertype: 用户类型, 2000 为学生, 3000 为老师。

响应

  • 消息体
{
  "ret": 0,
  "id": 5
}

ret 为 0 表示添加成功

id 为添加账号的 id

修改账号

用来修改系统中的账号信息。

请求

  • 请求头
PUT /api/account
Cookie: sessionid=<sessionid数值>
Content-Type: application/json
  • 消息体

要修改的账号的具体信息,格式如下

{
  "action": "modifyone",
  "id": 10,
  "newdata": {
    "realname": "紫一元2",
    "username": "ziyiyuan2",
    "studentno": "300015",
    "password": "111111",
    "desc": "白月黑羽网站的Python老师,创业公司CTO"
  }
}

其中

action: 填写 modifyone ,表示 修改一个账号的操作

id: 要修改账号的 id

newdata : 里面包含了要修改的信息

realname: 用户的姓名修改为什么。如果此项不用修改,该字段不出现

username: 用户的登录名修改为什么。如果此项不用修改,该字段不出现

studentno: 学生的学号修改为什么。如果此项不用修改,该字段不出现

password: 用户的密码修改为什么。如果此项不用修改,该字段不出现

desc: 账号的描述信息修改为什么。如果此项不用修改,该字段不出现

响应

  • 消息体
{
  "ret": 0
}

ret 为 0 表示修改成功

删除账号

用来删除系统中的账号信息。

请求

  • 请求头
DELETE /api/account
Cookie: sessionid=<sessionid数值>
Content-Type: application/json
  • 消息体

格式如下

{
  "action": "deleteone",
  "id": 10
}

其中

action: 填写 deleteone ,表示 删除 一个账号的操作

id: 要删除账号的 id

响应

  • 消息体
{
  "ret": 0
}

ret 为 0 表示删除成功


通知管理

该API接口 用来 列出、添加、删除、封禁、解禁系统中的通知。

通知管理的API 路径均为 /api/notice

列出发布状态通知

用来列出系统中处于发布状态的通知。

请求

  • 请求头
GET /api/notice?action=listbypage&pagenum=1&pagesize=5&keywords=
Cookie: sessionid=<sessionid数值>
  • url参数
参数名 示例 必要性 含义
action listbypage 必填项 必须为 listbypage
pagesize 1 必填项 指定分页的 每页获取多少条记录
pagenum 2 必填项 指定获取第几页的信息
keywords 白月 黑 可选项 搜索关键字,如果提供,表示标题中包含的关键字。 多个关键字以空格隔开,表示标题中同时包含的关键字词
withoutcontent true 可选项 如果该字段出现,表示返回的条目中不需要包含具体内容,节省流量

响应

后端返回列出结果

  • 消息体
{
  "ret": 0,
  "items": [
    {
      "id": 4,
      "pubdate": "2020-03-13T08:30:47.985Z",
      "author": 1,
      "author__realname": "白月黑羽",
      "title": "公告4",
      "content": "水电费水电费水电费4444",
      "status": 1
    },
    {
      "id": 3,
      "pubdate": "2020-03-13T08:30:37.447Z",
      "author": 1,
      "author__realname": "白月黑羽",
      "title": "关于延迟2020年寒假后开学时间的通知",
      "content": "各位同学,由于新冠疫情,2020年寒假后开学时间延迟至5月1日。",
      "status": 1
    }
  ],
  "total": 2,
  "keywords": ""
}

ret 为 0 表示列出成功

total 为 2 表示系统中(不是当前页)总共有2个通知

items 数组 里面包含了当前页中的通知信息。

每个通知信息以如下格式存储

    {
      "id": 3,
      "pubdate": "2020-03-13T08:30:37.447Z",
      "author": 1,
      "author__realname": "白月黑羽",
      "title": "关于延迟2020年寒假后开学时间的通知",
      "content": "各位同学,由于新冠疫情,2020年寒假后开学时间延迟至5月1日。",
      "status": 1
    }

pubdate 为创建时间,为iso格式

author 为创建者的id

author__realname 为创建者的姓名

title 为通知的标题

content 为通知的内容,如果请求参数中withoutcontent值为true,则没有该字段

status 为通知的状态。 正常发布状态:1, 撤回状态:2,封禁状态:3

列出所有状态通知

用来列出系统中 所有的 通知。 包括非发布状态的通知

发出该 API 只能是管理员用户。后端要根据session校验。

请求

  • 请求头
GET /api/notice?action=listbypage_allstate&pagenum=1&pagesize=5&keywords=
Cookie: sessionid=<sessionid数值>
  • url参数
参数名 示例 必要性 含义
action listbypage_allstate 必填项 用来列出系统中 所有的 通知
pagenum 2 必填项 获取第几页的信息
pagesize 1 必填项 分页的 每页获取多少条记录
keywords 白月 黑 可选项 搜索关键字,如果提供,表示标题中包含的关键字。 多个关键字以空格隔开,表示标题中同时包含的关键字词

响应

后端返回列出结果,响应消息格式与 列出发布状态通知API的响应 格式一致

查看一条通知

用来查看一条通知的内容。

请求

  • 请求头
GET /api/notice
Cookie: sessionid=<sessionid数值>
Content-Type: application/json
  • url参数
参数名 示例 必要性 含义
action getone 必填项 用来查看一条通知
id 2 必填项 查看的通知对应的ID

响应

  • 消息体
{
  "ret": 0,
  "rec": {
    "id": 5,
    "pubdate": "2020-03-23T03:04:42.808Z",
    "author": 1,
    "author__realname": "白月黑羽",
    "title": "2020软件工程研究生招收规定",
    "content": "规定内容详情如下",
    "status": 1
  }
}

rec 中包含了具体的通知信息,其中

pubdate 为创建时间,为iso格式

author 为创建者的id

author__realname 为创建者的姓名

title 为通知的标题

content 为通知的内容

status 为通知的状态。 正常发布状态:1, 撤回状态:2,封禁状态:3

添加通知

用来添加一条通知。

发出该 API 只能是管理员用户。后端要根据session校验。

请求

  • 请求头
POST /api/notice
Cookie: sessionid=<sessionid数值>
Content-Type: application/json
  • 消息体

要添加的账号的具体信息,格式如下

{
  "action": "addone",
  "data": {
    "title": "2020软件工程研究生招收规定",
    "content": "规定内容详情如下"
  }
}

其中

action: 填写 addone, 表示 添加一条通知的操作

data 里面是通知的内容,其中:

title: 通知的标题

content: 通知的正文

响应

  • 消息体
{
  "ret": 0,
  "id": 5
}

ret 为 0 表示添加成功

id 为添加通知的 id

修改通知

发出该 API 只能是管理员用户。后端要根据session校验。

请求

  • 请求头
PUT /api/notice
Cookie: sessionid=<sessionid数值>
Content-Type: application/json
  • 消息体

格式如下

{
  "action": "modifyone",
  "id": 2,
  "newdata": {
    "title": "给大一新学生的一封信",
    "content": "信的内容如下"
  }
}

其中

action: 填写 modifyone ,表示 修改一条通知的操作

id: 要修改通知的 id

newdata : 里面包含了要修改的信息,其中:

title: 通知的标题修改为什么。如果此项不用修改,该字段不出现

content: 通知的正文修改为什么。如果此项不用修改,该字段不出现

响应

  • 消息体
{
  "ret": 0
}

ret 为 0 表示修改成功

封禁通知

用来封禁一条通知。封禁后的通知,对学生、老师、未登录账号不可见

发出该 API 只能是管理员用户。后端要根据session校验。

请求

  • 请求头
PUT /api/notice
Cookie: sessionid=<sessionid数值>
Content-Type: application/json
  • 消息体

格式如下

{
  "action": "banone",
  "id": 10
}

其中

action: 填写 banone ,表示 封禁一条通知 的操作

id: 要封禁通知的 id

响应

  • 消息体
{
  "ret": 0,
  "status": 3
}

ret 为 0 表示封禁成功 status 为 现在的状态值

解禁通知

用来解禁一条通知。解禁后的通知,对学生、老师、未登录账号恢复可见

发出该 API 只能是管理员用户。后端要根据session校验。

请求

  • 请求头
PUT /api/notice
Cookie: sessionid=<sessionid数值>
Content-Type: application/json
  • 消息体

格式如下

{
  "action": "publishone",
  "id": 10
}

其中

action: 填写 publishone ,表示 解禁一条通知 的操作

id: 要解禁通知的 id

响应

  • 消息体
{
  "ret": 0,
  "status": 1
}

ret 为 0 表示解禁成功 status 为 现在的状态值

删除通知

用来删除一条通知。

发出该 API 只能是管理员用户。后端要根据session校验。

请求

  • 请求头
DELETE /api/notice
Cookie: sessionid=<sessionid数值>
Content-Type: application/json
  • 消息体

格式如下

{
  "action": "deleteone",
  "id": 10
}

其中

action: 填写 deleteone ,表示 删除 一个通知的操作

id: 要删除通知的 id

响应

  • 消息体
{
  "ret": 0
}

ret 为 0 表示删除成功


新闻管理

该API接口 用来 列出、添加、删除、封禁、解禁系统中的新闻。

新闻管理的API url路径均为 /api/news

除了API url路径, 新闻管理 API的规则 和 通知管理 完全一样。


论文管理

该API接口 用来 列出、添加、撤回、封禁、解禁、删除系统中的论文。

论文管理的API url路径均为 /api/paper

除了API url路径, 论文管理 API的规则 和 通知管理 完全一样。

列出发布状态论文

用来列出系统中 发布状态 的论文。

请求

  • 请求头
GET /api/paper?action=listbypage&pagenum=1&pagesize=5&keywords=
Cookie: sessionid=<sessionid数值>
  • url参数
参数名 示例 必要性 含义
action listbypage 必填项 指定列出系统中 发布状态 论文
pagesize 1 必填项 指定分页的 每页获取多少条记录
pagenum 2 必填项 指定获取第几页的信息
keywords 白月 黑 可选项 搜索关键字,如果提供,表示标题中包含的关键字。 多个关键字以空格隔开,表示标题中同时包含的关键字词
withoutcontent true 可选项 如果该字段出现,表示返回的条目中不需要包含具体内容,节省流量

响应

后端返回列出结果

  • 消息体
{
  "ret": 0,
  "items": [
    {
      "id": 4,
      "pubdate": "2020-03-13T08:30:47.985Z",
      "author": 2,
      "author__realname": "张飞",
      "title": "流体在管道中的动力表现",
      "content": "流体在管道中的动力表现正文",
      "thumbupcount": 1,
      "status": 1
    },
    {
      "id": 3,
      "pubdate": "2020-03-13T08:30:37.447Z",
      "author": 3,
      "author__realname": "关羽",
      "title": "海量数据从 MySQL 到 Hbase 的同步",
      "content": "海量数据从 MySQL 到 Hbase 的同步正文",
      "thumbupcount": 0,
      "status": 1
    }
  ],
  "total": 2,
  "keywords": ""
}

ret 为 0 表示列出成功

total 为 2 表示系统中(不是当前页)总共有2个论文

items 数组 里面包含了当前页中的论文信息。

每个论文信息以如下格式存储

    {
      "id": 3,
      "pubdate": "2020-03-13T08:30:37.447Z",
      "author": 3,
      "author__realname": "关羽",
      "title": "海量数据从 MySQL 到 Hbase 的同步",
      "content": "海量数据从 MySQL 到 Hbase 的同步正文",
      "thumbupcount": 0,
      "status": 1
    }

pubdate 为创建时间

author 为创建者的id

author__realname 为创建者的姓名

title 为论文的标题

content 为论文的内容,如果请求参数中withoutcontent值为true,则没有该字段

thumbupcount 为论文的点赞数量

status 为通知的状态。 正常发布状态:1, 撤回状态:2,封禁状态:3

列出所有状态论文

用来列出系统中 所有的 论文。 包括非发布状态的论文

发出该 API 只能是管理员用户。后端要根据session校验。

请求

  • 请求头
GET /api/paper?action=listbypage_allstate&pagenum=1&pagesize=5&keywords=
Cookie: sessionid=<sessionid数值>
  • url参数
参数名 示例 必要性 含义
action listbypage_allstate 必填项 指定列出系统中 所有的 论文
pagenum 2 必填项 指定获取第几页的信息
pagesize 1 必填项 指定分页的 每页获取多少条记录
keywords 白月 黑 可选项 搜索关键字,如果提供,表示标题中包含的关键字。 多个关键字以空格隔开,表示标题中同时包含的关键字词

响应

后端返回列出结果,响应消息格式与 只列出发布状态API的响应 格式一致

列出我的论文

用来列出系统中 我创建的 论文。 包括非发布状态的论文

发出该 API 只能是学生、老师账号。后端要根据session校验。

请求

  • 请求头
GET /api/paper?action=listminebypage&pagenum=1&pagesize=5&keywords=
Cookie: sessionid=<sessionid数值>
  • url参数
参数名 示例 必要性 含义
action listminebypage 必填项 指定列出系统中 所有我的 论文
pagenum 2 必填项 指定获取第几页的信息
pagesize 1 必填项 指定分页的 每页获取多少条记录
keywords 白月 黑 可选项 搜索关键字,如果提供,表示标题中包含的关键字。 多个关键字以空格隔开,表示标题中同时包含的关键字词

响应

后端返回列出结果,响应消息格式与 列出发布状态API的响应 格式一致

查看一条论文

用来查看一条论文的内容。该API的格式 和 查看一条论文API 格式一致

添加论文

用来添加一条论文。

请求

  • 请求头
POST /api/paper
Cookie: sessionid=<sessionid数值>
Content-Type: application/json
  • 消息体

要添加的账号的具体信息,格式如下

{
  "action": "addone",
  "data": {
    "title": "海量数据从 MySQL 到 Hbase 的同步",
    "content": "海量数据从 MySQL 到 Hbase 的同步正文"
  }
}

其中

action: 填写 addone, 表示 添加一条论文的操作

data 里面是论文的内容,其中:

title: 论文的标题

content: 论文的正文

响应

  • 消息体
{
  "ret": 0,
  "id": 5
}

ret 为 0 表示添加成功

id 为添加论文的 id

修改论文

发出该 API 只能是该论文的作者。后端要根据session校验。

请求

  • 请求头
PUT /api/paper
Cookie: sessionid=<sessionid数值>
Content-Type: application/json
  • 消息体

格式如下

{
  "action": "modifyone",
  "id": 2,
  "newdata": {
    "title": "海量数据从 MySQL 到 Hbase 的同步",
    "content": "海量数据从 MySQL 到 Hbase 的同步正文"
  }
}

其中

action: 填写 modifyone ,表示 修改一条论文的操作

id: 要修改论文的 id

newdata : 里面包含了要修改的信息,其中:

title: 论文的标题修改为什么。如果此项不用修改,该字段不出现

content: 论文的正文修改为什么。如果此项不用修改,该字段不出现

响应

  • 消息体
{
  "ret": 0
}

ret 为 0 表示修改成功

撤回论文

用来撤回一条论文。封禁后的论文,对学生、老师、未登录账号不可见

发出该 API 只能是作者本人。后端要根据session校验。

请求

  • 请求头
PUT /api/paper
Cookie: sessionid=<sessionid数值>
Content-Type: application/json
  • 消息体

格式如下

{
  "action": "holdone",
  "id": 10
}

其中

action: 填写 holdone ,表示 撤回一条论文 的操作

id: 要撤回论文的 id

响应

  • 消息体
{
  "ret": 0,
  "status": 2
}

ret 为 0 表示撤回成功 status 为 现在的状态值

封禁论文

用来封禁一条论文。封禁后的论文,对学生、老师、未登录账号不可见

发出该 API 只能是管理员用户。后端要根据session校验。

请求

  • 请求头
PUT /api/paper
Cookie: sessionid=<sessionid数值>
Content-Type: application/json
  • 消息体

格式如下

{
  "action": "banone",
  "id": 10
}

其中

action: 填写 banone ,表示 封禁一条论文 的操作

id: 要封禁论文的 id

响应

  • 消息体
{
  "ret": 0,
  "status": 3
}

ret 为 0 表示封禁成功 status 为 现在的状态值

解禁论文

用来解禁一条论文。解禁后的论文,对学生、老师、未登录账号恢复可见

发出该 API 只能是管理员用户。后端要根据session校验。

请求

  • 请求头
PUT /api/paper
Cookie: sessionid=<sessionid数值>
Content-Type: application/json
  • 消息体

格式如下

{
  "action": "publishone",
  "id": 10
}

其中

action: 填写 publishone ,表示 解禁一条论文 的操作

id: 要解禁论文的 id

响应

  • 消息体
{
  "ret": 0,
  "status": 1
}

ret 为 0 表示解禁成功 status 为 现在的状态值

删除论文

用来删除一条论文。

发出该 API 只能是管理员用户 或者 论文作者。后端要根据session校验。

请求

  • 请求头
DELETE /api/notice
Cookie: sessionid=<sessionid数值>
Content-Type: application/json
  • 消息体

格式如下

{
  "action": "deleteone",
  "id": 10
}

其中

action: 填写 deleteone ,表示 删除 一个论文的操作

id: 要删除论文的 id

响应

  • 消息体
{
  "ret": 0
}

ret 为 0 表示删除成功

首页信息

该API接口用来获取、设置显示在网站首页的信息

首页信息 的API url路径均为 /api/config

设置首页展示信息

该API 只能是管理员用户使用,后端应该做权限检查

请求

  • 请求头
POST /api/config
Cookie: sessionid=<sessionid数值>
  • 消息体
{
  "action": "set",
  "name": "homepage",
  "value": "{\"news\":[7,5,4],\"notice\":[5,2],\"paper\":[4,8]}"
}

其中

value 表示展示在首页的 新闻(news)、通知(notice)、论文(paper)id列表。

注意,这个值是 对象转化为json格式的字符串。

服务端只需要直接存储该字符串即可

响应

  • 消息体
{
  "ret": 0
}

ret 为 0 表示设置成功

获取首页内容

未登录用户、学生、老师 用来获取显示在网站首页的信息

请求

  • 请求头
GET /api/config?action=gethomepagebyconfig
Cookie: sessionid=<sessionid数值>
  • url参数
参数名 示例 必要性 含义
action gethomepagebyconfig 必填项 指明获取网站首页的信息

响应

服务端返回结果

  • 消息体
{
  "ret": 0,
  "info": {
    "news": [
      {
        "id": 2,
        "pubdate": "2020-03-08T14:30:39.413Z",
        "author": 1,
        "author__realname": "白月黑羽",
        "title": "玄武湖恢复开放首晚 市民表白“你可回来了!”",
        "status": 1
      },
      {
        "id": 4,
        "pubdate": "2020-03-12T00:59:37.980Z",
        "author": 1,
        "author__realname": "白月黑羽",
        "title": "东南大学开展首场新冠肺炎防控实战演练",
        "status": 1
      }
    ],
    "notice": [
      {
        "id": 5,
        "pubdate": "2020-03-23T03:04:42.808Z",
        "author": 1,
        "author__realname": "白月黑羽",
        "title": "2020软件工程研究生招收规定",
        "status": 1
      },
      {
        "id": 1,
        "pubdate": "2020-03-08T08:38:15.430Z",
        "author": 1,
        "author__realname": "白月黑羽",
        "title": "公告2: 关于校园食堂的改革",
        "status": 1
      }
    ],
    "paper": [
      {
        "id": 3,
        "pubdate": "2020-03-07T09:48:03.546Z",
        "author": 7,
        "author__realname": "关羽",
        "title": "线性代数中的向量和向量空间",
        "status": 1
      }
    ]
  }
}

ret 为 0 表示列出成功

info 里面包含了首页的 新闻(news)、通知(notice)、论文(paper) 信息。

前端获取到该信息后,用来展示在界面上

上传图片

该API接口 在编辑 通知、新闻、论文等富文本数据时,上传图片到服务端

请求

  • 请求头
POST /api/upload
Cookie: sessionid=<sessionid数值>
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryXXXXXXXXXX
  • 消息体
------WebKitFormBoundarya8wf0W7tYnnff7ze
Content-Disposition: form-data; name="upload1"; filename="image.png"
Content-Type: image/png

消息体是 form data格式的数据

其中

name="upload1" 表示上传数据form-data的第一个formdata,此处固定填写1。

filename="image.png" 表示上传图片文件名。

消息体后续还有的内容就是 图片文件的内容字节串。

响应

服务端接收到上传请求后,检查 filename 参数必须是 png或者 jpg结尾的文件名,并且文件大小不能超过10M

检查通过后存储上传文件在服务端。

返回响应消息体如下:

  • 消息体
{
  "ret":  0,
  "url": "/upload/1_20200324085106_486799.png"
}

ret 为 0 表示设置成功 url 为 上传后图片文件在服务端的访问地址

个人信息

该API接口 用来获取、设置个人信息

获取个人信息

该 API 只能是老师、学生 使用,后端应该做权限检查

请求

  • 请求头
GET /api/etc?action=getmyprofile
Cookie: sessionid=<sessionid数值>

响应

  • 消息体

如果是老师账号,格式如下

{
  "ret": 0,
  "profile": {
    "userid": 8,
    "username": "caocao",
    "usertype": 3000,
    "realname": "曹操"
  }
}


如果是学生账号,格式如下

{
  "ret": 0,
  "profile": {
    "userid": 7,
    "username": "guanyu",
    "usertype": 2000,
    "realname": "关羽",
    "teacher": {
      "id": 8,
      "realname": "曹操"
    }
  }
}

多了一个 teacher 信息,里面包含了这个学生对应老师 的 id 和 真实姓名

设置个人信息

该 API 只能是老师、学生 使用,后端应该做权限检查

请求

  • 请求头
POST /api/etc?action=getmyprofile
Cookie: sessionid=<sessionid数值>
  • 消息体

消息体中包含了修改后的 真实姓名、密码信息

如果是老师账号,格式如下

{
  "action": "setmyprofile",
  "newdata": {
    "realname": "曹操",
    "password": "111111"
  }
}


如果是学生账号,格式如下

{
  "action": "setmyprofile",
  "newdata": {
    "realname": "关羽",
    "password": "111111",
    "teacherid": 9
  }
}

可以多一个 teacherid,用来设置自己的老师

响应

  • 消息体

如果设置成功,返回如下

{
  "ret": 0
}