# ForumSystem # 滑动师范大学论坛 ### 环境配置 一、更新系统软件包 yum update -y 二、安装软件管理包和可能使用的依赖 yum -y groupinstall "Development tools" yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel 三、下载Pyhton3到/usr/local 目录 cd /usr/local wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz 解压 tar -zxvf Python-3.6.6.tgz 进入 Python-3.6.6路径 cd Python-3.6.6 编译安装到指定路径 ./configure --prefix=/usr/local/python3 安装python3 make make install python3建立软连接:ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3 同样给pip3建立软链接:ln -s /usr/local/python3/bin/pip3.6 /usr/bin/pip3 四、安装virtualenv pip3 install virtualenv 建立软链接 ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv 五、下载并安装MySQL wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm yum -y install mysql57-community-release-el7-10.noarch.rpm yum -y install mysql-community-server MySQL数据库设置: systemctl start mysqld.service grep "password" /var/log/mysqld.log 登录mysql:mysql -uroot -p 修改密码:ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password'; 创建数据库create database forum,并使用use forum; 创建/www/wwwroot/目录,并将项目解压至该目录 在master目录下创建虚拟环境virtualenv --python=/usr/bin/python3 master_venv 执行source ./master_venv/bin/activate 修改/master/ForumSystem下settings.py中数据库密码 回到master目录,在虚拟环境下安装pip3 install django pip3 install pgsql pip3 install uwsgi pip3 install -r requirements.txt 安装requirements.txt出错 centos安装psycopg2时出错:Error: pg_config executable not found.解决方案 yum install postgresql-devel* 使用 pip install psycopg2-binary 安装即可 再执行pip3 install -r requirements.txt 六、配置uwsgi配置文件(master同目录下,已创建,可以修改端口) [uwsgi] master = true processes = 1 threads = 2 chdir = /www/wwwroot/master #wsgi-file= /www/wwwroot/master/ wsgi-file = /www/wwwroot/master/ForumSystem/wsgi.py http = 0.0.0.0:8080 logto = /www/wwwroot/master/logs/error.log chmod-socket = 660 vacuum = true master = true max-requests = 1000 static-map = /static=/www/wwwroot/master/static 在master目录下运行,进行数据库迁移: python manage.py makemigrations python manage.py migrate 在master目录下启动uwsgi uwsgi --ini uwsgi.ini 浏览器输入网址http://ip地址:8080/login 安装成功 ## 展示 ### 用户端 登录 ![image](http://ww1.sinaimg.cn/large/006tNc79ly1g4z46rpj9cj31k10u0drs.jpg) 主页 ![](http://ww4.sinaimg.cn/large/006tNc79ly1g520s6ijl0j31kl0u0e81.jpg) 全部帖子 ![](http://ww2.sinaimg.cn/large/006tNc79ly1g520t8nsslj31k10u0qv5.jpg) 发帖 ![](http://ww1.sinaimg.cn/large/006tNc79ly1g520u2tfwfj31k90u0drc.jpg) ### 管理员端 帖子管理 ![image](http://ww1.sinaimg.cn/large/006tNc79ly1g4z43fiddwj31jm0u0gy1.jpg) 公告管理 ![image](http://ww2.sinaimg.cn/large/006tNc79ly1g4z43pup25j31k10u0136.jpg) 板块(分类)管理 ![image](http://ww3.sinaimg.cn/large/006tNc79ly1g4z44l23y8j31jv0u0131.jpg) ## 功能 ### 用户端功能 - 注册:用户在注册界面可以提交注册,暂不支持手机短信验证,直接注册。 - 登录:已注册的用户可以通过正确的用户名和密码登录。 - 欢迎:主页的导航栏会显示用户名并且欢迎。 - 查看公告:查看管理员发出的公告。 - 查看指南:显示在主页的指南。 - 推荐帖子:每个帖子可以选择推荐在首页显示。 - 查看类别:可以看到论坛里帖子所有的类别,点击可以查看对应下的帖子。 - 查看全部帖子:按照时间顺序,查看所有帖子。 - 帖子筛选:可以根据帖子分类、回复量、发布时间进行组合筛选。 - 帖子搜索:根据输入关键字查询相关帖子。 - 发帖:普通用户可以发帖。 - 查看帖子详细:可以看到帖子的发布时间,作者,类别,标题,简介,详细内容,所有留言信息。 - 留言:可以在帖子下面发表文字或者图片留言(评论),暂不支持回复评论。 ## 系统说明 ### 数据库 项目采用mysql进行存储,我使用的是mysql 8.0.16。表之间不采用任何外键关联,逻辑的管理都在控制层完成。每个表的id都由Django自动创建,也同时作为主键。 #### 表与字段 ##### 用户表:User 字段名称 | 字段类型 | 字段说明 ---|---|--- id | int | 编号,自增,主键 uid | vchar(16) | 用户名,唯一 password | vchar(16) | 密码 create_time | Date | 创建日期 ##### 帖子表:Topic 字段名称 | 字段类型 | 字段说明 ---|---|--- id | int | 编号,自增,主键 t_uid | vchar(16) | 帖子作者 t_kind | vchar(32) | 帖子类型 create_time | Date | 帖子发布日期 t_photo | vchar(128) | 帖子主页图,允许为空 t_content | vchar(3000) | 帖子内容 t_title | vchar(64) | 帖子标题 t_introduce | vchar(256) | 帖子介绍 recommend | boolean | 是否推荐到主页,默认false ##### 回复表:Reply 字段名称 | 字段类型 | 字段说明 ---|---|--- id | int | 编号,自增,主键 r_tid | vchar(16) | 回复的帖子 r_uid | vchar(16) | 发表回复的人 r_time | Date | 回复时间 r_photo | vchar(128) | 回复图片,允许为空 r_content | vchar(256) | 回复内容 ##### 分类表:Kind 字段名称 | 字段类型 | 字段说明 ---|---|--- id | int | 编号,自增,主键 k_name | vchar(16) | 分类名称 ##### 公告表:Announcement 字段名称 | 字段类型 | 字段说明 ---|---|--- id | int | 编号,自增,主键 a_title | vchar(64) | 公告名称 a_content | vchar(3000) | 公告内容,允许为空 #### 数据库代码 数据库代码在模型(models)层:参见/ForumSystem/app01/models.py ### 用户端 #### 用户端前端 - 主页: - 显示公告:模板和数据渲染生成 - 显示指南:html固定内容 - 显示导航栏 - 登陆后显示:主页、发帖、看帖、欢迎、退出 - 未登录显示:主页、发帖(点击会跳转到登录)、看帖、登录。 - 显示推荐帖子:模板和数据渲染生成 - 显示全部帖子按钮:页面固定 - 底部栏:显示名称和导航栏 - 登录&注册页面: - 一个输入框:分为用户名和密码 - 两个按钮(登录/注册) - 通过ajax发送登录或者注册请求 - 全部帖子页面: - 论坛名称(左上角):固定显示 - 搜索框:固定,form表单post提交 - 导航栏:同上 - 组合筛选栏 - 分类筛选:模板和数据渲染得到所有分类显示 - 回复数量筛选:固定 - 发布时间筛选:固定 - 显示全部帖子:模板和数据渲染获取 - 帖子详情页面:模板和数据渲染获取 - 论坛名称:同上 - 导航栏:同上 - 帖子主图 - 帖子标题和详细内容 - 帖子作者、发布时间、分类 - 发表留言栏:form表单,post提交 - 显示所有留言:模板和数据渲染获取 - 公告详情页面: - 公告标题 - 公告内容 - 发布帖子页面: - 一个大form表单,包括帖子的标题、简介、内容、封面图、类别(下拉选择)。 - 修改密码页面: - 用户名框(只显示,不可改) - 原密码框 - 新密码框 - 确认新密码框 - 提交(成功后返回主页)、取消(返回主页)按钮 #### 用户端接口 ##### 主页 - url:http://127.0.0.1:8000/home/ - GET请求 - 参数:无 - 返回值:10个最新公告列表,所有推荐贴列表,渲染好的**页面**。 ##### 所有帖子 - url:http://127.0.0.1:8000/all-0-0-0 - GET请求 - url说明:后3个0指组合筛选不进行筛选 - 参数:无,也可以说是all后面的3个数字(kid, reply_limit, time_limit) - 返回值:根据3个参数选择后的**帖子列表** - POST请求: - 参数 - keys:搜索关键字 - 返回值:根据关键字搜索到的**帖子列表** ##### 登录、注册 - url:http://127.0.0.1:8000/login/ - GET请求: - 参数:无 - 返回值:登录页面 - POST请求: - 参数: - type:login 或者 register - uid:用户名 - pwd:密码 - 返回值: - msg:信息 - status:状态,成功与否 ##### 发布帖子 - url:http://127.0.0.1:8000/publish/ - GET请求: - 参数:无 - 返回值:发布帖子页面 - POST请求: - 参数: - t_title:标题 - t_introduce:介绍 - t_content:内容 - t_kind:类别 - t_photo:主图 - 返回值: - 成功后重定向到单个帖子页面 ##### 单个帖子 - url:http://127.0.0.1:8000/single/1/ - GET请求: - url说明:1就是tid - 参数:tid - 返回值:帖子相关所有信息,渲染成单个帖子详情页面 - POST请求:主要用于评论的发表和删除 - 参数: - type:类型,删除评论还是发表评论 - r_content:评论内容 - r_photo:评论图片 - r_id:回复id,删除已有回复才用到 - 返回值: - msg:信息 - status:状态,成功与否 ##### 修改密码 - url:http://127.0.0.1:8000/edit-pwd/ - GET请求: - 参数:无 - 返回值:修改密码页面 - POST请求: - 参数: - old_pwd:旧密码 - new_pwd1:新密码 - new_pwd2:确认新密码 - 返回值: - 成功后重定向到主页 ### 管理员端 #### 管理员前端 - 管理员登录: - 一个输入框:分为用户名和密码 - 两个按钮(登录/取消) - 一个form表单,提交数据 - 帖子管理: - 导航栏:帖子管理、公告管理、分类管理 - 欢迎头部 - 帖子列表:序号、名称、简介、推荐、操作 - 推荐操作:绑定ajax,刷新页面 - 取消推荐操作:ajax,刷新 - 查看操作:跳转帖子详情页面 - 删除操作:ajax,同时刷新 - 公告管理: - 导航栏:帖子管理、公告管理、分类管理 - 欢迎头部 - 公告列表:序号、标题、操作 - 查看操作:跳转公告详情页面 - 删除操作:ajax,同时刷新 - 分类(板块)管理: - 导航栏:帖子管理、公告管理、分类管理 - 欢迎头部 - 分类列表:序号、分类名称、操作 - 查看该分类下所有帖子操作:跳转到全部帖子下组合搜索出分类里的帖子 - 删除操作:ajax,同时刷新 #### 管理员接口 ##### 登录 - url:http://127.0.0.1:8000/my-admin/ - GET请求: - 参数:无 - 返回值:管理员登录页面 - POST请求: - 参数: - admin_id:管理员用户名 - admin_pwd:管理员密码 - 返回值: - 成功后重定向到帖子管理页面 - 注意:管理员我没有做表去存放管理员账号密码,所以在程序里写死了管理员账号为guanliyuan,密码为123456 ##### 帖子管理 - url:http://127.0.0.1:8000/admin-home/ - GET请求: - 参数:无 - 返回值:所有帖子信息,渲染后的帖子管理页面,需要验证管理员是否登录(使用session) - POST请求: - 参数: - type:post请求类型(以下为type可用的值) - zhiding:置顶(推荐) - qzhiding:取消置顶 - delete:删除 - t_id:帖子id,根据帖子id进行type操作 - 返回值: - msg:信息 - status:成功与否状态 ##### 公告管理 - url:http://127.0.0.1:8000/announcement/ - GET请求: - 参数:无 - 返回值:所有公告信息,渲染后的公告管理页面,需要验证管理员是否登录(使用session) - POST请求: - 参数: - type:post请求类型 - create:创建公告 - delete:删除公告 - a_id:公告id,如果type=delete需要公告id - a_title:公告标题,如果type=create,需要公告标题 - a_content:公告内容,如果type=create,需要公告标题 - 返回值: - msg:信息 - status:成功与否状态 ##### 分类管理 - url:http://127.0.0.1:8000/kind-manage/ - GET请求: - 参数:无 - 返回值:所有分类信息,渲染后的类别管理页面,需要验证管理员是否登录(使用session) - POST请求: - 参数: - type:post请求类型(删除or创建) - create:创建类别 - delete:删除类别 - k_id:类别id,如果type=delete需要类别id - k_name:类别名称,如果type=create,需要类别名称 - 返回值: - msg:信息 - status:成功与否状态