基于机器学习的心脏病数据分析与可视化(百度智能云千帆AI+DeepSeek人工智能+机器学习)健康预测、风险评估与数据可视化 健康管理平台 数据分析与处理
博主介绍:
✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W+粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台的优质作者。通过长期分享和实战指导,我致力于帮助更多学生完成毕业项目和技术提升。技术范围:
我熟悉的技术领域涵盖SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等方面的设计与开发。如果你有任何技术难题,我都乐意与你分享解决方案。主要内容:
我的服务内容包括:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文撰写与辅导、论文降重、长期答辩答疑辅导。我还提供腾讯会议一对一的专业讲解和模拟答辩演练,帮助你全面掌握答辩技巧与代码逻辑。🍅获取源码请在文末联系我🍅
温馨提示:文末有 CSDN 平台官方提供的阿龙联系方式的名片!
温馨提示:文末有 CSDN 平台官方提供的阿龙联系方式的名片!
温馨提示:文末有 CSDN 平台官方提供的阿龙联系方式的名片!
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
目录
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
目录:
一、详细操作演示视频 在文章的尾声,您会发现一张电子名片👤,欢迎通过名片上的联系方式与我取得联系,以获取更多关于项目演示的详尽视频内容。视频将帮助您全面理解项目的关键点和操作流程。期待与您的进一步交流!
2.1 mysql技术介绍
2.2 Python语言介绍
2.3 Django框架简介
2.4 B/S架构
2.5 Scrapy简介
系统实现!
预测核心代码:
1-项目均为博主学习开发自研,适合新手入门和学习使用
2-所有源码均一手开发,不是模版!不容易跟班里人重复!
源码获取文章下方名片联系我即可~大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻精彩专栏推荐订阅:在下方专栏
一、详细操作演示视频
在文章的尾声,您会发现一张电子名片👤,欢迎通过名片上的联系方式与我取得联系,以获取更多关于项目演示的详尽视频内容。视频将帮助您全面理解项目的关键点和操作流程。期待与您的进一步交流!
2.1 mysql技术介绍
MySQL是一种开源的关系型数据库管理系统,它广泛应用于大规模数据存储与管理。作为一个成熟的数据库系统,MySQL具有高效、可靠、易于管理和扩展的优点,尤其在处理大量数据时表现出色。对于心脏病数据分析与可视化项目,MySQL被用于存储和管理患者的基本信息、病历数据、实验室检测结果、临床诊断记录等。通过使用MySQL,研究人员可以高效地查询和处理大量数据,同时确保数据的一致性和完整性。
MySQL支持SQL语言,具有强大的数据操作功能,如数据插入、查询、更新和删除等。此外,MySQL还支持事务管理、数据备份、恢复及安全访问控制,这些功能确保了医疗数据的安全性和可靠性。在本研究中,MySQL用于构建心脏病数据存储系统,并为后续的数据分析和可视化提供了稳定的数据库支持。
2.2 Python语言介绍
Python是一种解释型的高级编程语言,以其简洁、可读性强的语法和丰富的库支持而广泛应用于数据科学、机器学习、人工智能等领域。在心脏病数据分析与可视化中,Python发挥了至关重要的作用,主要用于数据的采集、清洗、处理、分析及结果可视化。
Python生态系统中有众多强大的库,如NumPy、Pandas、Matplotlib、Seaborn等,它们帮助研究人员高效地处理和分析心脏病相关的多维数据。NumPy和Pandas提供了强大的数据结构和数据处理功能,支持对大规模数据的高效操作。Matplotlib和Seaborn则提供了多样化的可视化工具,帮助将分析结果通过图表呈现,便于医生和医疗人员理解与决策。
此外,Python还具有丰富的机器学习库(如scikit-learn、TensorFlow、Keras等),为心脏病的预测与风险评估提供了强大的算法支持。在本研究中,Python被广泛应用于数据预处理、特征提取、建模以及结果可视化等多个方面,是实现心脏病数据分析和可视化的核心技术。
2.3 Django框架简介
Django是一个基于Python的开源Web框架,遵循“不要重复自己”(DRY)和“模型-视图-控制器”(MVC)设计模式。Django框架提供了一个高效、便捷的Web开发环境,特别适合快速开发高性能的Web应用。在心脏病数据分析与可视化项目中,Django主要用于构建系统的Web后台,使得数据的展示、管理和交互更加便捷。
Django的强大之处在于它的内置功能,包括身份认证、数据库管理、会话管理等,能够极大地减少开发的复杂度。Django还提供了一个强大的对象关系映射(ORM)系统,可以将Python对象与数据库中的数据表进行映射,使得数据操作更加直观和安全。通过Django框架,系统能够将心脏病数据进行存储、查询、处理,并将分析结果通过Web界面展示给用户,提供一个交互式的数据分析平台。
2.4 B/S架构
B/S架构(浏览器/服务器架构)是一种常见的Web应用架构模式。在B/S架构中,前端界面运行在用户的浏览器中,而后端的业务逻辑和数据存储则由服务器端处理。与传统的C/S(客户端/服务器)架构相比,B/S架构不需要用户安装额外的客户端软件,用户只需通过浏览器访问应用即可。
在本研究的心脏病数据分析与可视化系统中,B/S架构用于构建Web应用,用户可以通过浏览器访问系统,进行数据查询、分析和可视化展示。B/S架构的优势在于它能够简化系统的维护和升级过程,前端和后端可以独立开发和更新,不会互相干扰。同时,B/S架构使得系统的部署更加灵活,支持跨平台使用,能够方便地为多用户提供服务。
2.5 Scrapy简介
Scrapy是一个用于爬取网站数据的开源框架,主要用于抓取和提取网页中的信息。在心脏病数据分析与可视化项目中,Scrapy被用于收集心脏病相关的公共数据,如医学研究论文、患者案例、心脏病的最新治疗方法等。这些数据可以用于扩充分析数据集,帮助研究人员更全面地理解心脏病的发病机制和治疗效果。
Scrapy框架的优势在于其高效、灵活、可扩展,支持并发请求和异步处理,能够大幅提高数据抓取的效率。此外,Scrapy还具备强大的数据清洗和存储功能,可以将抓取到的数据保存到数据库中,方便后续的处理和分析。在本研究中,Scrapy不仅用于数据采集,还能将数据整理成结构化格式,便于进一步分析和可视化。
系统实现!
预测核心代码:
'user':user,'password': passwd,'database': dbName,'port':port
}
# 定义函数创建时间序列数据集
def create_dataset(data, time_step=1):X, Y = [], []for i in range(len(data) - time_step - 1):a = data[i:(i + time_step), :]X.append(a)Y.append(data[i + time_step, :])return np.array(X), np.array(Y)
def heartdiseasedataforecast_forecast(request):if request.method in ["POST", "GET"]:msg = {'code': normal_code, "msg": mes.normal_code}#1.获取数据集connection = pymysql.connect(**mysql_config)query = "SELECT admissiondate, systolicpressure,heartrate,cardiovasculardisease FROM heartdiseasedata ORDER BY admissiondate ASC"#2.处理缺失值data = pd.read_sql(query, connection).dropna()# 转换日期格式为datetimedate_format = data['admissiondate'].iloc[0]if isinstance(date_format, (datetime.date, datetime.datetime)):date_format=''elif "年" in date_format and "月" in date_format and "日" in date_format:date_format='%Y年%m月%d日'elif "年" in date_format and "月" in date_format:date_format='%Y年%m月'elif "年" in date_format:date_format='%Y年'else:date_format=''if date_format=="" or date_format==None:data['admissiondate'] = pd.to_datetime(data['admissiondate'])else:data['admissiondate'] = pd.to_datetime(data['admissiondate'], format=date_format)data.set_index('admissiondate', inplace=True)cardiovasculardisease_encoder = LabelEncoder()data['cardiovasculardisease'] = cardiovasculardisease_encoder.fit_transform(data['cardiovasculardisease'])#只选择需要的列data = data[['systolicpressure','heartrate','cardiovasculardisease',]]# 归一化处理(为了LSTM的训练)scaler = MinMaxScaler(feature_range=(0, 1))scaled_data = scaler.fit_transform(data)#设置时间步长time_step = int(len(data)/10)# 使用过去30的数据if time_step>30:time_step=30if time_step<=0:time_step=1X, y = create_dataset(scaled_data, time_step)#划分训练集和测试集train_size = int(len(X) * 0.8) # 80%的数据用于训练X_train, X_test = X[:train_size], X[train_size:]y_train, y_test = y[:train_size], y[train_size:]# 查看训练数据集的形状print(f'X_train shape: {X_train.shape}, y_train shape: {y_train.shape}')# 创建 LSTM 模型model = Sequential()model.add(LSTM(50, return_sequences=True, input_shape=(X_train.shape[1], X_train.shape[2])))model.add(Dropout(0.2)) # 防止过拟合model.add(LSTM(50, return_sequences=False))model.add(Dropout(0.2))model.add(Dense(len(data.columns), activation='relu')) # 输出层,预测#编译模型model.compile(optimizer='adam', loss='mean_squared_error')#训练模型model.fit(X_train, y_train, epochs=100, batch_size=32, verbose=1)#进行预测train_predict = model.predict(X_train)test_predict = model.predict(X_test)#将预测结果反归一化train_predict = scaler.inverse_transform(train_predict)test_predict = scaler.inverse_transform(test_predict)#绘制预测结果plt.rcParams['font.sans-serif'] = ['SimHei'] # 使用黑体 SimHeiplt.rcParams['axes.unicode_minus'] = False # 解决负号 '-' 显示为方块的问题plt.figure(figsize=(12, 6),dpi=80)plt.plot(data.index[:len(train_predict)], train_predict[:, 1 -1], label='训练systolicpressure预测',color='blue')plt.plot(data.index[len(train_predict) + time_step + 1:], test_predict[:, 1 -1],label='测试systolicpressure预测', color='red')plt.plot(data.index, data['systolicpressure'], label='实际systolicpressure', color='green')plt.title('systolicpressure预测')plt.xlabel('Date')plt.ylabel('systolicpressure')plt.legend()plt.savefig('systolicpressure_prediction.png')plt.clf()plt.figure(figsize=(12, 6),dpi=80)plt.plot(data.index[:len(train_predict)], train_predict[:, 2 -1], label='训练heartrate预测',color='blue')plt.plot(data.index[len(train_predict) + time_step + 1:], test_predict[:, 2 -1],label='测试heartrate预测', color='red')plt.plot(data.index, data['heartrate'], label='实际heartrate', color='green')plt.title('heartrate预测')plt.xlabel('Date')plt.ylabel('heartrate')plt.legend()plt.savefig('heartrate_prediction.png')plt.clf()plt.figure(figsize=(12, 6),dpi=80)plt.plot(data.index[:len(train_predict)], train_predict[:, 3 -1], label='训练cardiovasculardisease预测',color='blue')plt.plot(data.index[len(train_predict) + time_step + 1:], test_predict[:, 3 -1],label='测试cardiovasculardisease预测', color='red')plt.plot(data.index, data['cardiovasculardisease'], label='实际cardiovasculardisease', color='green')plt.title('cardiovasculardisease预测')plt.xlabel('Date')plt.ylabel('cardiovasculardisease')plt.legend()plt.savefig('cardiovasculardisease_prediction.png')plt.clf()#准备未来7的输入数据last_data_days = scaled_data[-time_step:] #取最后time_step的数据future_predictions = []for _ in range(7): # 预测未来7last_data_days = last_data_days.reshape((1, time_step, len(data.columns))) # 重塑数据prediction = model.predict(last_data_days)future_predictions.append(prediction[0])last_data_days = np.append(last_data_days[:, 1:, :], [prediction], axis=1) # 更新输入数据#转换为原始数据future_predictions = scaler.inverse_transform(future_predictions)#获取当前日期last_date = data.index[-1] # 数据集中最后一个日期future_dates = [last_date + datetime.timedelta(days=366*i) for i in range(1, 7+1)] # 生成未来7年的日期df = pd.DataFrame(columns=['admissiondate','systolicpressure','heartrate','cardiovasculardisease',])df['admissiondate'] = [str(date.year) for date in future_dates]df['systolicpressure'] = future_predictions[:, 1 -1]df['heartrate'] = future_predictions[:, 2 -1]df['cardiovasculardisease'] = future_predictions[:, 3 -1]df['systolicpressure']=df['systolicpressure'].astype(int)df['heartrate']=df['heartrate'].astype(int)df['cardiovasculardisease']=df['cardiovasculardisease'].astype(int)df['cardiovasculardisease'] = cardiovasculardisease_encoder.inverse_transform(df['cardiovasculardisease'])#9.创建数据库连接,将DataFrame 插入数据库connection_string = f"mysql+pymysql://{mysql_config['user']}:{mysql_config['password']}@{mysql_config['host']}:{mysql_config['port']}/{mysql_config['database']}"engine = create_engine(connection_string)try:df.to_sql('heartdiseasedataforecast', con=engine, if_exists='append', index=False)print("数据更新成功!")except Exception as e:print(f"发生错误: {e}")finally:engine.dispose() # 关闭数据库连接return JsonResponse(msg, encoder=CustomJsonEncoder)def heartdiseasedataforecast_register(request):if request.method in ["POST", "GET"]:msg = {'code': normal_code, "msg": mes.normal_code}req_dict = request.session.get("req_dict")error = heartdiseasedataforecast.createbyreq(heartdiseasedataforecast, heartdiseasedataforecast, req_dict)if error is Exception:msg['code'] = crud_error_codemsg['msg'] = "用户已存在,请勿重复注册!"else:msg['data'] = errorreturn JsonResponse(msg, encoder=CustomJsonEncoder)def heartdiseasedataforecast_login(request):if request.method in ["POST", "GET"]:msg = {'code': normal_code, "msg": mes.normal_code}req_dict = request.session.get("req_dict")datas = heartdiseasedataforecast.getbyparams(heartdiseasedataforecast, heartdiseasedataforecast, req_dict)if not datas:msg['code'] = password_error_codemsg['msg'] = mes.password_error_codereturn JsonResponse(msg, encoder=CustomJsonEncoder)try:__sfsh__= heartdiseasedataforecast.__sfsh__except:__sfsh__=Noneif __sfsh__=='是':if datas[0].get('sfsh')!='是':msg['code']=other_codemsg['msg'] = "账号已锁定,请联系管理员审核!"return JsonResponse(msg, encoder=CustomJsonEncoder)req_dict['id'] = datas[0].get('id')return Auth.authenticate(Auth, heartdiseasedataforecast, req_dict)def heartdiseasedataforecast_logout(request):if request.method in ["POST", "GET"]:msg = {"msg": "登出成功","code": 0}return JsonResponse(msg, encoder=CustomJsonEncoder)def heartdiseasedataforecast_resetPass(request):''''''if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": mes.normal_code}req_dict = request.session.get("req_dict")columns= heartdiseasedataforecast.getallcolumn( heartdiseasedataforecast, heartdiseasedataforecast)try:__loginUserColumn__= heartdiseasedataforecast.__loginUserColumn__except:__loginUserColumn__=Noneusername=req_dict.get(list(req_dict.keys())[0])if __loginUserColumn__:username_str=__loginUserColumn__else:username_str=usernameif 'mima' in columns:password_str='mima'else:password_str='password'init_pwd = '123456'recordsParam = {}recordsParam[username_str] = req_dict.get("username")records=heartdiseasedataforecast.getbyparams(heartdiseasedataforecast, heartdiseasedataforecast, recordsParam)if len(records)<1:msg['code'] = 400msg['msg'] = '用户不存在'return JsonResponse(msg, encoder=CustomJsonEncoder)eval('''heartdiseasedataforecast.objects.filter({}='{}').update({}='{}')'''.format(username_str,username,password_str,init_pwd))return JsonResponse(msg, encoder=CustomJsonEncoder)def heartdiseasedataforecast_session(request):''''''if request.method in ["POST", "GET"]:msg = {"code": normal_code,"msg": mes.normal_code, "data": {}}req_dict={"id":request.session.get('params').get("id")}msg['data'] = heartdiseasedataforecast.getbyparams(heartdiseasedataforecast, heartdiseasedataforecast, req_dict)[0]return JsonResponse(msg, encoder=CustomJsonEncoder)def heartdiseasedataforecast_default(request):if request.method in ["POST", "GET"]:msg = {"code": normal_code,"msg": mes.normal_code, "data": {}}req_dict = request.session.get("req_dict")req_dict.update({"isdefault":"是"})data=heartdiseasedataforecast.getbyparams(heartdiseasedataforecast, heartdiseasedataforecast, req_dict)if len(data)>0:msg['data'] = data[0]else:msg['data'] = {}return JsonResponse(msg, encoder=CustomJsonEncoder)def heartdiseasedataforecast_page(request):''''''if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": mes.normal_code, "data":{"currPage":1,"totalPage":1,"total":1,"pageSize":10,"list":[]}}req_dict = request.session.get("req_dict")global heartdiseasedataforecast#获取全部列名columns= heartdiseasedataforecast.getallcolumn( heartdiseasedataforecast, heartdiseasedataforecast)if "vipread" in req_dict and "vipread" not in columns:del req_dict["vipread"]#当前登录用户所在表tablename = request.session.get("tablename")'''__authSeparate__此属性为真,params添加userid,后台只查询个人数据'''try:__authSeparate__=heartdiseasedataforecast.__authSeparate__except:__authSeparate__=Noneif __authSeparate__=="是":tablename=request.session.get("tablename")if tablename!="users" and 'userid' in columns and 'userid' not in req_dict:try:req_dict['userid']=request.session.get("params").get("id")except:pass#当项目属性hasMessage为”是”,生成系统自动生成留言板的表messages,同时该表的表属性hasMessage也被设置为”是”,字段包括userid(用户id),username(用户名),content(留言内容),reply(回复)#接口page需要区分权限,普通用户查看自己的留言和回复记录,管理员查看所有的留言和回复记录try:__hasMessage__=heartdiseasedataforecast.__hasMessage__except:__hasMessage__=Noneif __hasMessage__=="是":tablename=request.session.get("tablename")if tablename!="users":req_dict["userid"]=request.session.get("params").get("id")# 判断当前表的表属性isAdmin,为真则是管理员表# 当表属性isAdmin=”是”,刷出来的用户表也是管理员,即page和list可以查看所有人的考试记录(同时应用于其他表)__isAdmin__ = NoneallModels = apps.get_app_config('main').get_models()for m in allModels:if m.__tablename__==tablename:try:__isAdmin__ = m.__isAdmin__except:__isAdmin__ = Nonebreak# 当前表也是有管理员权限的表if __isAdmin__ == "是" and 'heartdiseasedataforecast' != 'forum' :if req_dict.get("userid") and 'heartdiseasedataforecast' != 'chat' and 'heartdiseasedataforecast' != 'examrecord':del req_dict["userid"]else:if tablename!="users" and tablename!="jdfnl" and 'heartdiseasedataforecast'[:7]!='discuss' and "userid" in heartdiseasedataforecast.getallcolumn(heartdiseasedataforecast,heartdiseasedataforecast):req_dict["userid"] = request.session.get("params").get("id")#当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的try:__authTables__=heartdiseasedataforecast.__authTables__except:__authTables__=Noneif __authTables__!=None and __authTables__!={} and __isAdmin__ == "是":for authColumn,authTable in __authTables__.items():if authTable==tablename:params = request.session.get("params")req_dict[authColumn]=params.get(authColumn)username=params.get(authColumn)breakq = Q()msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \msg['data']['pageSize'] =heartdiseasedataforecast.page(heartdiseasedataforecast, heartdiseasedataforecast, req_dict, request, q)return JsonResponse(msg, encoder=CustomJsonEncoder)def heartdiseasedataforecast_autoSort(request):'''.智能推荐功能(表属性:[intelRecom(是/否)],新增clicktime[前端不显示该字段]字段(调用info/detail接口的时候更新),按clicktime排序查询)
主要信息列表(如商品列表,新闻列表)中使用,显示最近点击的或最新添加的5条记录就行'''if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": mes.normal_code, "data":{"currPage":1,"totalPage":1,"total":1,"pageSize":10,"list":[]}}req_dict = request.session.get("req_dict")if "clicknum" in heartdiseasedataforecast.getallcolumn(heartdiseasedataforecast,heartdiseasedataforecast):req_dict['sort']='clicknum'elif "browseduration" in heartdiseasedataforecast.getallcolumn(heartdiseasedataforecast,heartdiseasedataforecast):req_dict['sort']='browseduration'else:req_dict['sort']='clicktime'req_dict['order']='desc'msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \msg['data']['pageSize'] = heartdiseasedataforecast.page(heartdiseasedataforecast,heartdiseasedataforecast, req_dict)return JsonResponse(msg, encoder=CustomJsonEncoder)#分类列表
def heartdiseasedataforecast_lists(request):if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": mes.normal_code, "data":[]}msg['data'],_,_,_,_ = heartdiseasedataforecast.page(heartdiseasedataforecast, heartdiseasedataforecast, {})return JsonResponse(msg, encoder=CustomJsonEncoder)def heartdiseasedataforecast_query(request):''''''if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}try:query_result = heartdiseasedataforecast.objects.filter(**request.session.get("req_dict")).values()msg['data'] = query_result[0]except Exception as e:msg['code'] = crud_error_codemsg['msg'] = f"发生错误:{e}"return JsonResponse(msg, encoder=CustomJsonEncoder)def heartdiseasedataforecast_list(request):'''前台分页'''if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": mes.normal_code, "data":{"currPage":1,"totalPage":1,"total":1,"pageSize":10,"list":[]}}req_dict = request.session.get("req_dict")#获取全部列名columns= heartdiseasedataforecast.getallcolumn( heartdiseasedataforecast, heartdiseasedataforecast)if "vipread" in req_dict and "vipread" not in columns:del req_dict["vipread"]#表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看try:__foreEndList__=heartdiseasedataforecast.__foreEndList__except:__foreEndList__=Nonetry:__foreEndListAuth__=heartdiseasedataforecast.__foreEndListAuth__except:__foreEndListAuth__=None#authSeparatetry:__authSeparate__=heartdiseasedataforecast.__authSeparate__except:__authSeparate__=Noneif __foreEndListAuth__ =="是" and __authSeparate__=="是":tablename=request.session.get("tablename")if tablename!="users" and request.session.get("params") is not None:req_dict['userid']=request.session.get("params").get("id")tablename = request.session.get("tablename")if tablename == "users" and req_dict.get("userid") != None:#判断是否存在userid列名del req_dict["userid"]else:__isAdmin__ = NoneallModels = apps.get_app_config('main').get_models()for m in allModels:if m.__tablename__==tablename:try:__isAdmin__ = m.__isAdmin__except:__isAdmin__ = Nonebreakif __isAdmin__ == "是":if req_dict.get("userid"):# del req_dict["userid"]passelse:#非管理员权限的表,判断当前表字段名是否有useridif "userid" in columns:try:passexcept:pass#当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的try:__authTables__=heartdiseasedataforecast.__authTables__except:__authTables__=Noneif __authTables__!=None and __authTables__!={} and __foreEndListAuth__=="是":for authColumn,authTable in __authTables__.items():if authTable==tablename:try:del req_dict['userid']except:passparams = request.session.get("params")req_dict[authColumn]=params.get(authColumn)username=params.get(authColumn)breakif heartdiseasedataforecast.__tablename__[:7]=="discuss":try:del req_dict['userid']except:passq = Q()msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \msg['data']['pageSize'] = heartdiseasedataforecast.page(heartdiseasedataforecast, heartdiseasedataforecast, req_dict, request, q)return JsonResponse(msg, encoder=CustomJsonEncoder)def heartdiseasedataforecast_save(request):'''后台新增'''if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}req_dict = request.session.get("req_dict")if 'clicktime' in req_dict.keys():del req_dict['clicktime']tablename=request.session.get("tablename")__isAdmin__ = NoneallModels = apps.get_app_config('main').get_models()for m in allModels:if m.__tablename__==tablename:try:__isAdmin__ = m.__isAdmin__except:__isAdmin__ = Nonebreak#获取全部列名columns= heartdiseasedataforecast.getallcolumn( heartdiseasedataforecast, heartdiseasedataforecast)if tablename!='users' and req_dict.get("userid")!=None and 'userid' in columns and __isAdmin__!='是':params=request.session.get("params")req_dict['userid']=params.get('id')if 'addtime' in req_dict.keys():del req_dict['addtime']idOrErr= heartdiseasedataforecast.createbyreq(heartdiseasedataforecast,heartdiseasedataforecast, req_dict)if idOrErr is Exception:msg['code'] = crud_error_codemsg['msg'] = idOrErrelse:msg['data'] = idOrErrreturn JsonResponse(msg, encoder=CustomJsonEncoder)def heartdiseasedataforecast_add(request):'''前台新增'''if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}req_dict = request.session.get("req_dict")tablename=request.session.get("tablename")#获取全部列名columns= heartdiseasedataforecast.getallcolumn( heartdiseasedataforecast, heartdiseasedataforecast)try:__authSeparate__=heartdiseasedataforecast.__authSeparate__except:__authSeparate__=Noneif __authSeparate__=="是":tablename=request.session.get("tablename")if tablename!="users" and 'userid' in columns:try:req_dict['userid']=request.session.get("params").get("id")except:passtry:__foreEndListAuth__=heartdiseasedataforecast.__foreEndListAuth__except:__foreEndListAuth__=Noneif __foreEndListAuth__ and __foreEndListAuth__!="否":tablename=request.session.get("tablename")if tablename!="users":req_dict['userid']=request.session.get("params").get("id")if 'addtime' in req_dict.keys():del req_dict['addtime']error= heartdiseasedataforecast.createbyreq(heartdiseasedataforecast,heartdiseasedataforecast, req_dict)if error is Exception:msg['code'] = crud_error_codemsg['msg'] = errorelse:msg['data'] = errorreturn JsonResponse(msg, encoder=CustomJsonEncoder)def heartdiseasedataforecast_thumbsup(request,id_):'''点赞:表属性thumbsUp[是/否],刷表新增thumbsupnum赞和crazilynum踩字段,'''if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}req_dict = request.session.get("req_dict")id_=int(id_)type_=int(req_dict.get("type",0))rets=heartdiseasedataforecast.getbyid(heartdiseasedataforecast,heartdiseasedataforecast,id_)update_dict={"id":id_,}if type_==1:#赞update_dict["thumbsupnum"]=int(rets[0].get('thumbsupnum'))+1elif type_==2:#踩update_dict["crazilynum"]=int(rets[0].get('crazilynum'))+1error = heartdiseasedataforecast.updatebyparams(heartdiseasedataforecast,heartdiseasedataforecast, update_dict)if error!=None:msg['code'] = crud_error_codemsg['msg'] = errorreturn JsonResponse(msg, encoder=CustomJsonEncoder)def heartdiseasedataforecast_info(request,id_):''''''if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}data = heartdiseasedataforecast.getbyid(heartdiseasedataforecast,heartdiseasedataforecast, int(id_))if len(data)>0:msg['data']=data[0]if msg['data'].__contains__("reversetime"):if isinstance(msg['data']['reversetime'], datetime.datetime):msg['data']['reversetime'] = msg['data']['reversetime'].strftime("%Y-%m-%d %H:%M:%S")else:if msg['data']['reversetime'] != None:reversetime = datetime.datetime.strptime(msg['data']['reversetime'], '%Y-%m-%d %H:%M:%S')msg['data']['reversetime'] = reversetime.strftime("%Y-%m-%d %H:%M:%S")#浏览点击次数try:__browseClick__= heartdiseasedataforecast.__browseClick__except:__browseClick__=Noneif __browseClick__=="是" and "clicknum" in heartdiseasedataforecast.getallcolumn(heartdiseasedataforecast,heartdiseasedataforecast):try:clicknum=int(data[0].get("clicknum",0))+1except:clicknum=0+1click_dict={"id":int(id_),"clicknum":clicknum,"clicktime":datetime.datetime.now()}ret=heartdiseasedataforecast.updatebyparams(heartdiseasedataforecast,heartdiseasedataforecast,click_dict)if ret!=None:msg['code'] = crud_error_codemsg['msg'] = retreturn JsonResponse(msg, encoder=CustomJsonEncoder)def heartdiseasedataforecast_detail(request,id_):''''''if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}data =heartdiseasedataforecast.getbyid(heartdiseasedataforecast,heartdiseasedataforecast, int(id_))if len(data)>0:msg['data']=data[0]if msg['data'].__contains__("reversetime"):if isinstance(msg['data']['reversetime'], datetime.datetime):msg['data']['reversetime'] = msg['data']['reversetime'].strftime("%Y-%m-%d %H:%M:%S")else:if msg['data']['reversetime'] != None:reversetime = datetime.datetime.strptime(msg['data']['reversetime'], '%Y-%m-%d %H:%M:%S')msg['data']['reversetime'] = reversetime.strftime("%Y-%m-%d %H:%M:%S")#浏览点击次数try:__browseClick__= heartdiseasedataforecast.__browseClick__except:__browseClick__=Noneif __browseClick__=="是" and "clicknum" in heartdiseasedataforecast.getallcolumn(heartdiseasedataforecast,heartdiseasedataforecast):try:clicknum=int(data[0].get("clicknum",0))+1except:clicknum=0+1click_dict={"id":int(id_),"clicknum":clicknum,"clicktime":datetime.datetime.now()}ret=heartdiseasedataforecast.updatebyparams(heartdiseasedataforecast,heartdiseasedataforecast,click_dict)if ret!=None:msg['code'] = crud_error_codemsg['msg'] = retreturn JsonResponse(msg, encoder=CustomJsonEncoder)def heartdiseasedataforecast_update(request):''''''if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}req_dict = request.session.get("req_dict")if 'clicktime' in req_dict.keys() and req_dict['clicktime']=="None":del req_dict['clicktime']if req_dict.get("mima") and "mima" not in heartdiseasedataforecast.getallcolumn(heartdiseasedataforecast,heartdiseasedataforecast) :del req_dict["mima"]if req_dict.get("password") and "password" not in heartdiseasedataforecast.getallcolumn(heartdiseasedataforecast,heartdiseasedataforecast) :del req_dict["password"]try:del req_dict["clicknum"]except:passerror = heartdiseasedataforecast.updatebyparams(heartdiseasedataforecast, heartdiseasedataforecast, req_dict)if error!=None:msg['code'] = crud_error_codemsg['msg'] = errorreturn JsonResponse(msg)def heartdiseasedataforecast_delete(request):'''批量删除'''if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}req_dict = request.session.get("req_dict")error=heartdiseasedataforecast.deletes(heartdiseasedataforecast,heartdiseasedataforecast,req_dict.get("ids"))if error!=None:msg['code'] = crud_error_codemsg['msg'] = errorreturn JsonResponse(msg)def heartdiseasedataforecast_vote(request,id_):'''浏览点击次数(表属性[browseClick:是/否],点击字段(clicknum),调用info/detail接口的时候后端自动+1)、投票功能(表属性[vote:是/否],投票字段(votenum),调用vote接口后端votenum+1)
统计商品或新闻的点击次数;提供新闻的投票功能'''if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": mes.normal_code}data= heartdiseasedataforecast.getbyid(heartdiseasedataforecast, heartdiseasedataforecast, int(id_))for i in data:votenum=i.get('votenum')if votenum!=None:params={"id":int(id_),"votenum":votenum+1}error=heartdiseasedataforecast.updatebyparams(heartdiseasedataforecast,heartdiseasedataforecast,params)if error!=None:msg['code'] = crud_error_codemsg['msg'] = errorreturn JsonResponse(msg)def heartdiseasedataforecast_importExcel(request):if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": "成功", "data": {}}excel_file = request.FILES.get("file", "")file_type = excel_file.name.split('.')[1]if file_type in ['xlsx', 'xls']:data = xlrd.open_workbook(filename=None, file_contents=excel_file.read())table = data.sheets()[0]rows = table.nrowstry:for row in range(1, rows):row_values = table.row_values(row)req_dict = {}heartdiseasedataforecast.createbyreq(heartdiseasedataforecast, heartdiseasedataforecast, req_dict)except:passelse:msg = {"msg": "文件类型错误","code": 500}return JsonResponse(msg)def heartdiseasedataforecast_autoSort2(request):return JsonResponse({"code": 0, "msg": '', "data":{}})
1-项目均为博主学习开发自研,适合新手入门和学习使用
2-所有源码均一手开发,不是模版!不容易跟班里人重复!