2026-2027届Python毕业设计优质选题汇总:百个热门方向完整推荐
·
前言
📌博主介绍:一线全栈工程师,毕设实战引路人。技术栈覆盖Java、Python、C#、PHP、Node.js及UniApp跨端开发,擅长多语言项目落地与架构设计。持续分享毕设源码、开题报告、技术选型心得与职场踩坑经验。用工程化思维写代码,帮你把毕设做成作品集。👍👍
毕业设计选题越来越重要,也越来越让同学感到焦虑。(切记先收藏起来)
很多同学不知道该如何确定题目,也不清楚导师真正关注的是什么,导致选题阶段浪费了很多时间。(选题指导)
其实,选题阶段最重要的不是一开始就想一个 “完美题目”,而是先把自己能做什么、感兴趣什么、导师可能认可什么理清楚。很多同学之所以选题困难,往往是因为没有把研究方向、题目来源、实践条件和论文写作要求结合起来考虑。(选题避坑)
如果选题没有做好,后面的开题、调研、实验、写作都会受到影响。因此,建议大家在正式确定题目之前,先多查资料、多和导师沟通,尽量选择一个既有研究价值、又有数据和案例支撑的题目。(有疑问可随时咨询,免费解答)
也可以参考一些优秀的毕业设计题目,帮助自己打开思路,避免走弯路(收藏,收藏,收藏~)

文章最下面,获取源码和数据库
Python选题参考
- 基于Python的电商平台商品销售数据分析与趋势预测
- 基于Python的个人账单管理系统
- Python实现的露营装车租赁管理系统
- 基于Python的悄悄读图书商城
- 基于Python的高校综合交流社区系统
- 基于Python的流动摊位信息系统
- Python实现的企业办公用品智能管理
- Python实现糖尿病防治科普系统
- 基于Python的招聘信息数据分析系统
- 基于Python的社区扶贫救助管理系统
- Python实现的企业项目审批管理系统
- 基于Python的景区停车管理系统
- Python实现的汽车租赁系统
- Python实现的在线图书借阅管理系统
- Python实现的动力方健身房系统
- 基于Python的开发板的环境监测仪器
- Python实现的固定资产盘点管理系统
- 基于Python的商超管理系統
- 基于Python的鲜花销售系统
- 基于Python的教室预约
- 基于Python的藏品展示与交易系统
- 基于Python的面向数字乡村的就业信息融合服务平台
- 基于Python的社会志愿者服务管理系统
- 基于Python的医院药品库存管理平台
- 基于Python的校内外卖APP
- 基于Python的零食仓储管理系统
- Python实现的物流管理系统
- Python实现的校园快递管理系统
- Python实现的城市社区垃圾分类积分兑换管理系统
- Python实现的重庆地区招聘数据分析与岗位推荐系统
- Python实现的电脑硬件配置系统
- Python实现的智慧“银发”经济养老平台
- Python实现的“襄约·枕汾”旅居小院管理系统
- 基于Python的动漫周边销售系统
- 基于Python的客户投诉管理系统
- 基于Python的医院挂号管理系统
- 基于Python的安养院信息管理系统
- 基于Python的影院智能管理系统
- 基于Python的机械产品库存管理信息系统
- 基于Python的废旧物资回收平台
- 基于Python的高校寝室管理系统
- Python实现的丝绸之路特色文化旅游信息服务平台
- Python实现的小区老年居民服务系统
- 基于Python的学校图书馆管理AI数字助手
- Python实现的智能图书推荐系统
- 基于Python的马拉松赛事管理系统
- 基于Python的智慧药店药品管理系统
- 基于Python的智能个人博客系统
- 基于Python的校园二手交易系统
- Python实现的上门安装维修服务系统
- Python实现的非物质文化遗产商城管理系统
- Python实现的沈阳云洗浴管理系统
- Python实现的智慧文旅系统
- Python实现的电商评论大数据情感分析与产品改进建议系统
- Python实现的高校教工卡信息管理系统
- Python实现的大学生就业平台
- Python实现的五金仓库管理系统
- Python实现的汽车租赁管理系统
- Python实现的校园新闻发布系统
- Python实现的宠物医疗店管理系统
- Python实现的动物救助及领养管理系统
- Python实现的课堂签到与互动系统
- Python实现的生鲜销售数据分析与可视化系统
- Python实现的考研刷题数据分析平台
- Python实现的校运会管理系统
- Python实现的山东省气象监测数据分析系统
- Python实现的手工艺品销售管理系统
- Python实现的邻里互助平台
- Python实现的非遗文化数字化管理与在线传播系统
- 基于Python的保龄球馆预约管理系统
- 基于Python的中医问诊系统
- 基于Python的零工平台管理系统
- 基于Python的宠物用品商店APP
- 基于Python的红旗影院电影售票系统
- 基于Python的在线购物商城系统
- Python实现的音乐服务平台
- Python实现的心理健康互助小组管理平台
- Python实现的课堂签到系统
- Python实现的教育培训机构学员管理信息系统
- Python实现的校园健康膳食管理平台
- Python实现的搜索引擎系统
- Python实现的甘肃省博物馆信息管理系统
- Python实现的社区邻里互助共享系统
- Python实现的中医体质辨识与个性化养生方案
- Python实现的罕见病交流平台
- 基于Python的服装商城管理系统
- 基于Python的自习室智能预约系统
- 基于Python的演唱会门票管理系统
- 基于Python的二次元产品交流与售卖系统
- 基于Python的婚礼花艺线上销售系统
数据库参考
CREATE TABLE `slides` (
`slides_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '轮播图ID',
`title` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '标题',
`content` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '内容',
`url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '链接',
`img` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '轮播图',
`hits` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '点击量',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`slides_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='轮播图';
DROP TABLE IF EXISTS `auth`;
CREATE TABLE `auth` (
`auth_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '授权ID',
`user_group` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '用户组',
`mod_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '模块名',
`table_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '表名',
`page_title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '页面标题',
`path` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '路由路径',
`parent` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '父级菜单',
`parent_sort` int(10) NOT NULL DEFAULT '0' COMMENT '父级菜单排序',
`position` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '位置',
`mode` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '_blank' COMMENT '跳转方式',
`add` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '是否可增加',
`del` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '是否可删除',
`set` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '是否可修改',
`get` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '是否可查看',
`field_add` text CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT '添加字段',
`field_set` text CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT '修改字段',
`field_get` text CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT '查询字段',
`table_nav_name` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '跨表导航名称',
`table_nav` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '跨表导航',
`option` text CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT '配置',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`auth_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户权限管理';
DROP TABLE IF EXISTS `upload`;
CREATE TABLE `upload` (
`upload_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '上传ID',
`name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '文件名',
`path` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '访问路径',
`file` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '文件路径',
`display` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '显示顺序',
`father_id` int(11) DEFAULT '0' COMMENT '父级ID',
`dir` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '文件夹',
`type` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '文件类型',
PRIMARY KEY (`upload_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文件上传';
insert into `upload` values ('1','movie.mp4','/upload/movie.mp4','',null,'0',null,'video');
DROP TABLE IF EXISTS `subject`;
CREATE TABLE `subject` (
`subject_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '科目ID',
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '科目名称',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`subject_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='科目';
insert into `subject` values ('1','科目1','2026-04-12 10:37:26','2026-04-12 10:37:26');
DROP TABLE IF EXISTS `message_inform`;
CREATE TABLE `message_inform` (
`message_inform_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '通知ID',
`user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '通知人ID',
`title` varchar(255) DEFAULT NULL COMMENT '标题',
`state` varchar(255) DEFAULT NULL COMMENT '状态',
`type` varchar(64) DEFAULT NULL COMMENT '分类',
`content` varchar(255) DEFAULT NULL COMMENT '内容',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`message_inform_id`) USING BTREE,
KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='通知记录';
DROP TABLE IF EXISTS `user_group`;
CREATE TABLE `user_group` (
`group_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户组ID',
`display` smallint(4) unsigned NOT NULL DEFAULT '100' COMMENT '显示顺序',
`name` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '名称',
`description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '描述',
`source_table` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '来源表',
`source_field` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '来源字段',
`source_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '来源ID',
`register` smallint(1) unsigned DEFAULT '0' COMMENT '注册位置',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`group_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户组';
DROP TABLE IF EXISTS `article`;
CREATE TABLE `article` (
`article_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '文章id',
`title` varchar(125) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '标题',
`type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '文章分类',
`hits` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '点击数',
`praise_len` int(11) NOT NULL DEFAULT '0' COMMENT '点赞数',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`source` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '来源',
`url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '来源地址',
`tag` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '标签',
`content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '正文',
`img` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '封面图',
`description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '文章描述',
PRIMARY KEY (`article_id`,`title`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文章';
DROP TABLE IF EXISTS `access_token`;
CREATE TABLE `access_token` (
`token_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '临时访问牌ID',
`token` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '临时访问牌',
`info` text CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT '信息',
`maxage` int(2) NOT NULL DEFAULT '2' COMMENT '最大寿命:默认2小时',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`user_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '用户编号',
PRIMARY KEY (`token_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='登陆访问时长';
DROP TABLE IF EXISTS `exam`;
CREATE TABLE `exam` (
`exam_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '考试id',
`name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '考试名称:[2,32]',
`duration` int(11) DEFAULT NULL COMMENT '答题时长',
`score` double(8,2) DEFAULT '0.00' COMMENT '总分',
`status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '状态:启用、禁用',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`open_start` datetime DEFAULT NULL COMMENT '开放开始时间',
`open_end` datetime DEFAULT NULL COMMENT '开放结束时间',
`reuse_state` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '启用' COMMENT '多次答题:启用、禁用',
PRIMARY KEY (`exam_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=COMPACT COMMENT='考试';
E TABLE `user_answer` (
`user_answer_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户答题ID',
`user_id` mediumint(8) NOT NULL COMMENT '用户ID',
`exam_id` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '考试id',
`score` double(8,2) DEFAULT '0.00' COMMENT '分数',
`answers` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '答案',
`score_detail` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '评分详情',
`objective_score` double(8,2) DEFAULT '0.00' COMMENT '客观题得分',
`subjective_score` double(8,2) DEFAULT '0.00' COMMENT '主观题得分',
`score_state` tinyint(2) DEFAULT '0' COMMENT '评分状态',
`nickname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '提交人',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`comment_desc` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '评语',
PRIMARY KEY (`user_answer_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户答题';
DROP TABLE IF EXISTS `code_token`;
CREATE TABLE `code_token` (
`code_token_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '验证码ID',
`token` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL COMMENT '令牌',
`code` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL COMMENT '验证码',
`expire_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '失效时间',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`code_token_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=COMPACT COMMENT='验证码';
DROP TABLE IF EXISTS `collect`;
CREATE TABLE `collect` (
`collect_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '收藏ID',
`user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '收藏人ID',
`source_table` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '来源表',
`source_field` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '来源字段',
`source_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '来源ID',
`title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '标题',
`img` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '封面',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`collect_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='收藏';
DROP TABLE IF EXISTS `exam_question_database`;
CREATE TABLE `exam_question_database` (
`exam_question_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
`subject_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '科目名称',
`type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '类型',
`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '题目',
`question_item` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '选项',
`answer` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '参考答案',
`score` double(8,2) DEFAULT NULL COMMENT '总分',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`answer_analysis` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '答案解析',
PRIMARY KEY (`exam_question_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='试题库';
代码参考
from app.core import controller
import numpy as np
from app.service import service_select
controllerClass = getattr(controller, "Controller")
# 课程信息
class Course_information(controllerClass):
def __init__(self, config={}):
"""
构造函数
@param {Object} config 配置参数
"""
config_init = {
# 选择的模板那路径模板
"tpl": "./course_information/",
# 注册API
"get_api": [],
# 注册post api路由
"post_api": [],
# 选择的服务
"service": "course_information",
}
config_temp = config
config_temp.update(config_init)
super(Course_information , self).__init__(config_temp)
# 协同过滤算法
def Get_hits_list(self, ctx):
query = dict(ctx.query)
service = self.service
if "user_id" in query:
user_id = query.pop("user_id")
if user_id == '':
return self.Get_list(ctx)
else:
examine_state = ''
if "examine_state" in query:
examine_state = query.pop("examine_state")
# 查询该用户常点击
hitsSource = "SELECT COUNT( hits_id ) AS hits_count, source_id FROM hits WHERE source_table = 'course_information' AND user_id = " + user_id + " GROUP BY source_id"
hitsSourceList = service.run(hitsSource)
# 判断是否为空,代表当前用户暂无点击数据,那么取其他用户的最常点击
if len(hitsSourceList) <= 0:
hitsSource = "SELECT COUNT( hits_id ) AS hits_count, source_id FROM hits WHERE source_table = 'course_information' GROUP BY source_id"
hitsSourceList = service.run(hitsSource)
table_name = "course_information"
table_id = "course_information_id"
type_name = "course_categories"
# 二次处理-如果依旧为空则取添加时间前12条数据
if len(hitsSourceList) <= 0:
sql = "SELECT * FROM " + table_name
if examine_state != '':
sql = sql + " where examine_state = '"+examine_state+"'"
sql = sql + " ORDER BY create_time DESC LIMIT 0,12"
list = service.run(sql)
return {"result": {"list": list, "count": len(list)}}
else:
# 对用户点击量进行排序取得最大值
max = 0
maxSourceId = 0
for o in hitsSourceList:
hitsCount = float(o["hits_count"])
if hitsCount > max:
max = hitsCount
maxSourceId = o["source_id"]
# 查询该用户点击最大值的种类
typeSql = "SELECT " + type_name + " FROM " + table_name + " WHERE " + table_id + " = " + str(maxSourceId)
typeList = service.run(typeSql)
# 如果为空则取添加时间前12条数据
if len(typeList) <= 0:
sql = "SELECT * FROM " + table_name
if examine_state != '':
sql = sql + " where examine_state = '"+examine_state+"'"
sql = sql + " ORDER BY create_time DESC LIMIT 0,12"
list = service.run(sql)
return {"result": {"list": list, "count": len(list)}}
else:
# 查询该种类的数据
typeName = typeList[0][type_name]
sql = "SELECT * FROM " + table_name + " WHERE " + type_name + " = '"+typeName+"'"
if examine_state != '':
sql = sql + " and examine_state = '"+examine_state+"' ORDER BY create_time DESC limit 0,12"
else:
sql = sql + " ORDER BY create_time DESC limit 0,12"
resultList = service.run(sql)
# 如果为空则取添加时间前12条数据
if len(resultList) <= 0:
sql = "SELECT * FROM " + table_name
if examine_state != '':
sql = sql + " where examine_state = '"+examine_state+"'"
sql = sql + " ORDER BY create_time DESC LIMIT 0,12"
list = service.run(sql)
return {"result": {"list": list, "count": len(list)}}
else:
# 对结果排序-冒泡排序
n = len(resultList)
for i in range(n):
# 是否发生交换
swapped = False
for j in range(n-i-1):
if resultList[j]["hits"] < resultList[j+1]["hits"]:
resultList[j], resultList[j+1] = resultList[j+1], resultList[j]
swapped = True
if not swapped:
# 没有发生交换,则说明数组已有序,停止冒泡
break
if len(resultList) < 12:
# 判断是否有12条-如果不足则计算其他类型和用户当前点击最多的余弦相似度,依次往下取得数据
typeCosSql = "SELECT " + type_name + " FROM " + table_name + " WHERE " + type_name + " <> '" + typeName + "' GROUP BY " + type_name
typeCosList = service.run(typeCosSql)
if len(typeCosList) > 0:
for o in typeCosList:
o["cosSim"] = self.similar(typeName, o[type_name], 2)
# 冒泡根据相似度排序
cosn = len(typeCosList)
for i in range(cosn):
# 是否发生交换
swapped = False
for j in range(n - i - 1):
if j < cosn - 1:
if typeCosList[j]["cosSim"] < typeCosList[j + 1]["cosSim"]:
typeCosList[j], typeCosList[j + 1] = typeCosList[j + 1], typeCosList[j]
swapped = True
if not swapped:
# 没有发生交换,则说明数组已有序,停止冒泡
break
# 逐条加入数据
for o in typeCosList:
sql = "SELECT * FROM " + table_name + " WHERE " + type_name + " = '" + o[type_name] + "'"
if examine_state != '':
sql = sql + " and examine_state = '"+examine_state+"'"
sql = sql + " ORDER BY create_time DESC LIMIT 0," + str(12 - len(resultList))
list = service.run(sql)
if len(list) > 0:
resultList.extend(list)
return {"result": {"list": resultList, "count": len(resultList)}}
return self.Get_list(ctx)
# 计算余弦相似度
def similar(self, s, t, f):
print(s)
print(t)
if not s or not t:
return 0
if s == t:
return 100
if len(s) > len(t):
l = len(s)
else:
l = len(t)
n = len(s)
m = len(t)
d = np.zeros((n+1, m+1))
if not f:
f = 2
def min(a, b, c):
if a < b:
if a < c:
return a
else:
return c
else:
if b < c:
return b
else:
return c
if n == 0:
return m
if m == 0:
return n
for i in range(0, n+1, 1):
d[i][0] = i
for j in range(0, m+1, 1):
d[0][j] = j
for i in range(1, n+1, 1):
si = s[i - 1: i]
for j in range(1, m+1, 1):
tj = t[j - 1: j]
if si == tj:
cost = 0
else:
cost = 1
d[i][j] = min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + cost)
res = (1 - d[n][m] / l) * 100
return "{:.2f}".format(res)
# 课程笔记
class Course_notes(controllerClass):
def __init__(self, config={}):
"""
构造函数
@param {Object} config 配置参数
"""
config_init = {
# 选择的模板那路径模板
"tpl": "./course_notes/",
# 注册API
"get_api": [],
# 注册post api路由
"post_api": [],
# 选择的服务
"service": "course_notes",
}
config_temp = config
config_temp.update(config_init)
super(Course_notes , self).__init__(config_temp)
# 下载
class Download(controllerClass):
def __init__(self, config={}):
"""
构造函数
@param {Object} config 配置参数
"""
config_init = {
# 选择的模板那路径模板
"tpl": "./download/",
# 选择的服务
"service": "upload",
}
config_temp = {}
config_temp.update(config)
config_temp.update(config_init)
super(Download, self).__init__(config_temp)
# 下载文件
def Index(self, ctx):
src = ctx.query["src"]
name = src.split("/")[-1]
filename = open("static" + src, "rb")
response = FileResponse(filename)
response["Content-Type"] = "application/octet-stream"
response["Content-Disposition"] = "attachment; filename*=utf-8''{}".format(escape_uri_path(name))
return response
源码获取
下方名片联系我即可~
大家点赞、收藏、关注、评论啦
更多推荐


所有评论(0)