You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

373 lines
12 KiB

  1. # ForumSystem
  2. # 滑动师范大学论坛
  3. ### 环境配置
  4. 一、更新系统软件包
  5. yum update -y
  6. 二、安装软件管理包和可能使用的依赖
  7. yum -y groupinstall "Development tools"
  8. yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel
  9. 三、下载Pyhton3到/usr/local 目录
  10. cd /usr/local
  11. wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz
  12. 解压
  13. tar -zxvf Python-3.6.6.tgz
  14. 进入 Python-3.6.6路径
  15. cd Python-3.6.6
  16. 编译安装到指定路径
  17. ./configure --prefix=/usr/local/python3
  18. 安装python3
  19. make
  20. make install
  21. python3建立软连接:ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3
  22. 同样给pip3建立软链接:ln -s /usr/local/python3/bin/pip3.6 /usr/bin/pip3
  23. 四、安装virtualenv
  24. pip3 install virtualenv
  25. 建立软链接
  26. ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
  27. 五、下载并安装MySQL
  28. wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
  29. yum -y install mysql57-community-release-el7-10.noarch.rpm
  30. yum -y install mysql-community-server
  31. MySQL数据库设置: systemctl start mysqld.service
  32. grep "password" /var/log/mysqld.log
  33. 登录mysql:mysql -uroot -p
  34. 修改密码:ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
  35. 创建数据库create database forum,并使用use forum;
  36. 创建/www/wwwroot/目录,并将项目解压至该目录
  37. 在master目录下创建虚拟环境virtualenv --python=/usr/bin/python3 master_venv
  38. 执行source ./master_venv/bin/activate
  39. 修改/master/ForumSystem下settings.py中数据库密码
  40. 回到master目录,在虚拟环境下安装pip3 install django pip3 install pgsql
  41. pip3 install uwsgi pip3 install -r requirements.txt
  42. 安装requirements.txt出错
  43. centos安装psycopg2时出错:Error: pg_config executable not found.解决方案
  44. yum install postgresql-devel*
  45. 使用 pip install psycopg2-binary 安装即可
  46. 再执行pip3 install -r requirements.txt
  47. 六、配置uwsgi配置文件(master同目录下,已创建,可以修改端口)
  48. [uwsgi]
  49. master = true
  50. processes = 1
  51. threads = 2
  52. chdir = /www/wwwroot/master
  53. #wsgi-file= /www/wwwroot/master/
  54. wsgi-file = /www/wwwroot/master/ForumSystem/wsgi.py
  55. http = 0.0.0.0:8080
  56. logto = /www/wwwroot/master/logs/error.log
  57. chmod-socket = 660
  58. vacuum = true
  59. master = true
  60. max-requests = 1000
  61. static-map = /static=/www/wwwroot/master/static
  62. 在master目录下运行,进行数据库迁移:
  63. python manage.py makemigrations
  64. python manage.py migrate
  65. 在master目录下启动uwsgi
  66. uwsgi --ini uwsgi.ini
  67. 浏览器输入网址http://ip地址:8080/login 安装成功
  68. ## 展示
  69. ### 用户端
  70. 登录
  71. ![image](http://ww1.sinaimg.cn/large/006tNc79ly1g4z46rpj9cj31k10u0drs.jpg)
  72. 主页
  73. ![](http://ww4.sinaimg.cn/large/006tNc79ly1g520s6ijl0j31kl0u0e81.jpg)
  74. 全部帖子
  75. ![](http://ww2.sinaimg.cn/large/006tNc79ly1g520t8nsslj31k10u0qv5.jpg)
  76. 发帖
  77. ![](http://ww1.sinaimg.cn/large/006tNc79ly1g520u2tfwfj31k90u0drc.jpg)
  78. ### 管理员端
  79. 帖子管理
  80. ![image](http://ww1.sinaimg.cn/large/006tNc79ly1g4z43fiddwj31jm0u0gy1.jpg)
  81. 公告管理
  82. ![image](http://ww2.sinaimg.cn/large/006tNc79ly1g4z43pup25j31k10u0136.jpg)
  83. 板块(分类)管理
  84. ![image](http://ww3.sinaimg.cn/large/006tNc79ly1g4z44l23y8j31jv0u0131.jpg)
  85. ## 功能
  86. ### 用户端功能
  87. - 注册:用户在注册界面可以提交注册,暂不支持手机短信验证,直接注册。
  88. - 登录:已注册的用户可以通过正确的用户名和密码登录。
  89. - 欢迎:主页的导航栏会显示用户名并且欢迎。
  90. - 查看公告:查看管理员发出的公告。
  91. - 查看指南:显示在主页的指南。
  92. - 推荐帖子:每个帖子可以选择推荐在首页显示。
  93. - 查看类别:可以看到论坛里帖子所有的类别,点击可以查看对应下的帖子。
  94. - 查看全部帖子:按照时间顺序,查看所有帖子。
  95. - 帖子筛选:可以根据帖子分类、回复量、发布时间进行组合筛选。
  96. - 帖子搜索:根据输入关键字查询相关帖子。
  97. - 发帖:普通用户可以发帖。
  98. - 查看帖子详细:可以看到帖子的发布时间,作者,类别,标题,简介,详细内容,所有留言信息。
  99. - 留言:可以在帖子下面发表文字或者图片留言(评论),暂不支持回复评论。
  100. ## 系统说明
  101. ### 数据库
  102. 项目采用mysql进行存储,我使用的是mysql 8.0.16。表之间不采用任何外键关联,逻辑的管理都在控制层完成。每个表的id都由Django自动创建,也同时作为主键。
  103. #### 表与字段
  104. ##### 用户表:User
  105. 字段名称 | 字段类型 | 字段说明
  106. ---|---|---
  107. id | int | 编号,自增,主键
  108. uid | vchar(16) | 用户名,唯一
  109. password | vchar(16) | 密码
  110. create_time | Date | 创建日期
  111. ##### 帖子表:Topic
  112. 字段名称 | 字段类型 | 字段说明
  113. ---|---|---
  114. id | int | 编号,自增,主键
  115. t_uid | vchar(16) | 帖子作者
  116. t_kind | vchar(32) | 帖子类型
  117. create_time | Date | 帖子发布日期
  118. t_photo | vchar(128) | 帖子主页图,允许为空
  119. t_content | vchar(3000) | 帖子内容
  120. t_title | vchar(64) | 帖子标题
  121. t_introduce | vchar(256) | 帖子介绍
  122. recommend | boolean | 是否推荐到主页,默认false
  123. ##### 回复表:Reply
  124. 字段名称 | 字段类型 | 字段说明
  125. ---|---|---
  126. id | int | 编号,自增,主键
  127. r_tid | vchar(16) | 回复的帖子
  128. r_uid | vchar(16) | 发表回复的人
  129. r_time | Date | 回复时间
  130. r_photo | vchar(128) | 回复图片,允许为空
  131. r_content | vchar(256) | 回复内容
  132. ##### 分类表:Kind
  133. 字段名称 | 字段类型 | 字段说明
  134. ---|---|---
  135. id | int | 编号,自增,主键
  136. k_name | vchar(16) | 分类名称
  137. ##### 公告表:Announcement
  138. 字段名称 | 字段类型 | 字段说明
  139. ---|---|---
  140. id | int | 编号,自增,主键
  141. a_title | vchar(64) | 公告名称
  142. a_content | vchar(3000) | 公告内容,允许为空
  143. #### 数据库代码
  144. 数据库代码在模型(models)层:参见/ForumSystem/app01/models.py
  145. ### 用户端
  146. #### 用户端前端
  147. - 主页:
  148. - 显示公告:模板和数据渲染生成
  149. - 显示指南:html固定内容
  150. - 显示导航栏
  151. - 登陆后显示:主页、发帖、看帖、欢迎、退出
  152. - 未登录显示:主页、发帖(点击会跳转到登录)、看帖、登录。
  153. - 显示推荐帖子:模板和数据渲染生成
  154. - 显示全部帖子按钮:页面固定
  155. - 底部栏:显示名称和导航栏
  156. - 登录&注册页面:
  157. - 一个输入框:分为用户名和密码
  158. - 两个按钮(登录/注册)
  159. - 通过ajax发送登录或者注册请求
  160. - 全部帖子页面:
  161. - 论坛名称(左上角):固定显示
  162. - 搜索框:固定,form表单post提交
  163. - 导航栏:同上
  164. - 组合筛选栏
  165. - 分类筛选:模板和数据渲染得到所有分类显示
  166. - 回复数量筛选:固定
  167. - 发布时间筛选:固定
  168. - 显示全部帖子:模板和数据渲染获取
  169. - 帖子详情页面:模板和数据渲染获取
  170. - 论坛名称:同上
  171. - 导航栏:同上
  172. - 帖子主图
  173. - 帖子标题和详细内容
  174. - 帖子作者、发布时间、分类
  175. - 发表留言栏:form表单,post提交
  176. - 显示所有留言:模板和数据渲染获取
  177. - 公告详情页面:
  178. - 公告标题
  179. - 公告内容
  180. - 发布帖子页面:
  181. - 一个大form表单,包括帖子的标题、简介、内容、封面图、类别(下拉选择)。
  182. - 修改密码页面:
  183. - 用户名框(只显示,不可改)
  184. - 原密码框
  185. - 新密码框
  186. - 确认新密码框
  187. - 提交(成功后返回主页)、取消(返回主页)按钮
  188. #### 用户端接口
  189. ##### 主页
  190. - url:http://127.0.0.1:8000/home/
  191. - GET请求
  192. - 参数:无
  193. - 返回值:10个最新公告列表,所有推荐贴列表,渲染好的**页面**。
  194. ##### 所有帖子
  195. - url:http://127.0.0.1:8000/all-0-0-0
  196. - GET请求
  197. - url说明:后3个0指组合筛选不进行筛选
  198. - 参数:无,也可以说是all后面的3个数字(kid, reply_limit, time_limit)
  199. - 返回值:根据3个参数选择后的**帖子列表**
  200. - POST请求:
  201. - 参数
  202. - keys:搜索关键字
  203. - 返回值:根据关键字搜索到的**帖子列表**
  204. ##### 登录、注册
  205. - url:http://127.0.0.1:8000/login/
  206. - GET请求:
  207. - 参数:无
  208. - 返回值:登录页面
  209. - POST请求:
  210. - 参数:
  211. - type:login 或者 register
  212. - uid:用户名
  213. - pwd:密码
  214. - 返回值:
  215. - msg:信息
  216. - status:状态,成功与否
  217. ##### 发布帖子
  218. - url:http://127.0.0.1:8000/publish/
  219. - GET请求:
  220. - 参数:无
  221. - 返回值:发布帖子页面
  222. - POST请求:
  223. - 参数:
  224. - t_title:标题
  225. - t_introduce:介绍
  226. - t_content:内容
  227. - t_kind:类别
  228. - t_photo:主图
  229. - 返回值:
  230. - 成功后重定向到单个帖子页面
  231. ##### 单个帖子
  232. - url:http://127.0.0.1:8000/single/1/
  233. - GET请求:
  234. - url说明:1就是tid
  235. - 参数:tid
  236. - 返回值:帖子相关所有信息,渲染成单个帖子详情页面
  237. - POST请求:主要用于评论的发表和删除
  238. - 参数:
  239. - type:类型,删除评论还是发表评论
  240. - r_content:评论内容
  241. - r_photo:评论图片
  242. - r_id:回复id,删除已有回复才用到
  243. - 返回值:
  244. - msg:信息
  245. - status:状态,成功与否
  246. ##### 修改密码
  247. - url:http://127.0.0.1:8000/edit-pwd/
  248. - GET请求:
  249. - 参数:无
  250. - 返回值:修改密码页面
  251. - POST请求:
  252. - 参数:
  253. - old_pwd:旧密码
  254. - new_pwd1:新密码
  255. - new_pwd2:确认新密码
  256. - 返回值:
  257. - 成功后重定向到主页
  258. ### 管理员端
  259. #### 管理员前端
  260. - 管理员登录:
  261. - 一个输入框:分为用户名和密码
  262. - 两个按钮(登录/取消)
  263. - 一个form表单,提交数据
  264. - 帖子管理:
  265. - 导航栏:帖子管理、公告管理、分类管理
  266. - 欢迎头部
  267. - 帖子列表:序号、名称、简介、推荐、操作
  268. - 推荐操作:绑定ajax,刷新页面
  269. - 取消推荐操作:ajax,刷新
  270. - 查看操作:跳转帖子详情页面
  271. - 删除操作:ajax,同时刷新
  272. - 公告管理:
  273. - 导航栏:帖子管理、公告管理、分类管理
  274. - 欢迎头部
  275. - 公告列表:序号、标题、操作
  276. - 查看操作:跳转公告详情页面
  277. - 删除操作:ajax,同时刷新
  278. - 分类(板块)管理:
  279. - 导航栏:帖子管理、公告管理、分类管理
  280. - 欢迎头部
  281. - 分类列表:序号、分类名称、操作
  282. - 查看该分类下所有帖子操作:跳转到全部帖子下组合搜索出分类里的帖子
  283. - 删除操作:ajax,同时刷新
  284. #### 管理员接口
  285. ##### 登录
  286. - url:http://127.0.0.1:8000/my-admin/
  287. - GET请求:
  288. - 参数:无
  289. - 返回值:管理员登录页面
  290. - POST请求:
  291. - 参数:
  292. - admin_id:管理员用户名
  293. - admin_pwd:管理员密码
  294. - 返回值:
  295. - 成功后重定向到帖子管理页面
  296. - 注意:管理员我没有做表去存放管理员账号密码,所以在程序里写死了管理员账号为guanliyuan,密码为123456
  297. ##### 帖子管理
  298. - url:http://127.0.0.1:8000/admin-home/
  299. - GET请求:
  300. - 参数:无
  301. - 返回值:所有帖子信息,渲染后的帖子管理页面,需要验证管理员是否登录(使用session)
  302. - POST请求:
  303. - 参数:
  304. - type:post请求类型(以下为type可用的值)
  305. - zhiding:置顶(推荐)
  306. - qzhiding:取消置顶
  307. - delete:删除
  308. - t_id:帖子id,根据帖子id进行type操作
  309. - 返回值:
  310. - msg:信息
  311. - status:成功与否状态
  312. ##### 公告管理
  313. - url:http://127.0.0.1:8000/announcement/
  314. - GET请求:
  315. - 参数:无
  316. - 返回值:所有公告信息,渲染后的公告管理页面,需要验证管理员是否登录(使用session)
  317. - POST请求:
  318. - 参数:
  319. - type:post请求类型
  320. - create:创建公告
  321. - delete:删除公告
  322. - a_id:公告id,如果type=delete需要公告id
  323. - a_title:公告标题,如果type=create,需要公告标题
  324. - a_content:公告内容,如果type=create,需要公告标题
  325. - 返回值:
  326. - msg:信息
  327. - status:成功与否状态
  328. ##### 分类管理
  329. - url:http://127.0.0.1:8000/kind-manage/
  330. - GET请求:
  331. - 参数:无
  332. - 返回值:所有分类信息,渲染后的类别管理页面,需要验证管理员是否登录(使用session)
  333. - POST请求:
  334. - 参数:
  335. - type:post请求类型(删除or创建)
  336. - create:创建类别
  337. - delete:删除类别
  338. - k_id:类别id,如果type=delete需要类别id
  339. - k_name:类别名称,如果type=create,需要类别名称
  340. - 返回值:
  341. - msg:信息
  342. - status:成功与否状态