博主介绍:
✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W+粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台的优质作者。通过长期分享和实战指导,我致力于帮助更多学生完成毕业项目和技术提升。技术范围:
我熟悉的技术领域涵盖SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等方面的设计与开发。如果你有任何技术难题,我都乐意与你分享解决方案。主要内容:
我的服务内容包括:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文撰写与辅导、论文降重、长期答辩答疑辅导。我还提供腾讯会议一对一的专业讲解和模拟答辩演练,帮助你全面掌握答辩技巧与代码逻辑。🍅获取源码请在文末联系我🍅
温馨提示:文末有 CSDN 平台官方提供的阿龙联系方式的名片!
温馨提示:文末有 CSDN 平台官方提供的阿龙联系方式的名片!
2 核心技术介绍
2.1 mysql技术介绍
在基于Python的车牌识别管理系统中,数据的存储、检索和管理是系统运行的基础。MySQL,作为一种广泛使用的开源关系型数据库管理系统,因其高性能、高可靠性以及易用性,在此类系统中发挥着核心作用。MySQL支持多用户和多线程的数据库环境,非常适合处理大数据量的应用程序。它不仅可以在多种操作系统上运行,如Linux、Windows等,还提供了丰富的数据类型支持,使得开发人员能够灵活地处理各种数据,从文本、日期到二进制等[6]。
MySQL数据库在安装和配置上极为方便,同时支持多种语言接口,包括Python,这使得Python开发者可以轻松实现对MySQL数据库的连接和操作。在车牌识别管理系统中,MySQL用于存储用户信息、车辆信息、停车记录等关键数据,通过高效的索引机制,确保了数据的快速检索和高效管理。此外,MySQL的事务处理功能保证了数据操作的一致性和完整性,对于处理支付、用户注册等需要高度一致性的操作尤为重要。
为了方便数据库管理和维护,MySQL提供了包括命令行工具和图形界面工具在内的多种管理方式,如MySQL Workbench。这些工具不仅可以帮助开发人员进行数据库设计、查询优化,还能进行性能监控和安全管理,极大地提升了开发和维护效率。
2.3 Django框架简介
Django框架,作为基于Python的开放源代码Web应用框架,以其强大的功能和灵活性在Web开发领域广受欢迎。Django遵循“不重复自己”(DRY)的设计哲学和“快速开发”的原则,致力于简化Web应用的开发过程,使得开发者能够从繁琐的编码工作中解脱出来,专注于应用的开发[7]。
在基于Python的车牌识别管理系统中,Django框架的使用极大地提升了开发效率。Django提供了一个全功能的MVC框架,这不仅帮助开发者以清晰的逻辑分离数据、表示层和控制层,而且还内置了丰富的中间件支持,允许快速地开发出安全、可维护、可扩展的Web应用程序。
Django还提供了自动化的管理界面,仅需少量配置即可生成一个具有数据创建、读取、更新和删除功能的后台管理系统,极大简化了系统管理任务。对于需要管理大量数据和提供用户管理界面的车牌识别管理系统来说,这一特性极大地降低了开发工作量和复杂性。
2.4 Python技术简介
Python,作为一种高级编程语言,以其简洁明了的语法和强大的功能在全球编程社区中享有盛名。这种语言的设计哲学强调代码的可读性和简洁性,使得Python成为初学者和专业开发者都喜爱的工具。Python支持多种编程范式,包括面向对象、命令式、函数式和过程式编程,使其应用范围广泛,从Web开发、数据分析、人工智能到科学计算等各个领域[8]。
特别是在车牌识别这一功能上,Python通过调用OpenCV等库进行图像的处理和分析,可以有效地实现车牌的识别和信息提取。此外,结合Django框架,Python能够快速搭建起系统的Web平台,实现数据的管理、查询和展示。MySQL数据库的使用进一步强化了数据存储的安全性和高效性,使得整个车牌识别管理系统既能够高效运行,又便于维护和扩展。
Python的跨平台特性使得基于Python的车牌识别管理系统能够在Windows、Linux、MacOS等多种操作系统上无缝运行,提供了良好的用户体验和系统可用性。Python技术在本系统中不仅作为核心编程语言,其丰富的库和框架支持,更是为系统的开发和实现提供了强大的技术保障。
4.1 系统总功能结构设计
系统按照用户的实际需求开发而来,贴近生活。从管理员通过正确的账号的密码进入系统,可以使用相关的系统应用。管理员总体负责整体系统的运行维护,统筹协调。
系统整体模块设计:系统分为管理员和用户,系统管理员有最大的权限,整体功能展示如图4.1所示。
图4.1 系统整体功能图
4.2 建立概念性数据模型
利用数据模型可以表示不同的类,概念性模型没有固定的模型,因此用户可以按照自己的想法进行建立概念性数据模型。概念模型可以用E.R图表示,E.R图又称为数据模型。本车牌识别管理系统有着大量的数据,因此需要建立数据模型,根据前面对系统的分析可以得出系统的E.R图如下:
图4.1 用户信息实体
图4.2 管理员信息实体
图4.3 停车场公告信息实体
核心识别代码介绍:
#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 django.db.models import Case, When, IntegerField, F
from django.forms import model_to_dict
from .models import huiyuandingdan
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 alipay import AliPayConfig, AliPay
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 huiyuandingdan_register(request):if request.method in ["POST", "GET"]:msg = {'code': normal_code, "msg": mes.normal_code}req_dict = request.session.get("req_dict")error = huiyuandingdan.createbyreq(huiyuandingdan, huiyuandingdan, req_dict)if error != None:msg['code'] = crud_error_codemsg['msg'] = "用户已存在,请勿重复注册!"return JsonResponse(msg)def huiyuandingdan_login(request):if request.method in ["POST", "GET"]:msg = {'code': normal_code, "msg": mes.normal_code}req_dict = request.session.get("req_dict")datas = huiyuandingdan.getbyparams(huiyuandingdan, huiyuandingdan, req_dict)if not datas:msg['code'] = password_error_codemsg['msg'] = mes.password_error_codereturn JsonResponse(msg)try:__sfsh__= huiyuandingdan.__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, huiyuandingdan, req_dict)def huiyuandingdan_logout(request):if request.method in ["POST", "GET"]:msg = {"msg": "登出成功","code": 0}return JsonResponse(msg)def huiyuandingdan_resetPass(request):''''''if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": mes.normal_code}req_dict = request.session.get("req_dict")columns= huiyuandingdan.getallcolumn( huiyuandingdan, huiyuandingdan)try:__loginUserColumn__= huiyuandingdan.__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=huiyuandingdan.getbyparams(huiyuandingdan, huiyuandingdan, recordsParam)if len(records)<1:msg['code'] = 400msg['msg'] = '用户不存在'return JsonResponse(msg)eval('''huiyuandingdan.objects.filter({}='{}').update({}='{}')'''.format(username_str,username,password_str,init_pwd))return JsonResponse(msg)def huiyuandingdan_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'] = huiyuandingdan.getbyparams(huiyuandingdan, huiyuandingdan, req_dict)[0]return JsonResponse(msg)def huiyuandingdan_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=huiyuandingdan.getbyparams(huiyuandingdan, huiyuandingdan, req_dict)if len(data)>0:msg['data'] = data[0]else:msg['data'] = {}return JsonResponse(msg)def huiyuandingdan_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 huiyuandingdan#获取全部列名columns= huiyuandingdan.getallcolumn( huiyuandingdan, huiyuandingdan)if "vipread" in req_dict and "vipread" not in columns:del req_dict["vipread"]#当前登录用户所在表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__=huiyuandingdan.__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__=huiyuandingdan.__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 'huiyuandingdan' != 'forum':if req_dict.get("userid") and 'huiyuandingdan' != 'chat':del req_dict["userid"]else:#非管理员权限的表,判断当前表字段名是否有useridif tablename!="users" and 'huiyuandingdan'[:7]!='discuss'and "userid" in huiyuandingdan.getallcolumn(huiyuandingdan,huiyuandingdan):req_dict["userid"] = request.session.get("params").get("id")#当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的try:__authTables__=huiyuandingdan.__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)breakif tablename == 'yonghu':from .models import yonghureq_dict['yonghuzhanghao'] = request.session.get("params").get(yonghu.__loginUserColumn__)if 'userid' in req_dict.keys():del req_dict["userid"]q = Q()msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \msg['data']['pageSize'] =huiyuandingdan.page(huiyuandingdan, huiyuandingdan, req_dict, request, q)return JsonResponse(msg)def huiyuandingdan_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 huiyuandingdan.getallcolumn(huiyuandingdan,huiyuandingdan):req_dict['sort']='clicknum'elif "browseduration" in huiyuandingdan.getallcolumn(huiyuandingdan,huiyuandingdan):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'] = huiyuandingdan.page(huiyuandingdan,huiyuandingdan, req_dict)return JsonResponse(msg)#分类列表
def huiyuandingdan_lists(request):if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": mes.normal_code, "data":[]}msg['data'],_,_,_,_ = huiyuandingdan.page(huiyuandingdan, huiyuandingdan, {})return JsonResponse(msg)def huiyuandingdan_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= huiyuandingdan.getallcolumn( huiyuandingdan, huiyuandingdan)if "vipread" in req_dict and "vipread" not in columns:del req_dict["vipread"]#表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看try:__foreEndList__=huiyuandingdan.__foreEndList__except:__foreEndList__=Nonetry:__foreEndListAuth__=huiyuandingdan.__foreEndListAuth__except:__foreEndListAuth__=None#authSeparatetry:__authSeparate__=huiyuandingdan.__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__=huiyuandingdan.__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 huiyuandingdan.__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'] = huiyuandingdan.page(huiyuandingdan, huiyuandingdan, req_dict, request, q)return JsonResponse(msg)def huiyuandingdan_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= huiyuandingdan.getallcolumn( huiyuandingdan, huiyuandingdan)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= huiyuandingdan.createbyreq(huiyuandingdan,huiyuandingdan, req_dict)if error!=None:msg['code'] = crud_error_codemsg['msg'] = errorreturn JsonResponse(msg)def huiyuandingdan_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= huiyuandingdan.getallcolumn( huiyuandingdan, huiyuandingdan)try:__authSeparate__=huiyuandingdan.__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__=huiyuandingdan.__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= huiyuandingdan.createbyreq(huiyuandingdan,huiyuandingdan, req_dict)if error!=None:msg['code'] = crud_error_codemsg['msg'] = errorreturn JsonResponse(msg)def huiyuandingdan_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=huiyuandingdan.getbyid(huiyuandingdan,huiyuandingdan,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 = huiyuandingdan.updatebyparams(huiyuandingdan,huiyuandingdan, update_dict)if error!=None:msg['code'] = crud_error_codemsg['msg'] = errorreturn JsonResponse(msg)def huiyuandingdan_info(request,id_):''''''if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}data = huiyuandingdan.getbyid(huiyuandingdan,huiyuandingdan, 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__= huiyuandingdan.__browseClick__except:__browseClick__=Noneif __browseClick__=="是" and "clicknum" in huiyuandingdan.getallcolumn(huiyuandingdan,huiyuandingdan):try:clicknum=int(data[0].get("clicknum",0))+1except:clicknum=0+1click_dict={"id":int(id_),"clicknum":clicknum,"clicktime":datetime.datetime.now()}ret=huiyuandingdan.updatebyparams(huiyuandingdan,huiyuandingdan,click_dict)if ret!=None:msg['code'] = crud_error_codemsg['msg'] = retreturn JsonResponse(msg)def huiyuandingdan_detail(request,id_):''''''if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}data =huiyuandingdan.getbyid(huiyuandingdan,huiyuandingdan, 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__= huiyuandingdan.__browseClick__except:__browseClick__=Noneif __browseClick__=="是" and "clicknum" in huiyuandingdan.getallcolumn(huiyuandingdan,huiyuandingdan):try:clicknum=int(data[0].get("clicknum",0))+1except:clicknum=0+1click_dict={"id":int(id_),"clicknum":clicknum,"clicktime":datetime.datetime.now()}ret=huiyuandingdan.updatebyparams(huiyuandingdan,huiyuandingdan,click_dict)if ret!=None:msg['code'] = crud_error_codemsg['msg'] = retreturn JsonResponse(msg)def huiyuandingdan_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 huiyuandingdan.getallcolumn(huiyuandingdan,huiyuandingdan) :del req_dict["mima"]if req_dict.get("password") and "password" not in huiyuandingdan.getallcolumn(huiyuandingdan,huiyuandingdan) :del req_dict["password"]try:del req_dict["clicknum"]except:passerror = huiyuandingdan.updatebyparams(huiyuandingdan, huiyuandingdan, req_dict)if error!=None:msg['code'] = crud_error_codemsg['msg'] = errorreturn JsonResponse(msg)def huiyuandingdan_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=huiyuandingdan.deletes(huiyuandingdan,huiyuandingdan,req_dict.get("ids"))if error!=None:msg['code'] = crud_error_codemsg['msg'] = errorreturn JsonResponse(msg)def huiyuandingdan_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= huiyuandingdan.getbyid(huiyuandingdan, huiyuandingdan, int(id_))for i in data:votenum=i.get('votenum')if votenum!=None:params={"id":int(id_),"votenum":votenum+1}error=huiyuandingdan.updatebyparams(huiyuandingdan,huiyuandingdan,params)if error!=None:msg['code'] = crud_error_codemsg['msg'] = errorreturn JsonResponse(msg)def huiyuandingdan_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 = {}huiyuandingdan.createbyreq(huiyuandingdan, huiyuandingdan, req_dict)except:passelse:msg = {"msg": "文件类型错误","code": 500}return JsonResponse(msg)def huiyuandingdan_autoSort2(request):return JsonResponse({"code": 0, "msg": '', "data":{}})# (按值统计)时间统计类型
def huiyuandingdan_value(request, xColumnName, yColumnName, timeStatType):if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": "成功", "data": {}}where = ' where 1 = 1 'token = request.META.get('HTTP_TOKEN')decode_str = eval(base64.b64decode(token).decode("utf8"))if decode_str['tablename'] == 'yonghu':where = where + " and yonghuzhanghao ='{0}' ".format(decode_str['params']['yonghuzhanghao'])sql = ''if timeStatType == '日':sql = "SELECT DATE_FORMAT({0}, '%Y-%m-%d') {0}, sum({1}) total FROM huiyuandingdan {2} GROUP BY DATE_FORMAT({0}, '%Y-%m-%d')".format(xColumnName, yColumnName, where, '%Y-%m-%d')if timeStatType == '月':sql = "SELECT DATE_FORMAT({0}, '%Y-%m') {0}, sum({1}) total FROM huiyuandingdan {2} GROUP BY DATE_FORMAT({0}, '%Y-%m')".format(xColumnName, yColumnName, where, '%Y-%m')if timeStatType == '年':sql = "SELECT DATE_FORMAT({0}, '%Y') {0}, sum({1}) total FROM huiyuandingdan {2} GROUP BY DATE_FORMAT({0}, '%Y')".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 huiyuandingdan_o_value(request, xColumnName, yColumnName):if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": "成功", "data": {}}where = ' where 1 = 1 'token = request.META.get('HTTP_TOKEN')decode_str = eval(base64.b64decode(token).decode("utf8"))if decode_str['tablename'] == 'yonghu':where = where + " and yonghuzhanghao ='{0}' ".format(decode_str['params']['yonghuzhanghao'])sql = "SELECT {0}, sum({1}) AS total FROM huiyuandingdan {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 huiyuandingdan_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 'token = request.META.get('HTTP_TOKEN')decode_str = eval(base64.b64decode(token).decode("utf8"))if decode_str['tablename'] == 'yonghu':where = where + " and yonghuzhanghao ='{0}' ".format(decode_str['params']['yonghuzhanghao'])for item in req_dict['yColumnNameMul'].split(','):sql = ''if timeStatType == '日':sql = "SELECT DATE_FORMAT({0}, '%Y-%m-%d') {0}, sum({1}) total FROM huiyuandingdan {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 huiyuandingdan {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 huiyuandingdan {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 huiyuandingdan_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 'token = request.META.get('HTTP_TOKEN')decode_str = eval(base64.b64decode(token).decode("utf8"))if decode_str['tablename'] == 'yonghu':where = where + " and yonghuzhanghao ='{0}' ".format(decode_str['params']['yonghuzhanghao'])for item in req_dict['yColumnNameMul'].split(','):sql = "SELECT {0}, sum({1}) AS total FROM huiyuandingdan {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 huiyuandingdan_alipay(request):if request.method in ["POST", "GET"]:alipay = AliPay(appid=settings.ALIPAY_APP_ID,app_notify_url=None,app_private_key_string=settings.APP_PRIVATE_KEY_STRING,alipay_public_key_string=settings.ALIPAY_PUBLIC_KEY_STRING,sign_type=settings.ALIPAY_SIGN_TYPE,debug=True,config=AliPayConfig(timeout=15))req_dict = request.session.get("req_dict")order_string = alipay.api_alipay_trade_page_pay(out_trade_no=req_dict['tradeno'],total_amount=req_dict['totalamount'],subject=req_dict['subject'],return_url='http://localhost:8080/django1445avyj/huiyuandingdan/notify',#notify_url='')pay_url = 'https://openapi-sandbox.dl.alipaydev.com/gateway.do?' + order_stringpay_url = '<form name="punchout_form" method="post" action="{0}"><input type="hidden" name="biz_content" ><input type="submit" value="立即支付" style="display: none"></form>'.format(pay_url)return JsonResponse({'code': 0, "data": pay_url})def huiyuandingdan_notify(request):if request.method in ["POST", "GET"]:req_dict = request.session.get("req_dict")out_trade_no = req_dict['out_trade_no']cursor = connection.cursor()cursor.execute("update huiyuandingdan set ispay='已支付' where dingdanbianhao = '{0}'".format(out_trade_no))return redirect('http://localhost:8080/django1445avyj/admin/dist/index.html#/huiyuandingdan')def huiyuandingdan_group(request, columnName):if request.method in ["POST", "GET"]:msg = {"code": normal_code, "msg": "成功", "data": {}}where = ' where 1 = 1 'token = request.META.get('HTTP_TOKEN')decode_str = eval(base64.b64decode(token).decode("utf8"))if decode_str['tablename'] == 'yonghu':where = where + " and yonghuzhanghao ='{0}' ".format(decode_str['params']['yonghuzhanghao'])sql = "SELECT COUNT(*) AS total, " + columnName + " FROM huiyuandingdan " + where + " GROUP BY " + columnNameL = []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)
为什么选择我(我可以给你的定制项目推荐核心功能,一对一推荐)实现定制!!!
博主提供的项目均为博主自己收集和开发的!所有的源码都经由博主检验过,能过正常启动并且功能都没有问题!同学们拿到后就能使用!且博主自身就是高级开发,可以将所有的代码都清晰讲解出来。
源码获取
文章下方名片联系我即可~
大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻
精彩专栏推荐订阅:在下方专栏