文章目录

  • 前言
  • 一、课设题目要求及分析
  • 二、小说平台实现效果
    • 1.合理的角色功能划分
    • 2. 表结构的设计
    • 3.Python如何与服务器进行连接
    • 4.flask框架的应用
      • 4.1 前端页面如何传递信息给后端
      • 4.2 后端如何传递信息给前端显示
  • 总结

前言

在上完数据库课程的时候,老师布置了个课程设计,要求学生自己制作一个和数据库有关的任意平台,还给我们演示了去年一位学生制作的“怪物猎人游戏平台”,即类似于文字游戏的平台。其中的角色装备数据和怪物数据都是储存到数据库里,然后再从前端和用户进行交互展示,从而达到用户打怪升级,买装备等效果。

我感觉能把所学知识运用到感兴趣领域还是挺好玩的,就打算自己搞一个类似平台。鉴于之前有段时间爱看科幻小说,于是想搭建个小说平台,其中小说数据是我自己随机生成的(爬虫太麻烦)。因为之前没怎么接触过服务器和前端相结合的项目,所以遇到了许多坑,便记录下来,权当自己复习一下相关内容,顺便帮助一下后来者。

本文将阐述南京航空航天大学数据库课程设计的项目设计思路以及源码,项目较为粗糙,主题是“基于OpenGasuss数据库的简易网络小说平台”,不提供安装数据库的教程,仅供参考。


一、课设题目要求及分析

题目要求:

  1. 熟练掌握 Visual C++、C、Qt、Java、PHP 或 Python 等访问数据库的方法设计和实现学生通讯录或学生选课或类似的一个小型管理信息系统。
  2. 要求具有数据的增加、删除、修改和查询的基本功能,并尽可能提供较多的查询功能,集成半以上实验一~实验五的功能,用户界面要友好。
  3. 可选内容(加分项): 数据库中存放 100 万条记录,测试访问时间;如效率较低,提供优化方案。

分析:

既然要从零开始搭建平台的话,那自然要用成熟的框架节省时间。

经过一番挑选,我决定使用极其简便的 Python+Flask 组合,其网上有很多相关教程,遇到问题查起来也方便,所需插件也不多。而加分项中说的存放100万条记录也好搞,直接for循环一直往数据库里添加自己生成的随机数据就可以。至于效率优化相关,由于时间有限,我就没有考虑了。

首先 Python 的作用是连接数据库,并实现增删查改等功能。
而 Flask 的作用是模拟一个简易的网站。我们常用的网站大家都知道,点击一个链接,就能跳转到对应页面。比如当你在浏览器上方输入 www.login.com ,我们的flask就能根据我们的设置,让你在输入 www.login.com 后自动跳转到登陆页面。

这里强烈推荐看下B站这个视频:
web版学生信息后台管理系统(Python+flask框架+Bootstrap5)期末毕设必备

视频大概一个小时多一些,简短有效,很快就能让你使用flask框架来搭建属于自己的网站。

二、小说平台实现效果

思路很重要,一开始一定要构思好平台内各个身份的功能,以及所需要的表结构。在反复摸索没问题后,再进行编程,不然后面写着写着可能发现表结构设计不合理,又要推翻重新划分。
这里还要注意一点,课设对表的要求不是很高,不需要你把表结构优化到没有冗余,只要够用就行,没必要钻牛角尖。

1.合理的角色功能划分

小说平台分为三种角色:读者、作者以及管理者。(管理者是因为能作为加分项才加的,原本平台里只有读者和作者两种身份)

我们根据数据库的增删改查对角色的大体功能进行划分

读者:

  1. 可以在平台浏览所有的书(查)
  2. 可以在平台搜索书名或书作者(查)
  3. 可以将喜欢的书添加到书架里(增)
  4. 可以将不喜欢的书移除出书架(删)

作者:

  1. 可以在平台浏览所有的书(查)
  2. 可以在平台搜索书名或书作者(查)
  3. 可以自己发布新小说(增)
  4. 可以在已发布的小说中添加新章节(增)
  5. 可以在已发布的小说中修改章节(改)
  6. 可以对不满意的小说章节进行删除(删)
  7. 可以对不满意的书进行删除(删)

管理者:

  1. 可以查看所有的读者和作者信息(查)
  2. 可以封号对应的读者和作者账户(删)

以上就是我的大致用户功能设计思路,现在要琢磨该思路的可行性。

首先,对于浏览所有小说以及查找对应书名和书作者等功能,实现起来很简单,用一条 select 语句即可查询到所有信息。像其他的增删改查也是如此,都有对应的sql语句进行完成,我们可以发现这些功能的实现其实很简单,可行性很高。

所以整个系统最大的难点反而在于如何将数据库的信息显示在我们的网站上?Python和数据库如何跟前后端进行交互?

2. 表结构的设计

表结构的设计很重要,你后面要新增其他功能的话,很可能要重新设计表,所以最好一开始就构思好,节省时间。

  1. 每个身份都有属于自己的用户信息表(共3张表),用于验证用户登录的账号密码是否正确。:

  2. 其次,我们要有一个存放所有小说信息的表,用于展示在小说平台上(1张小说信息表):

  3. 最后,我们每本小说都有自己的章节内容表,因为一个小说可能成百上千章节,放一起存储会很冗杂,故我们要为每本小说创造属于自己的表(N张小说章节内容表):


这里可能有人会问,小说内容表的数量是动态变化的,这里如何做到呢?

其实很简单,作者每新写一本书,我们就根据一个不重复的自增数字来自动新生成这本书对应的表。比如作者写了一本书“三体“,那么我们就要新生成一个表用来储存 “1_三体” 这本书的章节信息和具体内容,后续如果有其他作者写了一本书“球状闪电”,那么我们就再新生成一张 “2_球状闪电” 表。

书名前面的自增数字确保了表不会重名,这样我们就可以一直 CREATE 新的小说内容表,这是很容易实现的操作。

比如有一个作者新写了一本书,我们可以根据字符串拼接的方式创建新的表。假设原先的表是1_novel,我们新的书表就为2_novel,下一位作者新写了书的话就创建3_novel。book_id是一个自增变量,这样就能确保表不重名。

 #每次都让全局变量book_id自增,这样每次都能生成名字不重的表book_id = book_id +1sql1 = "CREATE TABLE"+str(book_id)+"_novel"+" (book_id_chapter VARCHAR(100) NOT NULL,chapter_id serial PRIMARY KEY,chapter_title VARCHAR(100) NOT NULL,chapter_content text NOT NULL DEFAULT ' ',FOREIGN KEY (book_id_chapter) REFERENCESnovel_info(novel_id));"

3.Python如何与服务器进行连接

由于我用的数据库是部署在华为云服务器上的OpenGauss数据库(由和学校合作的华为官方免费提供),故首先是要让Python和OpenGauss数据库进行连接。

OpenGauss官方已经给出很多详细教程,即下载一个官方提供的jar包并进行配置就能进行连接。
如果你用的不是OpenGauss,而是本地的数据库,那连接起来应该更简单,按照各自网上教程进行配置即可。

以下是简单的OpenGauss数据库连接过程:

这里的 conn.cursor() 你可以理解为数据库返回给你的一个可操作对象,有了它你才能执行sql语句操作。

举个例子:

假设用户在 登录页面 输入了自己的用户账号(123456)和密码(abc123),那么他在点击 登录 这个按钮时,我们运行在Pycharm上的Python程序即会收到用户的 账号和密码 信息.

根据这个信息,我们连接到服务器,并让服务器中的数据库执行以下sql语句让数据库根据账号密码在user表中进行查询 :

‘SELECT * FROM user_table WHERE account= 123456 AND password= abc123;’

具体执行sql语句过程如下:

def verify(username, user_password, role):# 进行连接数据库操作url = 'jdbc:postgresql://120.XXX.XX.XXX:26000/db_project'user = 'project_maker'password = 'user@12345'dirver = 'org.postgresql.Driver'jarFile = 'E:/School2/database/postgresql.jar'conn = jaydebeapi.connect(dirver, url, [user, password], jarFile)curs = conn.cursor()#设置搜索路径,OpenGauss需要设置,其他数据库不清楚需不需要sqlStr = """SET search_path TO db_schema;"""curs.execute(sqlStr) #执行sql语句#在user_table表中查找是否有对应账号密码的用户信息,有则登陆成功sql = 'SELECT * FROM ' + user_table + ' WHERE account=' + username + ' AND password=' + '\'%s\'' % user_password + ';'curs.execute(sql) #执行sql语句result = curs.fetchall()   #得到返回结果print("Login result: ", result)    #数据库会返回查询结果,如果为空数组,则代表表中无此人#关闭数据库连接curs.close()conn.close()return result #将结果返回给前端

执行完语句后,我们利用 .fetchall() 函数可以获取执行结果,倘若 result 返回的数组为空,则代表没有该用户信息(可能是没有该用户账号,也可能是密码出错)。倘若返回的数组有一条用户记录,则代表登陆成功。

至此,我们已经学会了如何让Python跟数据库进行连接,并执行相应的sql语句。

4.flask框架的应用

现在,我们已经在数据库中创建好了表,也学会了如何利用Python连接数据库并执行简单的sql语句,那么接下来就要开始搭建自己的网站了。

这里还是先建议大家把我先前说的视频看完:
web版学生信息后台管理系统(Python+flask框架+Bootstrap5)期末毕设必备

我们后续要做的无非就是重复一个过程:

  1. 设计页面(html界面)。
  2. 在 app.py 文件中配置好到该页面的路由。(路由意思就是指向你html页面的url链接)
  3. 设计对应的增删改查等特定功能函数,并在你设计的页面中调用这些函数,让这些函数返回结果能显示到你的界面上。

4.1 前端页面如何传递信息给后端

以登陆流程为例:

  1. 进入登录界面(login.html)

  2. 在 app.py 文件中配置好到该页面的路由。

    当用户在url上输入 /login 并回车的时候,用户会进入login.html这个界面,也就是上面那张登录界面的图。

  3. 当用户在输入框中输入了账号和密码信息并点击提交按钮后,Pycharm中的 app.py 文件就会接收到 username 和 password 信息。然后我们就可以连接到数据库进行SELECT操作,查询该用户是不是在数据库中。

4.2 后端如何传递信息给前端显示

1.当我们拿到上述登录账号的信息后 ,我们可以在数据库查询该账号密码是否正确,并返回result

def verify(username, user_password, role):url = 'jdbc:postgresql://120.xxx.168.xxx:26000/db_project'user = 'xxx'password = 'xxx'dirver = 'org.postgresql.Driver'jarFile = 'E:/School2/database/postgresql.jar'conn = jaydebeapi.connect(dirver, url, [user, password], jarFile)curs = conn.cursor()sqlStr = """SET search_path TO db_schema;;"""curs.execute(sqlStr)sql = 'SELECT * FROM '+ role +' WHERE ' + role + '_account=' + username +' AND '+ role + '_password=' + '\'%s\''%user_password +';try:curs.execute(sql)result = curs.fetchall()print("Login success: ", result)curs.close()conn.close()return result
  1. 我们拿到result后,可以传值给页面的变量user_result:
  2. 在home.html页面里,我们可以将user_result信息进行显示,比如将读者的书架信息进行展示:
  {% for book in user_result.books %}<tr><th scope="row" style="color:white">{{book[2]}}</th><td style="color:white">{{book[1]}}</td><td><a href="/reader_to_novel/{{book[2]}}" target="_blank" style="color:white">点我跳转</a></td></tr>{% endfor %}

  1. 又比如数据库给我们返回了所有的书的信息,我们可以通过上述方法如法炮制,在前端用for循环显示出所有的书籍信息:


    至此,我们就大致了解了Python和Flask是如何在前后端进行交互的。

总结

本篇文章主要讲思路,和部分重点实现过程。不提供代码(因为服务器已经关了,代码跑不起来了)。
如有问题,欢迎批评指正。

[NUAA]数据库课设-基于OpenGauss的简易网络小说平台相关推荐

  1. 基于Java毕业设计中文网络小说平台系统源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计中文网络小说平台系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计中文网络小说平台系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S ...

  2. 数据库课设--基于Python+MySQL的餐厅点餐系统

    文章目录 一.系统需求分析 二.系统设计 1. 功能结构设计 2.概念设计 2.2.1 bill_food表E-R图 2.2.2 bills表E-R图 2.2.3 categories E-R图 2. ...

  3. 数据库课设(足球联赛管理系统)

    一:前言 如果有关注博主的粉丝,可能会发现贴心杰又缺更好几天了,但是我是宠粉杰啊,怎么可能会忘了我的宝贝粉丝呢,只不过是临近期末,各种大作业课设如期而至,这几天我在写数据库课设,对于一个没有写过任何项 ...

  4. HNUST - 数据库课设

    HNUST - Python+Mysql数据库课设 一.实验题目 人事管理系统 二.实验目的 企业人事管理系统主要用于员工个人资料的录入.职务变动的记录和管理.使用人事管理系统,便于公司领导掌握人员的 ...

  5. 数据库课设:java实现的本地电脑专卖店管理系统

    概述:本文是一篇介绍数据库课设文件的文章,文件包括前期的数据库准备和软件的具体实现. 课设全套文件下载地址:https://download.csdn.net/download/Koweico/125 ...

  6. 数据库课设记录 Day 3

    Day 3 经过各种斟酌,砍了不少一时心血来潮想做的东西,数据库课设的核心内容就定下来了. 公司 Company 名称 字段 数据类型 id id int 公司名 name varchar(20) 地 ...

  7. 【数据库课设】学生成绩管理系统 (JAVA+ swing + JDBC)

    正道的光 源代码资源获取!!!!! 百度网盘: https://pan.baidu.com/s/1fQab5mOfpZ14rv7yhT_TAQ 提取码:0307 Github: https://git ...

  8. 【数据库课设】图书馆借阅系统

    [数据库][keshe]图书馆借阅系统 系统+报告全家桶 代码: using System; using System.Collections.Generic; using System.Compon ...

  9. 数据库课设项目(上) 医院

    文章目录 任务 需求分析 过程 CREATE DATABASE 导入地区数据 转义字符 CREATE TABLE 成功导入 注册医院 CREATE TABLE 导入结果 触发器创建默认科室 初始科室 ...

最新文章

  1. Silverlight4.0教程之使用CompositeTransform复合变形特效实现倒影
  2. Day12 CSS简单用法
  3. linux传输文件scp自动接密码,配置scp在Linux或Unix之间传输文件无需密码
  4. 所有的图放到一个html,拖放是HTML5标准的组成部分,若想要把drag1图片放入d
  5. python利用()写模块_介绍一下我自己写的一些Python模块
  6. python cgi库_《Python 数据库 GUI CGI编程》
  7. nginx php-fpm 输出php错误日志
  8. 阻止具有特定文件扩展名的附件的电子邮件
  9. TCP/IP之封装,分用,server模型
  10. 权重尺寸的计算,张量(图像)的尺寸,以及卷积神经网络(CNN)中层参数的计算,以及FC的维度卷积替代方案
  11. 解决Vue 2.0在IE11版本浏览器中的兼容性问题
  12. bigemap中下载边界_BIGEMAP地图下载器-全能版
  13. zblog小程序模板-青春小程序模板
  14. 分库分表中间件的高可用实践
  15. mysql通过视图插入数据_数据库视图 sql
  16. fastadmin 配置阿里云邮箱SMTP 邮箱服务器(邮箱发件服务器)
  17. Android 中 使用 Google Paly 支付 简介
  18. Oracle REST Data Services(ORDS)-通过REST接口操作Oracle数据库
  19. 边玩边学,13个 Python 小游戏真有趣啊(含源码)
  20. html5查看swf视频格式,如何使用Videojs播放.swf格式文件?

热门文章

  1. MAC/Linux 压缩/解压缩命令大全整理 gzip / tar / zip
  2. 上下位机?透明传输?DTU相关小知识1分钟让你快速了解
  3. 弘辽科技:成为拼多多商家要什么要求?收费吗?
  4. jstl中Core标签库c:out标签的escapeXml属性
  5. Cropper.js实现对上传图片的剪裁
  6. c语言编辑mapgis花纹库,自定义编辑section角度花纹库
  7. python设置桌面歌词_Python点阵字玩转动态歌词
  8. 百度技术总监谈12306高性能海量并发网站架构设计
  9. 迷你世界电路计算机的过程,迷你世界循环电路怎么做 迷你世界循环电路制作攻略...
  10. Echarts饼状图属性设置大全