当前位置: 首页 > news >正文

python+vue图书在线阅读推荐平台设计(源码+文档+调试+基础修改+答疑)

   

目录

一、整体目录:

项目包含源码、调试、修改教程、调试教程、讲解视频、开发文档(项目摘要、前言、技术介绍、可行性分析、流程图、结构图、ER属性图、数据库表结构信息、功能介绍、测试致谢等约1万字)

二、运行截图

三、代码部分(示范):

四、数据库表(示范):

数据库表有注释,可以导出数据字典及更新数据库时间,欢迎交流学习

五、项目技术栈:

六、项目调试学习(点击查看)

七、项目交流



数字化阅读趋势

随着互联网和移动设备的普及,数字化阅读已成为主流趋势。电子书、在线阅读平台的需求持续增长,用户期望通过更便捷的方式获取图书资源。Python和Vue技术栈的结合能够高效构建响应式、交互性强的在线阅读平台。

技术栈优势

Python在后端开发中具有高效的数据处理能力,适合处理图书分类、用户推荐算法等复杂逻辑。Vue.js作为前端框架,能够实现动态页面渲染和流畅的用户体验,两者结合可满足平台的高性能需求。

市场需求分析

传统实体书阅读存在携带不便、资源有限等问题,而在线阅读平台能提供海量资源、个性化推荐和跨设备同步功能。Python和Vue的灵活性允许快速迭代功能,如社交化阅读笔记、智能推荐等增值服务。

跨平台兼容性

Vue的响应式设计适配PC、平板和手机等多终端,Python后端提供统一的API支持。这种架构降低了开发维护成本,同时覆盖更广泛的用户群体。

一、整体目录:

项目包含源码、调试、修改教程、调试教程、讲解视频、开发文档(项目摘要、前言、技术介绍、可行性分析、流程图、结构图、ER属性图、数据库表结构信息、功能介绍、测试致谢等约1万字)

二、运行截图

三、代码部分(示范):

商品推荐、内容推荐算法

#coding:utf-8
__author__ = "ila"
import base64, copy, logging, os, sys, time, xlrd, json, datetime, configparser
from django.http import JsonResponse
from django.apps import apps
from django.db.models.aggregates import Count,Sum
from .models import yonghu
from util.codes import *
from util.auth import Auth
from util.common import Common
import util.message as mes
from django.db import connection
import random
from django.core.mail import send_mail
from django.conf import settings
from django.shortcuts import redirect
from django.db.models import Q
from util.baidubce_api import BaiDuBce
from .config_model import configdef yonghu_register(request):if request.method in ["POST", "GET"]:msg = {'code': normal_code, "msg": mes.normal_code}req_dict = request.session.get("req_dict")error = yonghu.createbyreq(yonghu, yonghu, req_dict)if error != None:msg['code'] = crud_error_codemsg['msg'] = "用户已存在,请勿重复注册!"return JsonResponse(msg)def yonghu_login(request):if request.method in ["POST", "GET"]:msg = {'code': normal_code, "msg": mes.normal_code}req_dict = request.session.get("req_dict")datas = yonghu.getbyparams(yonghu, yonghu, req_dict)if not datas:msg['code'] = password_error_codemsg['msg'] = mes.password_error_codereturn JsonResponse(msg)try:__sfsh__= yonghu.__sfsh__except:__sfsh__=Noneif  __sfsh__=='是':if datas[0].get('sfsh')!='是':msg['code']=other_codemsg['msg'] = "账号已锁定,请联系管理员审核!"return JsonResponse(msg)req_dict['id'] = datas[0].get('id')return Auth.authenticate(Auth, yonghu, req_dict)def yonghu_logout(request):if request.method in ["POST", "GET"]:msg = {"msg": "登出成功","code": 0}return JsonResponse(msg)def yonghu_resetPass(request):''''''if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": mes.normal_code}req_dict = request.session.get("req_dict")columns=  yonghu.getallcolumn( yonghu, yonghu)try:__loginUserColumn__= yonghu.__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=yonghu.getbyparams(yonghu, yonghu, recordsParam)if len(records)<1:msg['code'] = 400msg['msg'] = '用户不存在'return JsonResponse(msg)eval('''yonghu.objects.filter({}='{}').update({}='{}')'''.format(username_str,username,password_str,init_pwd))return JsonResponse(msg)def yonghu_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']  = yonghu.getbyparams(yonghu, yonghu, req_dict)[0]return JsonResponse(msg)def yonghu_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=yonghu.getbyparams(yonghu, yonghu, req_dict)if len(data)>0:msg['data']  = data[0]else:msg['data']  = {}return JsonResponse(msg)def yonghu_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")#获取全部列名columns=  yonghu.getallcolumn( yonghu, yonghu)#当前登录用户所在表tablename = request.session.get("tablename")#authColumn=list(__authTables__.keys())[0]#authTable=__authTables__.get(authColumn)# if authTable==tablename:#params = request.session.get("params")#req_dict[authColumn]=params.get(authColumn)'''__authSeparate__此属性为真,params添加userid,后台只查询个人数据'''try:__authSeparate__=yonghu.__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:pass#当项目属性hasMessage为”是”,生成系统自动生成留言板的表messages,同时该表的表属性hasMessage也被设置为”是”,字段包括userid(用户id),username(用户名),content(留言内容),reply(回复)#接口page需要区分权限,普通用户查看自己的留言和回复记录,管理员查看所有的留言和回复记录try:__hasMessage__=yonghu.__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 'yonghu' != 'forum':if req_dict.get("userid") and 'yonghu' != 'chat':del req_dict["userid"]else:#非管理员权限的表,判断当前表字段名是否有useridif tablename!="users" and 'yonghu'[:7]!='discuss'and "userid" in yonghu.getallcolumn(yonghu,yonghu):req_dict["userid"] = request.session.get("params").get("id")#当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的try:__authTables__=yonghu.__authTables__except:__authTables__=Noneif __authTables__!=None and  __authTables__!={} and __isAdmin__ == "是":try:del req_dict['userid']# tablename=request.session.get("tablename")# if tablename=="users":# del req_dict['userid']except:passfor 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']  =yonghu.page(yonghu, yonghu, req_dict, request, q)return JsonResponse(msg)def yonghu_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 yonghu.getallcolumn(yonghu,yonghu):req_dict['sort']='clicknum'elif "browseduration"  in yonghu.getallcolumn(yonghu,yonghu):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']  = yonghu.page(yonghu,yonghu, req_dict)return JsonResponse(msg)def yonghu_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")if req_dict.__contains__('vipread'):del req_dict['vipread']#获取全部列名columns=  yonghu.getallcolumn( yonghu, yonghu)#表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看try:__foreEndList__=yonghu.__foreEndList__except:__foreEndList__=Noneif __foreEndList__=="前要登":tablename=request.session.get("tablename")if tablename!="users" and 'userid' in columns:try:req_dict['userid']=request.session.get("params").get("id")except:pass#forrEndListAuthtry:__foreEndListAuth__=yonghu.__foreEndListAuth__except:__foreEndListAuth__=None#authSeparatetry:__authSeparate__=yonghu.__authSeparate__except:__authSeparate__=Noneif __foreEndListAuth__ =="是" and __authSeparate__=="是":tablename=request.session.get("tablename")if tablename!="users":req_dict['userid']=request.session.get("params",{"id":0}).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__=yonghu.__authTables__except:__authTables__=Noneif __authTables__!=None and  __authTables__!={} and __foreEndListAuth__=="是":try:del req_dict['userid']except:passfor authColumn,authTable in __authTables__.items():if authTable==tablename:params = request.session.get("params")req_dict[authColumn]=params.get(authColumn)username=params.get(authColumn)breakif yonghu.__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']  = yonghu.page(yonghu, yonghu, req_dict, request, q)return JsonResponse(msg)def yonghu_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=  yonghu.getallcolumn( yonghu, yonghu)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']error= yonghu.createbyreq(yonghu,yonghu, req_dict)if error!=None:msg['code'] = crud_error_codemsg['msg'] = errorreturn JsonResponse(msg)def yonghu_add(request):'''前台新增'''if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}req_dict = request.session.get("req_dict")#获取全部列名columns=  yonghu.getallcolumn( yonghu, yonghu)try:__authSeparate__=yonghu.__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__=yonghu.__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= yonghu.createbyreq(yonghu,yonghu, req_dict)if error!=None:msg['code'] = crud_error_codemsg['msg'] = errorreturn JsonResponse(msg)def yonghu_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=yonghu.getbyid(yonghu,yonghu,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 = yonghu.updatebyparams(yonghu,yonghu, update_dict)if error!=None:msg['code'] = crud_error_codemsg['msg'] = errorreturn JsonResponse(msg)def yonghu_info(request,id_):''''''if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}data = yonghu.getbyid(yonghu,yonghu, int(id_))if len(data)>0:msg['data']=data[0]if msg['data'].__contains__("reversetime"):msg['data']['reversetime'] = msg['data']['reversetime'].strftime("%Y-%m-%d %H:%M:%S")#浏览点击次数try:__browseClick__= yonghu.__browseClick__except:__browseClick__=Noneif __browseClick__=="是"  and  "clicknum"  in yonghu.getallcolumn(yonghu,yonghu):try:clicknum=int(data[0].get("clicknum",0))+1except:clicknum=0+1click_dict={"id":int(id_),"clicknum":clicknum}ret=yonghu.updatebyparams(yonghu,yonghu,click_dict)if ret!=None:msg['code'] = crud_error_codemsg['msg'] = retreturn JsonResponse(msg)def yonghu_detail(request,id_):''''''if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}data =yonghu.getbyid(yonghu,yonghu, int(id_))if len(data)>0:msg['data']=data[0]if msg['data'].__contains__("reversetime"):msg['data']['reversetime'] = msg['data']['reversetime'].strftime("%Y-%m-%d %H:%M:%S")#浏览点击次数try:__browseClick__= yonghu.__browseClick__except:__browseClick__=Noneif __browseClick__=="是"   and  "clicknum"  in yonghu.getallcolumn(yonghu,yonghu):try:clicknum=int(data[0].get("clicknum",0))+1except:clicknum=0+1click_dict={"id":int(id_),"clicknum":clicknum}ret=yonghu.updatebyparams(yonghu,yonghu,click_dict)if ret!=None:msg['code'] = crud_error_codemsg['msg'] = retforeturn JsonResponse(msg)def yonghu_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 req_dict.get("mima") and "mima" not in yonghu.getallcolumn(yonghu,yonghu) :del req_dict["mima"]if req_dict.get("password") and "password" not in yonghu.getallcolumn(yonghu,yonghu) :del req_dict["password"]try:del req_dict["clicknum"]except:passerror = yonghu.updatebyparams(yonghu, yonghu, req_dict)if error!=None:msg['code'] = crud_error_codemsg['msg'] = errorreturn JsonResponse(msg)def yonghu_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=yonghu.deletes(yonghu,yonghu,req_dict.get("ids"))if error!=None:msg['code'] = crud_error_codemsg['msg'] = errorreturn JsonResponse(msg)def yonghu_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= yonghu.getbyid(yonghu, yonghu, int(id_))for i in data:votenum=i.get('votenum')if votenum!=None:params={"id":int(id_),"votenum":votenum+1}error=yonghu.updatebyparams(yonghu,yonghu,params)if error!=None:msg['code'] = crud_error_codemsg['msg'] = errorreturn JsonResponse(msg)def yonghu_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 = {}yonghu.createbyreq(yonghu, yonghu, req_dict)except:passelse:msg = {"msg": "文件类型错误","code": 500}return JsonResponse(msg)def yonghu_sendemail(request):if request.method in ["POST", "GET"]:req_dict = request.session.get("req_dict")code = random.sample(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], 4)to = []to.append(req_dict['email'])send_mail('用户注册', '您的注册验证码是【'+''.join(code)+'】,请不要把验证码泄漏给其他人,如非本人请勿操作。', 'yclw9@qq.com', to, fail_silently = False)cursor = connection.cursor()cursor.execute("insert into emailregistercode(email,role,code) values('"+req_dict['email']+"','用户','"+''.join(code)+"')")msg = {"msg": "发送成功","code": 0}return JsonResponse(msg)def yonghu_autoSort2(request):return JsonResponse({"code": 0, "msg": '',  "data":{}})# (按值统计)时间统计类型
def yonghu_value(request, xColumnName, yColumnName, timeStatType):if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": "成功", "data": {}}where = ' where 1 = 1 'sql = ''if timeStatType == '日':sql = "SELECT DATE_FORMAT({0}, '%Y-%m-%d') {0}, sum({1}) total FROM yonghu {2} GROUP BY DATE_FORMAT({0}, '%Y-%m-%d') LIMIT 10".format(xColumnName, yColumnName, where, '%Y-%m-%d')if timeStatType == '月':sql = "SELECT DATE_FORMAT({0}, '%Y-%m') {0}, sum({1}) total FROM yonghu {2} GROUP BY DATE_FORMAT({0}, '%Y-%m') LIMIT 10".format(xColumnName, yColumnName, where, '%Y-%m')if timeStatType == '年':sql = "SELECT DATE_FORMAT({0}, '%Y') {0}, sum({1}) total FROM yonghu {2} GROUP BY DATE_FORMAT({0}, '%Y') LIMIT 10".format(xColumnName, yColumnName, where, '%Y')L = []cursor = connection.cursor()cursor.execute(sql)desc = cursor.descriptiondata_dict = [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()] for online_dict in data_dict:for key in online_dict:if 'datetime.datetime' in str(type(online_dict[key])):online_dict[key] = online_dict[key].strftime("%Y-%m-%d %H:%M:%S")else:passL.append(online_dict)msg['data'] = Lreturn JsonResponse(msg)# 按值统计
def yonghu_o_value(request, xColumnName, yColumnName):if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": "成功", "data": {}}where = ' where 1 = 1 'sql = "SELECT {0}, sum({1}) AS total FROM yonghu {2} GROUP BY {0} LIMIT 10".format(xColumnName, yColumnName, where)L = []cursor = connection.cursor()cursor.execute(sql)desc = cursor.descriptiondata_dict = [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()] for online_dict in data_dict:for key in online_dict:if 'datetime.datetime' in str(type(online_dict[key])):online_dict[key] = online_dict[key].strftime("%Y-%m-%d %H:%M:%S")else:passL.append(online_dict)msg['data'] = Lreturn JsonResponse(msg)# (按值统计)时间统计类型(多)
def yonghu_valueMul(request, xColumnName, timeStatType):if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": "成功", "data": []}req_dict = request.session.get("req_dict")where = ' where 1 = 1 'for item in req_dict['yColumnNameMul'].split(','):sql = ''if timeStatType == '日':sql = "SELECT DATE_FORMAT({0}, '%Y-%m-%d') {0}, sum({1}) total FROM yonghu {2} GROUP BY DATE_FORMAT({0}, '%Y-%m-%d') LIMIT 10".format(xColumnName, item, where, '%Y-%m-%d')if timeStatType == '月':sql = "SELECT DATE_FORMAT({0}, '%Y-%m') {0}, sum({1}) total FROM yonghu {2} GROUP BY DATE_FORMAT({0}, '%Y-%m') LIMIT 10".format(xColumnName, item, where, '%Y-%m')if timeStatType == '年':sql = "SELECT DATE_FORMAT({0}, '%Y') {0}, sum({1}) total FROM yonghu {2} GROUP BY DATE_FORMAT({0}, '%Y') LIMIT 10".format(xColumnName, item, where, '%Y')L = []cursor = connection.cursor()cursor.execute(sql)desc = cursor.descriptiondata_dict = [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()] for online_dict in data_dict:for key in online_dict:if 'datetime.datetime' in str(type(online_dict[key])):online_dict[key] = online_dict[key].strftime("%Y-%m-%d %H:%M:%S")else:passL.append(online_dict)msg['data'].append(L)return JsonResponse(msg)# (按值统计(多))
def yonghu_o_valueMul(request, xColumnName):if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": "成功", "data": []}req_dict = request.session.get("req_dict")where = ' where 1 = 1 'for item in req_dict['yColumnNameMul'].split(','):sql = "SELECT {0}, sum({1}) AS total FROM yonghu {2} GROUP BY {0} LIMIT 10".format(xColumnName, item, where)L = []cursor = connection.cursor()cursor.execute(sql)desc = cursor.descriptiondata_dict = [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()] for online_dict in data_dict:for key in online_dict:if 'datetime.datetime' in str(type(online_dict[key])):online_dict[key] = online_dict[key].strftime("%Y-%m-%d %H:%M:%S")else:passL.append(online_dict)msg['data'].append(L)return JsonResponse(msg)def yonghu_group(request, columnName):if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": "成功", "data": {}}where = ' where 1 = 1 'sql = "SELECT COUNT(*) AS total, " + columnName + " FROM yonghu " + where + " GROUP BY " + columnName + " LIMIT 10"L = []cursor = connection.cursor()cursor.execute(sql)desc = cursor.descriptiondata_dict = [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()] for online_dict in data_dict:for key in online_dict:if 'datetime.datetime' in str(type(online_dict[key])):online_dict[key] = online_dict[key].strftime("%Y-%m-%d")else:passL.append(online_dict)msg['data'] = Lreturn JsonResponse(msg)

数据库配置连接

[sql]
;support two sql,mysql and mssql,choice one
type = mysql
host = 127.0.0.1
port = 3306
user = root
passwd = 123456
db = djangod5jh7
charset = utf8
hasHadoop=是
[redis]
host = 127.0.0.1
port = 6379
passwd = 123456

四、数据库表(示范):

数据库表有注释,可以导出数据字典及更新数据库时间,欢迎交流学习

五、项目技术栈:

后端技术介绍:

Python + Django 技术介绍(极简版)
Python:高效、友好、全场景
解释型高级语言,语法简洁,开发速度 ≈ 2~5 倍于传统编译型语言
拥有 40w+ PyPI 第三方包,覆盖爬虫、AI、数据分析、运维自动化等全场景
跨平台(Windows / Linux / macOS),与 C/C++/Go 混合开发友好
Django:Python 最主流的全栈 Web 框架
诞生于 2005 年,开源、免费、BSD 协议
“电池 Included”——内置 ORM、Auth、Admin、缓存、国际化、RSS、OpenAPI 等 90% 常用功能
MTV(Model–Template–View)模式,天然 MVC 分层,代码结构清晰
自动化 ORM:支持 PostgreSQL、MySQL、SQLite、Oracle、SQL Server;一行代码可切换数据库
自带安全中间件:防 SQL 注入、XSS、CSRF、点击劫持、密码哈希等 7 大安全策略默认开启
水平扩展:无共享架构,兼容 uWSGI/Gunicorn + Nginx,支持 Docker、K8s、Serverless 一键部署
性能:单核 QPS 2k+(纯业务逻辑),配合缓存/异步任务可线性扩展
生态:Django REST framework 一键生成 RESTful API;Celery 做异步任务;Channels 支持 WebSocket
版本节奏:LTS 每 2 年发布一次(如 4.2 LTS 支持到 2026),升级路径平滑,企业可长期维护
适用场景
企业门户、CMS、电商、数据中台、IoT 后台、DevOps 工具链、AI 模型服务封装
原型验证 → 生产上线全程同一套代码,节省 30%–50% 研发人力
一句话总结
“用 Python 写业务,用 Django 做网站”——让团队在几天而不是几周内交付可扩展、可维护、可演进的 Web 系统。

前端技术栈:
Vue.js:使用Vue.js作为前端框架,实现组件化开发,提高开发效率。
Vue Router:用于实现前端路由功能,实现单页应用的页面跳转。
Vuex:用于实现前端状态管理,统一管理应用的状态。
Element UI:使用Element UI作为UI组件库,提供丰富的UI组件,加快开发速度。
Axios:用于发送HTTP请求,与后端进行数据交互。
HTML/CSS/JavaScript:用于构建系统的用户界面。HTML 负责网页的结构布局,CSS 负责样式设计,JavaScript 负责交互逻辑的实现。在系统中,这些技术用于实现前端页面的展示和交互功能,提高用户体验。

    六、项目调试学习点击查看

    七、更多项目展示

    大屏可视化项目

    基于django的财经新闻文本挖掘分析与可视化应用
    基于Python的沧州地区空气质量数据分析及可视化
    django基于大数据的房价数据分析
    基丁Python的个性化电影推荐系统的设计与实现
    django基于Python的热门旅游景点数据分析系统的设计与实现
    django基于协同过滤的图书推荐系统的设计与实现
    django基于Spark的国漫推荐系统的设计与实现
    django基于大数据的学习资源推送系统的设计与实现
    django基于协同过滤算法的小说推荐系统
    python基于爬虫的个性化书籍推荐系统
    python基于Flask的电影论坛
    django基于python的影片数据爬取与数据分析
    django基丁Python可视化的学习系统的设计与实现
    django基于协同过滤算法的招聘信息推荐系统

     

    更专业的页面设计

    八、欢迎项目交流

    http://www.dtcms.com/a/532837.html

    相关文章:

  • git仓库基本使用
  • 网站维护需要多久时间上海做网站建设公司排名
  • 在婚恋网站上做红娘怎么样什么都可以看的浏览器
  • 做平台网站要什么条件重庆网站建设重庆网站设计
  • 江苏系统建站怎么用咖啡网页设计素材
  • 网站建设软件免费使用密码访问wordpress文章
  • 物联网设备通信协议参数的能耗自适应调整机制
  • PySide6 win10 记事本从零到一——前言
  • win7 iis网站无法显示石家庄尚武科技
  • 建设网站哪家公司好网站建设公司招聘
  • UFS Reset 介绍
  • ESP8266无线开关
  • 生鲜电商网站建设一共有多少网站
  • 泰州网站建设案例海淘网站主要关键词
  • 网站 第三方登录做公众号用什么网站吗
  • 【FPGA】三八译码器——板级验证
  • Bugku-Web题目-charlottesweb- WolvCTF 2023
  • TCMalloc原理解析(下)
  • 短波红外相机入门核心场景和选型要求
  • centos做网站服务器吗南京品牌网站设计
  • 【Qt】启动新窗口--C/S传输信息
  • vf建设银行网站wordpress根据点击量最高查询文章
  • 统一日志管理架构设计
  • 綦江网站网站seo找准隐迅推
  • 建设网站前准备资料微信如何注册小程序
  • 解释无损极化,有损极化;纯电容电流-无损极化,吸收电流-有损极化
  • 2.2.1.5 大数据方法论与实践指南-产品复盘文档模板
  • 第六章:感知篇 - 语音活动检测:让助手知道“你何时在说话”
  • 抖音实名信息转移实操指南:原账号可登录场景下的安全操作方案
  • Git 学习打卡