## 云计算期末作业 ##

以下为云计算期末作业的readme

### 前提依赖 ###

本项目在win下开发，基本上只使用原生python包。实际测试，centos平台，只需要安装python36和flask即可运行。

bootstrap文件在静态文件夹内，jquery和sweetalert2采用cdn直接联网加载。

### 运行 ###

python backend.py

访问127.0.0.1：5000.(可能需要在app.run（）内修改)

### 目录结构 ###

- template 存放flask所需要渲染的html文件
- backend.py 后端程序，程序开头有部分常量定义
- form.js 前端js文件
- static 静态文件夹，放bootstrap和css样式库
- bin文件夹 存放上传的文件，存放在对应文件夹内
- homeworkMetadata.xml和studentlist.csv 两个辅助存储信息的文件，分别为作业和学生名单。

### 主要功能 ###

服务器运行后，主要提供两个功能。

- `/`根目录负责提交文件。
- `/admin/login`负责管理员登陆。



### 学生端 ###

#### 上传文件 ####
上传的文件会同一的命名，文件名带时间，所以多次提交会保留。


### 管理员端 ###

#### token ####
访问和管理员相关的网页都需要token。在login登陆后会在session内存入token(也就是关掉标签页会需要重新登陆)。这是因为，由于技术有限，所以所有的admin操作均在一个标签页内，通过ajax来进行不刷新跳转。

token验证写在backend文件开头部分的log_require装饰器内。

#### 账号和密码 ####

admin账号和密码是硬编码在backend文件中，在backend文件login函数内。默认账号名admin，密码123456。

#### 前后端交互 ####

本项目的后端数据传递到前端，采用数据注入，即flask渲染html时直接注入数据。所以如需改变前端数据，请直接修改template文件内html文件。
前端到后端采用ajax，部分跳转功能实习是通过直接拉去html到本地并覆盖实现。

比如查看提交情况，就是直接比对上传文件夹和学生名单，然后将信息直接注入homework.html文件内。

#### 作业xml ####
根节点为homeworks，子节点为homework。
homework有三个属性，名字，deadline和描述。

#### 学生列表 ####

存放在本地的csv文件，两列，学号和姓名。

admin内的导入功能是直接覆盖。

#### bin文件夹 ####
为了安全考虑，backend内没有在删除homework条目时删除对应bin文件夹内文件夹，请手动删除。同时这里的文件夹异常检验（有条目但没有文件夹）没有写，手动删除文件夹可能导致异常，请注意。


#### 模板html ####
采用flask语法。

其中最重要的展示提交情况就是传入了一个提交情况的列表。