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.
 
 
 
 

12 KiB

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 主页 全部帖子 发帖

管理员端

帖子管理 image 公告管理 image 板块(分类)管理 image

功能

用户端功能

  • 注册:用户在注册界面可以提交注册,暂不支持手机短信验证,直接注册。
  • 登录:已注册的用户可以通过正确的用户名和密码登录。
  • 欢迎:主页的导航栏会显示用户名并且欢迎。
  • 查看公告:查看管理员发出的公告。
  • 查看指南:显示在主页的指南。
  • 推荐帖子:每个帖子可以选择推荐在首页显示。
  • 查看类别:可以看到论坛里帖子所有的类别,点击可以查看对应下的帖子。
  • 查看全部帖子:按照时间顺序,查看所有帖子。
  • 帖子筛选:可以根据帖子分类、回复量、发布时间进行组合筛选。
  • 帖子搜索:根据输入关键字查询相关帖子。
  • 发帖:普通用户可以发帖。
  • 查看帖子详细:可以看到帖子的发布时间,作者,类别,标题,简介,详细内容,所有留言信息。
  • 留言:可以在帖子下面发表文字或者图片留言(评论),暂不支持回复评论。

系统说明

数据库

项目采用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:成功与否状态