一、选课指导博客论坛系统功能概要
1、需求及设计目的:
学分制与选课制的开展和深入,每学期都会有各种选修课及选课环节,为帮助同学们了解各选修课,构建该平台供同学们评价交流。(初期设想,可扩展)
2、功能设计(基于页面,参考网易云官网页面)
(1)首页功能:热门课程列表,课程搜索,开课教师,登录注册
(2)课程详情:评论与恢复,用户点赞,课程收藏,关联推荐
(3)发布评论:内容编辑,草稿箱,评论发布,缩略图
(4)用户中心:个人资料,我的评论,我的收藏,选课记录
更多扩展内容:
(4)系统管理:课程发布管理,评论管理,用户管理,投稿审核
(5)高级功能:Redis缓存,静态化处理
二、技术知识及工具
MVC开发模式
(1)Angular,使用Ng-zorro组件库快速构建前端页面,开发工具WebStorm。
(2)mysql,开发工具Workbench。
(3)flask,开发工具Pycharm。
(4)css,用于布局优化界面。
三、数据库设计
使用workbench创建了一个名为classdatabase(可自行命名)的数据库,
表设计:course表,用来存储全部课程相关的信息;student_info表,用来存储学生用户信息;advice表,用来存储课程相关评论的信息;。。。(待添加)
四、flask对数据库数据进行调用
#导入第三方库及模块
from flask import Flask,jsonify,request,url_for
import pymysql
from flask_sqlalchemy import SQLAlchemy
from flask_cors import CORS,cross_origin
app = Flask(__name__)
cors = CORS(app)
#解决跨域访问问题
#链接数据库
app.config['SQLALCHEMY_DATABASE_URI']='mysql+pymysql://root:******(数据库连接密码)@localhost:3306/classdatabase'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=True #动态跟踪修改,未来版本移除
db = SQLAlchemy(app) #创建数据库对象
#构建数据库映射
#数据库模型需要继承db.model
class Course(db.Model): #课程信息数据库
__tablename__ = 'course' #定义表名
#定义字段,db.Column 表示是一个字段
c_id=db.Column(db.String(50), primary_key=True)
t_id = db.Column(db.String(50))
c_name = db.Column(db.String(25))
c_type = db.Column(db.String(12)) #课程类型
c_college = db.Column(db.String(12)) #供选学院
c_credit= db.Column(db.Integer) #学分
c_max=db.Column(db.Integer) #可选最大人数
c_room = db.Column(db.String(12)) #上课地点
c_intraduction = db.Column(db.VARCHAR(250)) #课程介绍
#c_advice = db.Column(db.Text) #课程建议
class Account(db.Model): #学生信息数据库
__tablename__ = 'student_info'
s_id = db.Column(db.Integer, primary_key=True)
s_password = db.Column(db.String(50))
s_name = db.Column(db.String(50))
s_sex = db.Column(db.String(5))
s_college= db.Column(db.String(12))
s_profession = db.Column(db.String(50))
s_email = db.Column(db.String(50))
class Advice(db.Model): #课程评价信息数据库
__tablename__ = 'advice'
s_id = db.Column(db.Integer,db.ForeignKey('student_info.s_id'))
c_id = db.Column(db.String(50),db.ForeignKey('course.c_id'))
c_advice = db.Column(db.VARCHAR(250),primary_key=True)
c_time = db.Column(db.DateTime)
agreecount = db.Column(db.Integer)
db.create_all() # 创建表
#创建get接口
#用于获取所有课程的信息,能到课程列表,并用于展示
#目前用于首页热门和全部课程两个组件
@app.route('/getclasses') #默认支持get方法
def getClasses():
classes = Course.query.all()
class_list = []
for i in classes:
class_list.append({'c_id': i.c_id, 't_id': i.t_id, 'c_name': i.c_name,
'c_type': i.c_type,'c_college': i.c_college,'c_credit':i.c_credit,
'c_max':i.c_max,'c_room':i.c_room,'c_intraduction':i.c_intraduction
})
return jsonify(class_list)
#用于获取分类标签下课程列表的展示
@app.route('/getclassbytype/<string:c_type>')
def getClassesByname(c_type):
class1 = Course.query.filter(Course.c_name==c_type).first()
print(class1)
class_dict = {'c_id': class1.c_id, 't_id': class1.t_id, 'c_name': class1.c_name,
'c_type': class1.c_type,'c_college': class1.c_college,'c_credit':class1.c_credit,
'c_max':class1.c_max,'c_room':class1.c_room,'c_intraduction':class1.c_intraduction,
'c_advice':class1.c_advice}
return jsonify(class_dict)
if __name__ == '__main__':
app.run(debug=True)