From bdabcbff195efc393e7adad976144055cea77f1d Mon Sep 17 00:00:00 2001 From: robert <6708314@qq.com> Date: Thu, 1 Sep 2022 17:41:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=B7=A5=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/Cheweileixing_v.py | 522 -------------- src/main/Cheweiweihu_v.py | 522 -------------- src/main/Cheweixinxi_v.py | 522 -------------- src/main/Chuchangjiaofei_v.py | 522 -------------- src/main/Huiyuan_v.py | 522 -------------- src/main/Messages_v.py | 522 -------------- src/main/News_v.py | 522 -------------- src/main/Ruchangtingche_v.py | 522 -------------- src/main/Storeup_v.py | 522 -------------- src/main/__init__.py | 1 - .../Cheweileixing_v.cpython-37.pyc | Bin 10720 -> 0 bytes .../Cheweileixing_v.cpython-38.pyc | Bin 10319 -> 0 bytes .../__pycache__/Cheweiweihu_v.cpython-37.pyc | Bin 10682 -> 0 bytes .../__pycache__/Cheweiweihu_v.cpython-38.pyc | Bin 10281 -> 0 bytes .../__pycache__/Cheweixinxi_v.cpython-37.pyc | Bin 10682 -> 0 bytes .../__pycache__/Cheweixinxi_v.cpython-38.pyc | Bin 10281 -> 0 bytes .../Chuchangjiaofei_v.cpython-37.pyc | Bin 10758 -> 0 bytes .../Chuchangjiaofei_v.cpython-38.pyc | Bin 10357 -> 0 bytes src/main/__pycache__/Huiyuan_v.cpython-37.pyc | Bin 10606 -> 0 bytes src/main/__pycache__/Huiyuan_v.cpython-38.pyc | Bin 10205 -> 0 bytes .../__pycache__/Messages_v.cpython-37.pyc | Bin 10625 -> 0 bytes .../__pycache__/Messages_v.cpython-38.pyc | Bin 10224 -> 0 bytes src/main/__pycache__/News_v.cpython-37.pyc | Bin 10549 -> 0 bytes src/main/__pycache__/News_v.cpython-38.pyc | Bin 10148 -> 0 bytes .../Ruchangtingche_v.cpython-37.pyc | Bin 10739 -> 0 bytes .../Ruchangtingche_v.cpython-38.pyc | Bin 10338 -> 0 bytes src/main/__pycache__/Storeup_v.cpython-37.pyc | Bin 10606 -> 0 bytes src/main/__pycache__/Storeup_v.cpython-38.pyc | Bin 10205 -> 0 bytes src/main/__pycache__/__init__.cpython-37.pyc | Bin 176 -> 0 bytes src/main/__pycache__/__init__.cpython-38.pyc | Bin 196 -> 0 bytes src/main/__pycache__/admin.cpython-37.pyc | Bin 923 -> 0 bytes src/main/__pycache__/admin.cpython-38.pyc | Bin 939 -> 0 bytes src/main/__pycache__/apps.cpython-37.pyc | Bin 407 -> 0 bytes src/main/__pycache__/apps.cpython-38.pyc | Bin 431 -> 0 bytes .../__pycache__/config_model.cpython-37.pyc | Bin 733 -> 0 bytes .../__pycache__/config_model.cpython-38.pyc | Bin 761 -> 0 bytes src/main/__pycache__/config_v.cpython-37.pyc | Bin 3244 -> 0 bytes src/main/__pycache__/config_v.cpython-38.pyc | Bin 2999 -> 0 bytes src/main/__pycache__/model.cpython-37.pyc | Bin 15770 -> 0 bytes src/main/__pycache__/model.cpython-38.pyc | Bin 15699 -> 0 bytes src/main/__pycache__/models.cpython-37.pyc | Bin 8605 -> 0 bytes src/main/__pycache__/models.cpython-38.pyc | Bin 7754 -> 0 bytes src/main/__pycache__/schema_v.cpython-37.pyc | Bin 10501 -> 0 bytes src/main/__pycache__/schema_v.cpython-38.pyc | Bin 10348 -> 0 bytes src/main/__pycache__/urls.cpython-37.pyc | Bin 4038 -> 0 bytes src/main/__pycache__/urls.cpython-38.pyc | Bin 4114 -> 0 bytes .../__pycache__/users_model.cpython-37.pyc | Bin 852 -> 0 bytes .../__pycache__/users_model.cpython-38.pyc | Bin 880 -> 0 bytes src/main/__pycache__/users_v.cpython-37.pyc | Bin 3896 -> 0 bytes src/main/__pycache__/users_v.cpython-38.pyc | Bin 3742 -> 0 bytes src/main/admin.py | 31 - src/main/apps.py | 6 - src/main/config_model.py | 21 - src/main/config_v.py | 131 ---- src/main/migrations/0001_initial.py | 219 ------ src/main/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-38.pyc | Bin 4461 -> 0 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 164 -> 0 bytes src/main/model.py | 647 ------------------ src/main/models.py | 325 --------- src/main/schema_v.py | 499 -------------- src/main/tests.py | 3 - src/main/urls.py | 148 ---- src/main/users_model.py | 22 - src/main/users_v.py | 161 ----- src/main/views.py | 3 - 66 files changed, 6915 deletions(-) delete mode 100644 src/main/Cheweileixing_v.py delete mode 100644 src/main/Cheweiweihu_v.py delete mode 100644 src/main/Cheweixinxi_v.py delete mode 100644 src/main/Chuchangjiaofei_v.py delete mode 100644 src/main/Huiyuan_v.py delete mode 100644 src/main/Messages_v.py delete mode 100644 src/main/News_v.py delete mode 100644 src/main/Ruchangtingche_v.py delete mode 100644 src/main/Storeup_v.py delete mode 100644 src/main/__init__.py delete mode 100644 src/main/__pycache__/Cheweileixing_v.cpython-37.pyc delete mode 100644 src/main/__pycache__/Cheweileixing_v.cpython-38.pyc delete mode 100644 src/main/__pycache__/Cheweiweihu_v.cpython-37.pyc delete mode 100644 src/main/__pycache__/Cheweiweihu_v.cpython-38.pyc delete mode 100644 src/main/__pycache__/Cheweixinxi_v.cpython-37.pyc delete mode 100644 src/main/__pycache__/Cheweixinxi_v.cpython-38.pyc delete mode 100644 src/main/__pycache__/Chuchangjiaofei_v.cpython-37.pyc delete mode 100644 src/main/__pycache__/Chuchangjiaofei_v.cpython-38.pyc delete mode 100644 src/main/__pycache__/Huiyuan_v.cpython-37.pyc delete mode 100644 src/main/__pycache__/Huiyuan_v.cpython-38.pyc delete mode 100644 src/main/__pycache__/Messages_v.cpython-37.pyc delete mode 100644 src/main/__pycache__/Messages_v.cpython-38.pyc delete mode 100644 src/main/__pycache__/News_v.cpython-37.pyc delete mode 100644 src/main/__pycache__/News_v.cpython-38.pyc delete mode 100644 src/main/__pycache__/Ruchangtingche_v.cpython-37.pyc delete mode 100644 src/main/__pycache__/Ruchangtingche_v.cpython-38.pyc delete mode 100644 src/main/__pycache__/Storeup_v.cpython-37.pyc delete mode 100644 src/main/__pycache__/Storeup_v.cpython-38.pyc delete mode 100644 src/main/__pycache__/__init__.cpython-37.pyc delete mode 100644 src/main/__pycache__/__init__.cpython-38.pyc delete mode 100644 src/main/__pycache__/admin.cpython-37.pyc delete mode 100644 src/main/__pycache__/admin.cpython-38.pyc delete mode 100644 src/main/__pycache__/apps.cpython-37.pyc delete mode 100644 src/main/__pycache__/apps.cpython-38.pyc delete mode 100644 src/main/__pycache__/config_model.cpython-37.pyc delete mode 100644 src/main/__pycache__/config_model.cpython-38.pyc delete mode 100644 src/main/__pycache__/config_v.cpython-37.pyc delete mode 100644 src/main/__pycache__/config_v.cpython-38.pyc delete mode 100644 src/main/__pycache__/model.cpython-37.pyc delete mode 100644 src/main/__pycache__/model.cpython-38.pyc delete mode 100644 src/main/__pycache__/models.cpython-37.pyc delete mode 100644 src/main/__pycache__/models.cpython-38.pyc delete mode 100644 src/main/__pycache__/schema_v.cpython-37.pyc delete mode 100644 src/main/__pycache__/schema_v.cpython-38.pyc delete mode 100644 src/main/__pycache__/urls.cpython-37.pyc delete mode 100644 src/main/__pycache__/urls.cpython-38.pyc delete mode 100644 src/main/__pycache__/users_model.cpython-37.pyc delete mode 100644 src/main/__pycache__/users_model.cpython-38.pyc delete mode 100644 src/main/__pycache__/users_v.cpython-37.pyc delete mode 100644 src/main/__pycache__/users_v.cpython-38.pyc delete mode 100644 src/main/admin.py delete mode 100644 src/main/apps.py delete mode 100644 src/main/config_model.py delete mode 100644 src/main/config_v.py delete mode 100644 src/main/migrations/0001_initial.py delete mode 100644 src/main/migrations/__init__.py delete mode 100644 src/main/migrations/__pycache__/0001_initial.cpython-38.pyc delete mode 100644 src/main/migrations/__pycache__/__init__.cpython-38.pyc delete mode 100644 src/main/model.py delete mode 100644 src/main/models.py delete mode 100644 src/main/schema_v.py delete mode 100644 src/main/tests.py delete mode 100644 src/main/urls.py delete mode 100644 src/main/users_model.py delete mode 100644 src/main/users_v.py delete mode 100644 src/main/views.py diff --git a/src/main/Cheweileixing_v.py b/src/main/Cheweileixing_v.py deleted file mode 100644 index d6af656..0000000 --- a/src/main/Cheweileixing_v.py +++ /dev/null @@ -1,522 +0,0 @@ -#coding:utf-8 -__author__ = "ila" -import copy -from django.http import JsonResponse -from django.apps import apps -from django.db.models.aggregates import Count,Sum -from .models import cheweileixing -from util.codes import * -from util.auth import Auth -import util.message as mes - -def cheweileixing_register(request): - if request.method in ["POST", "GET"]: - msg = {'code': normal_code, "msg": mes.normal_code} - req_dict = request.session.get("req_dict") - - error = cheweileixing.createbyreq(cheweileixing, cheweileixing, req_dict) - if error != None: - msg['code'] = crud_error_code - msg['msg'] = "用户已存在,请勿重复注册!" - return JsonResponse(msg) - -def cheweileixing_login(request): - if request.method in ["POST", "GET"]: - msg = {'code': normal_code, "msg": mes.normal_code} - req_dict = request.session.get("req_dict") - - datas = cheweileixing.getbyparams(cheweileixing, cheweileixing, req_dict) - if not datas: - msg['code'] = password_error_code - msg['msg'] = mes.password_error_code - return JsonResponse(msg) - try: - __sfsh__= cheweileixing.__sfsh__ - except: - __sfsh__=None - - if __sfsh__=='是': - if datas[0].get('sfsh')=='否': - msg['code']=other_code - msg['msg'] = "账号已锁定,请联系管理员审核!" - return JsonResponse(msg) - - req_dict['id'] = datas[0].get('id') - return Auth.authenticate(Auth, cheweileixing, req_dict) - - -def cheweileixing_logout(request): - if request.method in ["POST", "GET"]: - msg = { - "msg": "登出成功", - "code": 0 - } - - return JsonResponse(msg) - - -def cheweileixing_resetPass(request): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code} - - req_dict = request.session.get("req_dict") - - error = cheweileixing.updatebyparams(cheweileixing,cheweileixing, req_dict) - - if error != None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - - -def cheweileixing_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'] = cheweileixing.getbyparams(cheweileixing, cheweileixing, req_dict)[0] - - return JsonResponse(msg) - - -def cheweileixing_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=cheweileixing.getbyparams(cheweileixing, cheweileixing, req_dict) - if len(data)>0: - msg['data'] = data[0] - else: - msg['data'] = {} - return JsonResponse(msg) - -def cheweileixing_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= cheweileixing.getallcolumn( cheweileixing, cheweileixing) - - #当前登录用户所在表 - 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__=cheweileixing.__authSeparate__ - except: - __authSeparate__=None - - if __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__=cheweileixing.__hasMessage__ - except: - __hasMessage__=None - if __hasMessage__=="是": - tablename=request.session.get("tablename") - if tablename!="users": - req_dict["userid"]=request.session.get("params").get("id") - - - - # 判断当前表的表属性isAdmin,为真则是管理员表 - # 当表属性isAdmin=”是”,刷出来的用户表也是管理员,即page和list可以查看所有人的考试记录(同时应用于其他表) - __isAdmin__ = None - - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - # 当前表也是有管理员权限的表 - if __isAdmin__ == "是": - if req_dict.get("userid"): - del req_dict["userid"] - - else: - #非管理员权限的表,判断当前表字段名是否有userid - if tablename!="users" and "userid" in cheweileixing.getallcolumn(cheweileixing,cheweileixing): - req_dict["userid"] = request.session.get("params").get("id") - - #当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的 - try: - __authTables__=cheweileixing.__authTables__ - except: - __authTables__=None - - if __authTables__!=None and __authTables__!={}: - try: - del req_dict['userid'] - except: - pass - for authColumn,authTable in __authTables__.items(): - if authTable==tablename: - params = request.session.get("params") - req_dict[authColumn]=params.get(authColumn) - break - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] =cheweileixing.page(cheweileixing, cheweileixing, req_dict) - - return JsonResponse(msg) - -def cheweileixing_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 cheweileixing.getallcolumn(cheweileixing,cheweileixing): - req_dict['sort']='clicknum' - else: - req_dict['sort']='clicktime' - req_dict['order']='desc' - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] = cheweileixing.page(cheweileixing,cheweileixing, req_dict) - - return JsonResponse(msg) - - -def cheweileixing_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= cheweileixing.getallcolumn( cheweileixing, cheweileixing) - #表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看 - try: - __foreEndList__=cheweileixing.__foreEndList__ - except: - __foreEndList__=None - - if __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 - #forrEndListAuth - try: - __foreEndListAuth__=cheweileixing.__foreEndListAuth__ - except: - __foreEndListAuth__=None - - - #authSeparate - try: - __authSeparate__=cheweileixing.__authSeparate__ - except: - __authSeparate__=None - - if __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__ = None - - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - if __isAdmin__ == "是": - if req_dict.get("userid"): - del req_dict["userid"] - else: - #非管理员权限的表,判断当前表字段名是否有userid - if "userid" in columns: - try: - # 本接口可以匿名访问,所以try判断是否为匿名 - req_dict['userid']=request.session.get("params").get("id") - except: - pass - #当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的 - try: - __authTables__=cheweileixing.__authTables__ - except: - __authTables__=None - - if __authTables__!=None and __authTables__!={} and __foreEndListAuth__=="是": - try: - del req_dict['userid'] - except: - pass - for authColumn,authTable in __authTables__.items(): - if authTable==tablename: - params = request.session.get("params") - req_dict[authColumn]=params.get(authColumn) - break - - if cheweileixing.__tablename__[:7]=="discuss": - try: - del req_dict['userid'] - except: - pass - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] = cheweileixing.page(cheweileixing, cheweileixing, req_dict) - - return JsonResponse(msg) - -def cheweileixing_save(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") - __isAdmin__ = None - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - #获取全部列名 - columns= cheweileixing.getallcolumn( cheweileixing, cheweileixing) - 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') - - - error= cheweileixing.createbyreq(cheweileixing,cheweileixing, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def cheweileixing_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= cheweileixing.getallcolumn( cheweileixing, cheweileixing) - - try: - __authSeparate__=cheweileixing.__authSeparate__ - except: - __authSeparate__=None - - if __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 - - try: - __foreEndListAuth__=cheweileixing.__foreEndListAuth__ - except: - __foreEndListAuth__=None - - if __foreEndListAuth__ and __foreEndListAuth__!="否": - tablename=request.session.get("tablename") - if tablename!="users": - req_dict['userid']=request.session.get("params").get("id") - - error= cheweileixing.createbyreq(cheweileixing,cheweileixing, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - -def cheweileixing_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=cheweileixing.getbyid(cheweileixing,cheweileixing,id_) - - update_dict={ - "id":id_, - } - if type_==1:#赞 - update_dict["thumbsupnum"]=int(rets[0].get('thumbsupnum'))+1 - elif type_==2:#踩 - update_dict["crazilynum"]=int(rets[0].get('crazilynum'))+1 - error = cheweileixing.updatebyparams(cheweileixing,cheweileixing, update_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def cheweileixing_info(request,id_): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - - data = cheweileixing.getbyid(cheweileixing,cheweileixing, int(id_)) - if len(data)>0: - msg['data']=data[0] - #浏览点击次数 - try: - __browseClick__= cheweileixing.__browseClick__ - except: - __browseClick__=None - - if __browseClick__=="是" and "clicknum" in cheweileixing.getallcolumn(cheweileixing,cheweileixing): - try: - clicknum=int(data[0].get("clicknum",0))+1 - except: - clicknum=0+1 - click_dict={"id":int(id_),"clicknum":clicknum} - ret=cheweileixing.updatebyparams(cheweileixing,cheweileixing,click_dict) - if ret!=None: - msg['code'] = crud_error_code - msg['msg'] = ret - return JsonResponse(msg) - -def cheweileixing_detail(request,id_): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - - data =cheweileixing.getbyid(cheweileixing,cheweileixing, int(id_)) - if len(data)>0: - msg['data']=data[0] - - #浏览点击次数 - try: - __browseClick__= cheweileixing.__browseClick__ - except: - __browseClick__=None - - if __browseClick__=="是" and "clicknum" in cheweileixing.getallcolumn(cheweileixing,cheweileixing): - try: - clicknum=int(data[0].get("clicknum",0))+1 - except: - clicknum=0+1 - click_dict={"id":int(id_),"clicknum":clicknum} - - ret=cheweileixing.updatebyparams(cheweileixing,cheweileixing,click_dict) - if ret!=None: - msg['code'] = crud_error_code - msg['msg'] = retfo - return JsonResponse(msg) - - -def cheweileixing_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 req_dict.get("password"): - if "mima" not in cheweileixing.getallcolumn(cheweileixing,cheweileixing) : - del req_dict["mima"] - if "password" not in cheweileixing.getallcolumn(cheweileixing,cheweileixing) : - del req_dict["password"] - try: - del req_dict["clicknum"] - except: - pass - error = cheweileixing.updatebyparams(cheweileixing, cheweileixing, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def cheweileixing_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=cheweileixing.deletes(cheweileixing, - cheweileixing, - req_dict.get("ids") - ) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def cheweileixing_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= cheweileixing.getbyid(cheweileixing, cheweileixing, int(id_)) - for i in data: - votenum=i.get('votenum') - if votenum!=None: - params={"id":int(id_),"votenum":votenum+1} - error=cheweileixing.updatebyparams(cheweileixing,cheweileixing,params) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - diff --git a/src/main/Cheweiweihu_v.py b/src/main/Cheweiweihu_v.py deleted file mode 100644 index 1c55a23..0000000 --- a/src/main/Cheweiweihu_v.py +++ /dev/null @@ -1,522 +0,0 @@ -#coding:utf-8 -__author__ = "ila" -import copy -from django.http import JsonResponse -from django.apps import apps -from django.db.models.aggregates import Count,Sum -from .models import cheweiweihu -from util.codes import * -from util.auth import Auth -import util.message as mes - -def cheweiweihu_register(request): - if request.method in ["POST", "GET"]: - msg = {'code': normal_code, "msg": mes.normal_code} - req_dict = request.session.get("req_dict") - - error = cheweiweihu.createbyreq(cheweiweihu, cheweiweihu, req_dict) - if error != None: - msg['code'] = crud_error_code - msg['msg'] = "用户已存在,请勿重复注册!" - return JsonResponse(msg) - -def cheweiweihu_login(request): - if request.method in ["POST", "GET"]: - msg = {'code': normal_code, "msg": mes.normal_code} - req_dict = request.session.get("req_dict") - - datas = cheweiweihu.getbyparams(cheweiweihu, cheweiweihu, req_dict) - if not datas: - msg['code'] = password_error_code - msg['msg'] = mes.password_error_code - return JsonResponse(msg) - try: - __sfsh__= cheweiweihu.__sfsh__ - except: - __sfsh__=None - - if __sfsh__=='是': - if datas[0].get('sfsh')=='否': - msg['code']=other_code - msg['msg'] = "账号已锁定,请联系管理员审核!" - return JsonResponse(msg) - - req_dict['id'] = datas[0].get('id') - return Auth.authenticate(Auth, cheweiweihu, req_dict) - - -def cheweiweihu_logout(request): - if request.method in ["POST", "GET"]: - msg = { - "msg": "登出成功", - "code": 0 - } - - return JsonResponse(msg) - - -def cheweiweihu_resetPass(request): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code} - - req_dict = request.session.get("req_dict") - - error = cheweiweihu.updatebyparams(cheweiweihu,cheweiweihu, req_dict) - - if error != None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - - -def cheweiweihu_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'] = cheweiweihu.getbyparams(cheweiweihu, cheweiweihu, req_dict)[0] - - return JsonResponse(msg) - - -def cheweiweihu_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=cheweiweihu.getbyparams(cheweiweihu, cheweiweihu, req_dict) - if len(data)>0: - msg['data'] = data[0] - else: - msg['data'] = {} - return JsonResponse(msg) - -def cheweiweihu_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= cheweiweihu.getallcolumn( cheweiweihu, cheweiweihu) - - #当前登录用户所在表 - 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__=cheweiweihu.__authSeparate__ - except: - __authSeparate__=None - - if __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__=cheweiweihu.__hasMessage__ - except: - __hasMessage__=None - if __hasMessage__=="是": - tablename=request.session.get("tablename") - if tablename!="users": - req_dict["userid"]=request.session.get("params").get("id") - - - - # 判断当前表的表属性isAdmin,为真则是管理员表 - # 当表属性isAdmin=”是”,刷出来的用户表也是管理员,即page和list可以查看所有人的考试记录(同时应用于其他表) - __isAdmin__ = None - - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - # 当前表也是有管理员权限的表 - if __isAdmin__ == "是": - if req_dict.get("userid"): - del req_dict["userid"] - - else: - #非管理员权限的表,判断当前表字段名是否有userid - if tablename!="users" and "userid" in cheweiweihu.getallcolumn(cheweiweihu,cheweiweihu): - req_dict["userid"] = request.session.get("params").get("id") - - #当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的 - try: - __authTables__=cheweiweihu.__authTables__ - except: - __authTables__=None - - if __authTables__!=None and __authTables__!={}: - try: - del req_dict['userid'] - except: - pass - for authColumn,authTable in __authTables__.items(): - if authTable==tablename: - params = request.session.get("params") - req_dict[authColumn]=params.get(authColumn) - break - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] =cheweiweihu.page(cheweiweihu, cheweiweihu, req_dict) - - return JsonResponse(msg) - -def cheweiweihu_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 cheweiweihu.getallcolumn(cheweiweihu,cheweiweihu): - req_dict['sort']='clicknum' - else: - req_dict['sort']='clicktime' - req_dict['order']='desc' - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] = cheweiweihu.page(cheweiweihu,cheweiweihu, req_dict) - - return JsonResponse(msg) - - -def cheweiweihu_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= cheweiweihu.getallcolumn( cheweiweihu, cheweiweihu) - #表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看 - try: - __foreEndList__=cheweiweihu.__foreEndList__ - except: - __foreEndList__=None - - if __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 - #forrEndListAuth - try: - __foreEndListAuth__=cheweiweihu.__foreEndListAuth__ - except: - __foreEndListAuth__=None - - - #authSeparate - try: - __authSeparate__=cheweiweihu.__authSeparate__ - except: - __authSeparate__=None - - if __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__ = None - - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - if __isAdmin__ == "是": - if req_dict.get("userid"): - del req_dict["userid"] - else: - #非管理员权限的表,判断当前表字段名是否有userid - if "userid" in columns: - try: - # 本接口可以匿名访问,所以try判断是否为匿名 - req_dict['userid']=request.session.get("params").get("id") - except: - pass - #当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的 - try: - __authTables__=cheweiweihu.__authTables__ - except: - __authTables__=None - - if __authTables__!=None and __authTables__!={} and __foreEndListAuth__=="是": - try: - del req_dict['userid'] - except: - pass - for authColumn,authTable in __authTables__.items(): - if authTable==tablename: - params = request.session.get("params") - req_dict[authColumn]=params.get(authColumn) - break - - if cheweiweihu.__tablename__[:7]=="discuss": - try: - del req_dict['userid'] - except: - pass - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] = cheweiweihu.page(cheweiweihu, cheweiweihu, req_dict) - - return JsonResponse(msg) - -def cheweiweihu_save(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") - __isAdmin__ = None - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - #获取全部列名 - columns= cheweiweihu.getallcolumn( cheweiweihu, cheweiweihu) - 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') - - - error= cheweiweihu.createbyreq(cheweiweihu,cheweiweihu, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def cheweiweihu_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= cheweiweihu.getallcolumn( cheweiweihu, cheweiweihu) - - try: - __authSeparate__=cheweiweihu.__authSeparate__ - except: - __authSeparate__=None - - if __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 - - try: - __foreEndListAuth__=cheweiweihu.__foreEndListAuth__ - except: - __foreEndListAuth__=None - - if __foreEndListAuth__ and __foreEndListAuth__!="否": - tablename=request.session.get("tablename") - if tablename!="users": - req_dict['userid']=request.session.get("params").get("id") - - error= cheweiweihu.createbyreq(cheweiweihu,cheweiweihu, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - -def cheweiweihu_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=cheweiweihu.getbyid(cheweiweihu,cheweiweihu,id_) - - update_dict={ - "id":id_, - } - if type_==1:#赞 - update_dict["thumbsupnum"]=int(rets[0].get('thumbsupnum'))+1 - elif type_==2:#踩 - update_dict["crazilynum"]=int(rets[0].get('crazilynum'))+1 - error = cheweiweihu.updatebyparams(cheweiweihu,cheweiweihu, update_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def cheweiweihu_info(request,id_): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - - data = cheweiweihu.getbyid(cheweiweihu,cheweiweihu, int(id_)) - if len(data)>0: - msg['data']=data[0] - #浏览点击次数 - try: - __browseClick__= cheweiweihu.__browseClick__ - except: - __browseClick__=None - - if __browseClick__=="是" and "clicknum" in cheweiweihu.getallcolumn(cheweiweihu,cheweiweihu): - try: - clicknum=int(data[0].get("clicknum",0))+1 - except: - clicknum=0+1 - click_dict={"id":int(id_),"clicknum":clicknum} - ret=cheweiweihu.updatebyparams(cheweiweihu,cheweiweihu,click_dict) - if ret!=None: - msg['code'] = crud_error_code - msg['msg'] = ret - return JsonResponse(msg) - -def cheweiweihu_detail(request,id_): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - - data =cheweiweihu.getbyid(cheweiweihu,cheweiweihu, int(id_)) - if len(data)>0: - msg['data']=data[0] - - #浏览点击次数 - try: - __browseClick__= cheweiweihu.__browseClick__ - except: - __browseClick__=None - - if __browseClick__=="是" and "clicknum" in cheweiweihu.getallcolumn(cheweiweihu,cheweiweihu): - try: - clicknum=int(data[0].get("clicknum",0))+1 - except: - clicknum=0+1 - click_dict={"id":int(id_),"clicknum":clicknum} - - ret=cheweiweihu.updatebyparams(cheweiweihu,cheweiweihu,click_dict) - if ret!=None: - msg['code'] = crud_error_code - msg['msg'] = retfo - return JsonResponse(msg) - - -def cheweiweihu_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 req_dict.get("password"): - if "mima" not in cheweiweihu.getallcolumn(cheweiweihu,cheweiweihu) : - del req_dict["mima"] - if "password" not in cheweiweihu.getallcolumn(cheweiweihu,cheweiweihu) : - del req_dict["password"] - try: - del req_dict["clicknum"] - except: - pass - error = cheweiweihu.updatebyparams(cheweiweihu, cheweiweihu, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def cheweiweihu_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=cheweiweihu.deletes(cheweiweihu, - cheweiweihu, - req_dict.get("ids") - ) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def cheweiweihu_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= cheweiweihu.getbyid(cheweiweihu, cheweiweihu, int(id_)) - for i in data: - votenum=i.get('votenum') - if votenum!=None: - params={"id":int(id_),"votenum":votenum+1} - error=cheweiweihu.updatebyparams(cheweiweihu,cheweiweihu,params) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - diff --git a/src/main/Cheweixinxi_v.py b/src/main/Cheweixinxi_v.py deleted file mode 100644 index 7497ddd..0000000 --- a/src/main/Cheweixinxi_v.py +++ /dev/null @@ -1,522 +0,0 @@ -#coding:utf-8 -__author__ = "ila" -import copy -from django.http import JsonResponse -from django.apps import apps -from django.db.models.aggregates import Count,Sum -from .models import cheweixinxi -from util.codes import * -from util.auth import Auth -import util.message as mes - -def cheweixinxi_register(request): - if request.method in ["POST", "GET"]: - msg = {'code': normal_code, "msg": mes.normal_code} - req_dict = request.session.get("req_dict") - - error = cheweixinxi.createbyreq(cheweixinxi, cheweixinxi, req_dict) - if error != None: - msg['code'] = crud_error_code - msg['msg'] = "用户已存在,请勿重复注册!" - return JsonResponse(msg) - -def cheweixinxi_login(request): - if request.method in ["POST", "GET"]: - msg = {'code': normal_code, "msg": mes.normal_code} - req_dict = request.session.get("req_dict") - - datas = cheweixinxi.getbyparams(cheweixinxi, cheweixinxi, req_dict) - if not datas: - msg['code'] = password_error_code - msg['msg'] = mes.password_error_code - return JsonResponse(msg) - try: - __sfsh__= cheweixinxi.__sfsh__ - except: - __sfsh__=None - - if __sfsh__=='是': - if datas[0].get('sfsh')=='否': - msg['code']=other_code - msg['msg'] = "账号已锁定,请联系管理员审核!" - return JsonResponse(msg) - - req_dict['id'] = datas[0].get('id') - return Auth.authenticate(Auth, cheweixinxi, req_dict) - - -def cheweixinxi_logout(request): - if request.method in ["POST", "GET"]: - msg = { - "msg": "登出成功", - "code": 0 - } - - return JsonResponse(msg) - - -def cheweixinxi_resetPass(request): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code} - - req_dict = request.session.get("req_dict") - - error = cheweixinxi.updatebyparams(cheweixinxi,cheweixinxi, req_dict) - - if error != None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - - -def cheweixinxi_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'] = cheweixinxi.getbyparams(cheweixinxi, cheweixinxi, req_dict)[0] - - return JsonResponse(msg) - - -def cheweixinxi_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=cheweixinxi.getbyparams(cheweixinxi, cheweixinxi, req_dict) - if len(data)>0: - msg['data'] = data[0] - else: - msg['data'] = {} - return JsonResponse(msg) - -def cheweixinxi_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= cheweixinxi.getallcolumn( cheweixinxi, cheweixinxi) - - #当前登录用户所在表 - 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__=cheweixinxi.__authSeparate__ - except: - __authSeparate__=None - - if __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__=cheweixinxi.__hasMessage__ - except: - __hasMessage__=None - if __hasMessage__=="是": - tablename=request.session.get("tablename") - if tablename!="users": - req_dict["userid"]=request.session.get("params").get("id") - - - - # 判断当前表的表属性isAdmin,为真则是管理员表 - # 当表属性isAdmin=”是”,刷出来的用户表也是管理员,即page和list可以查看所有人的考试记录(同时应用于其他表) - __isAdmin__ = None - - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - # 当前表也是有管理员权限的表 - if __isAdmin__ == "是": - if req_dict.get("userid"): - del req_dict["userid"] - - else: - #非管理员权限的表,判断当前表字段名是否有userid - if tablename!="users" and "userid" in cheweixinxi.getallcolumn(cheweixinxi,cheweixinxi): - req_dict["userid"] = request.session.get("params").get("id") - - #当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的 - try: - __authTables__=cheweixinxi.__authTables__ - except: - __authTables__=None - - if __authTables__!=None and __authTables__!={}: - try: - del req_dict['userid'] - except: - pass - for authColumn,authTable in __authTables__.items(): - if authTable==tablename: - params = request.session.get("params") - req_dict[authColumn]=params.get(authColumn) - break - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] =cheweixinxi.page(cheweixinxi, cheweixinxi, req_dict) - - return JsonResponse(msg) - -def cheweixinxi_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 cheweixinxi.getallcolumn(cheweixinxi,cheweixinxi): - req_dict['sort']='clicknum' - else: - req_dict['sort']='clicktime' - req_dict['order']='desc' - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] = cheweixinxi.page(cheweixinxi,cheweixinxi, req_dict) - - return JsonResponse(msg) - - -def cheweixinxi_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= cheweixinxi.getallcolumn( cheweixinxi, cheweixinxi) - #表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看 - try: - __foreEndList__=cheweixinxi.__foreEndList__ - except: - __foreEndList__=None - - if __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 - #forrEndListAuth - try: - __foreEndListAuth__=cheweixinxi.__foreEndListAuth__ - except: - __foreEndListAuth__=None - - - #authSeparate - try: - __authSeparate__=cheweixinxi.__authSeparate__ - except: - __authSeparate__=None - - if __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__ = None - - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - if __isAdmin__ == "是": - if req_dict.get("userid"): - del req_dict["userid"] - else: - #非管理员权限的表,判断当前表字段名是否有userid - if "userid" in columns: - try: - # 本接口可以匿名访问,所以try判断是否为匿名 - req_dict['userid']=request.session.get("params").get("id") - except: - pass - #当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的 - try: - __authTables__=cheweixinxi.__authTables__ - except: - __authTables__=None - - if __authTables__!=None and __authTables__!={} and __foreEndListAuth__=="是": - try: - del req_dict['userid'] - except: - pass - for authColumn,authTable in __authTables__.items(): - if authTable==tablename: - params = request.session.get("params") - req_dict[authColumn]=params.get(authColumn) - break - - if cheweixinxi.__tablename__[:7]=="discuss": - try: - del req_dict['userid'] - except: - pass - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] = cheweixinxi.page(cheweixinxi, cheweixinxi, req_dict) - - return JsonResponse(msg) - -def cheweixinxi_save(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") - __isAdmin__ = None - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - #获取全部列名 - columns= cheweixinxi.getallcolumn( cheweixinxi, cheweixinxi) - 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') - - - error= cheweixinxi.createbyreq(cheweixinxi,cheweixinxi, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def cheweixinxi_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= cheweixinxi.getallcolumn( cheweixinxi, cheweixinxi) - - try: - __authSeparate__=cheweixinxi.__authSeparate__ - except: - __authSeparate__=None - - if __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 - - try: - __foreEndListAuth__=cheweixinxi.__foreEndListAuth__ - except: - __foreEndListAuth__=None - - if __foreEndListAuth__ and __foreEndListAuth__!="否": - tablename=request.session.get("tablename") - if tablename!="users": - req_dict['userid']=request.session.get("params").get("id") - - error= cheweixinxi.createbyreq(cheweixinxi,cheweixinxi, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - -def cheweixinxi_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=cheweixinxi.getbyid(cheweixinxi,cheweixinxi,id_) - - update_dict={ - "id":id_, - } - if type_==1:#赞 - update_dict["thumbsupnum"]=int(rets[0].get('thumbsupnum'))+1 - elif type_==2:#踩 - update_dict["crazilynum"]=int(rets[0].get('crazilynum'))+1 - error = cheweixinxi.updatebyparams(cheweixinxi,cheweixinxi, update_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def cheweixinxi_info(request,id_): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - - data = cheweixinxi.getbyid(cheweixinxi,cheweixinxi, int(id_)) - if len(data)>0: - msg['data']=data[0] - #浏览点击次数 - try: - __browseClick__= cheweixinxi.__browseClick__ - except: - __browseClick__=None - - if __browseClick__=="是" and "clicknum" in cheweixinxi.getallcolumn(cheweixinxi,cheweixinxi): - try: - clicknum=int(data[0].get("clicknum",0))+1 - except: - clicknum=0+1 - click_dict={"id":int(id_),"clicknum":clicknum} - ret=cheweixinxi.updatebyparams(cheweixinxi,cheweixinxi,click_dict) - if ret!=None: - msg['code'] = crud_error_code - msg['msg'] = ret - return JsonResponse(msg) - -def cheweixinxi_detail(request,id_): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - - data =cheweixinxi.getbyid(cheweixinxi,cheweixinxi, int(id_)) - if len(data)>0: - msg['data']=data[0] - - #浏览点击次数 - try: - __browseClick__= cheweixinxi.__browseClick__ - except: - __browseClick__=None - - if __browseClick__=="是" and "clicknum" in cheweixinxi.getallcolumn(cheweixinxi,cheweixinxi): - try: - clicknum=int(data[0].get("clicknum",0))+1 - except: - clicknum=0+1 - click_dict={"id":int(id_),"clicknum":clicknum} - - ret=cheweixinxi.updatebyparams(cheweixinxi,cheweixinxi,click_dict) - if ret!=None: - msg['code'] = crud_error_code - msg['msg'] = retfo - return JsonResponse(msg) - - -def cheweixinxi_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 req_dict.get("password"): - if "mima" not in cheweixinxi.getallcolumn(cheweixinxi,cheweixinxi) : - del req_dict["mima"] - if "password" not in cheweixinxi.getallcolumn(cheweixinxi,cheweixinxi) : - del req_dict["password"] - try: - del req_dict["clicknum"] - except: - pass - error = cheweixinxi.updatebyparams(cheweixinxi, cheweixinxi, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def cheweixinxi_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=cheweixinxi.deletes(cheweixinxi, - cheweixinxi, - req_dict.get("ids") - ) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def cheweixinxi_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= cheweixinxi.getbyid(cheweixinxi, cheweixinxi, int(id_)) - for i in data: - votenum=i.get('votenum') - if votenum!=None: - params={"id":int(id_),"votenum":votenum+1} - error=cheweixinxi.updatebyparams(cheweixinxi,cheweixinxi,params) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - diff --git a/src/main/Chuchangjiaofei_v.py b/src/main/Chuchangjiaofei_v.py deleted file mode 100644 index 7746b00..0000000 --- a/src/main/Chuchangjiaofei_v.py +++ /dev/null @@ -1,522 +0,0 @@ -#coding:utf-8 -__author__ = "ila" -import copy -from django.http import JsonResponse -from django.apps import apps -from django.db.models.aggregates import Count,Sum -from .models import chuchangjiaofei -from util.codes import * -from util.auth import Auth -import util.message as mes - -def chuchangjiaofei_register(request): - if request.method in ["POST", "GET"]: - msg = {'code': normal_code, "msg": mes.normal_code} - req_dict = request.session.get("req_dict") - - error = chuchangjiaofei.createbyreq(chuchangjiaofei, chuchangjiaofei, req_dict) - if error != None: - msg['code'] = crud_error_code - msg['msg'] = "用户已存在,请勿重复注册!" - return JsonResponse(msg) - -def chuchangjiaofei_login(request): - if request.method in ["POST", "GET"]: - msg = {'code': normal_code, "msg": mes.normal_code} - req_dict = request.session.get("req_dict") - - datas = chuchangjiaofei.getbyparams(chuchangjiaofei, chuchangjiaofei, req_dict) - if not datas: - msg['code'] = password_error_code - msg['msg'] = mes.password_error_code - return JsonResponse(msg) - try: - __sfsh__= chuchangjiaofei.__sfsh__ - except: - __sfsh__=None - - if __sfsh__=='是': - if datas[0].get('sfsh')=='否': - msg['code']=other_code - msg['msg'] = "账号已锁定,请联系管理员审核!" - return JsonResponse(msg) - - req_dict['id'] = datas[0].get('id') - return Auth.authenticate(Auth, chuchangjiaofei, req_dict) - - -def chuchangjiaofei_logout(request): - if request.method in ["POST", "GET"]: - msg = { - "msg": "登出成功", - "code": 0 - } - - return JsonResponse(msg) - - -def chuchangjiaofei_resetPass(request): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code} - - req_dict = request.session.get("req_dict") - - error = chuchangjiaofei.updatebyparams(chuchangjiaofei,chuchangjiaofei, req_dict) - - if error != None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - - -def chuchangjiaofei_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'] = chuchangjiaofei.getbyparams(chuchangjiaofei, chuchangjiaofei, req_dict)[0] - - return JsonResponse(msg) - - -def chuchangjiaofei_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=chuchangjiaofei.getbyparams(chuchangjiaofei, chuchangjiaofei, req_dict) - if len(data)>0: - msg['data'] = data[0] - else: - msg['data'] = {} - return JsonResponse(msg) - -def chuchangjiaofei_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= chuchangjiaofei.getallcolumn( chuchangjiaofei, chuchangjiaofei) - - #当前登录用户所在表 - 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__=chuchangjiaofei.__authSeparate__ - except: - __authSeparate__=None - - if __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__=chuchangjiaofei.__hasMessage__ - except: - __hasMessage__=None - if __hasMessage__=="是": - tablename=request.session.get("tablename") - if tablename!="users": - req_dict["userid"]=request.session.get("params").get("id") - - - - # 判断当前表的表属性isAdmin,为真则是管理员表 - # 当表属性isAdmin=”是”,刷出来的用户表也是管理员,即page和list可以查看所有人的考试记录(同时应用于其他表) - __isAdmin__ = None - - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - # 当前表也是有管理员权限的表 - if __isAdmin__ == "是": - if req_dict.get("userid"): - del req_dict["userid"] - - else: - #非管理员权限的表,判断当前表字段名是否有userid - if tablename!="users" and "userid" in chuchangjiaofei.getallcolumn(chuchangjiaofei,chuchangjiaofei): - req_dict["userid"] = request.session.get("params").get("id") - - #当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的 - try: - __authTables__=chuchangjiaofei.__authTables__ - except: - __authTables__=None - - if __authTables__!=None and __authTables__!={}: - try: - del req_dict['userid'] - except: - pass - for authColumn,authTable in __authTables__.items(): - if authTable==tablename: - params = request.session.get("params") - req_dict[authColumn]=params.get(authColumn) - break - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] =chuchangjiaofei.page(chuchangjiaofei, chuchangjiaofei, req_dict) - - return JsonResponse(msg) - -def chuchangjiaofei_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 chuchangjiaofei.getallcolumn(chuchangjiaofei,chuchangjiaofei): - req_dict['sort']='clicknum' - else: - req_dict['sort']='clicktime' - req_dict['order']='desc' - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] = chuchangjiaofei.page(chuchangjiaofei,chuchangjiaofei, req_dict) - - return JsonResponse(msg) - - -def chuchangjiaofei_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= chuchangjiaofei.getallcolumn( chuchangjiaofei, chuchangjiaofei) - #表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看 - try: - __foreEndList__=chuchangjiaofei.__foreEndList__ - except: - __foreEndList__=None - - if __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 - #forrEndListAuth - try: - __foreEndListAuth__=chuchangjiaofei.__foreEndListAuth__ - except: - __foreEndListAuth__=None - - - #authSeparate - try: - __authSeparate__=chuchangjiaofei.__authSeparate__ - except: - __authSeparate__=None - - if __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__ = None - - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - if __isAdmin__ == "是": - if req_dict.get("userid"): - del req_dict["userid"] - else: - #非管理员权限的表,判断当前表字段名是否有userid - if "userid" in columns: - try: - # 本接口可以匿名访问,所以try判断是否为匿名 - req_dict['userid']=request.session.get("params").get("id") - except: - pass - #当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的 - try: - __authTables__=chuchangjiaofei.__authTables__ - except: - __authTables__=None - - if __authTables__!=None and __authTables__!={} and __foreEndListAuth__=="是": - try: - del req_dict['userid'] - except: - pass - for authColumn,authTable in __authTables__.items(): - if authTable==tablename: - params = request.session.get("params") - req_dict[authColumn]=params.get(authColumn) - break - - if chuchangjiaofei.__tablename__[:7]=="discuss": - try: - del req_dict['userid'] - except: - pass - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] = chuchangjiaofei.page(chuchangjiaofei, chuchangjiaofei, req_dict) - - return JsonResponse(msg) - -def chuchangjiaofei_save(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") - __isAdmin__ = None - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - #获取全部列名 - columns= chuchangjiaofei.getallcolumn( chuchangjiaofei, chuchangjiaofei) - 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') - - - error= chuchangjiaofei.createbyreq(chuchangjiaofei,chuchangjiaofei, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def chuchangjiaofei_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= chuchangjiaofei.getallcolumn( chuchangjiaofei, chuchangjiaofei) - - try: - __authSeparate__=chuchangjiaofei.__authSeparate__ - except: - __authSeparate__=None - - if __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 - - try: - __foreEndListAuth__=chuchangjiaofei.__foreEndListAuth__ - except: - __foreEndListAuth__=None - - if __foreEndListAuth__ and __foreEndListAuth__!="否": - tablename=request.session.get("tablename") - if tablename!="users": - req_dict['userid']=request.session.get("params").get("id") - - error= chuchangjiaofei.createbyreq(chuchangjiaofei,chuchangjiaofei, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - -def chuchangjiaofei_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=chuchangjiaofei.getbyid(chuchangjiaofei,chuchangjiaofei,id_) - - update_dict={ - "id":id_, - } - if type_==1:#赞 - update_dict["thumbsupnum"]=int(rets[0].get('thumbsupnum'))+1 - elif type_==2:#踩 - update_dict["crazilynum"]=int(rets[0].get('crazilynum'))+1 - error = chuchangjiaofei.updatebyparams(chuchangjiaofei,chuchangjiaofei, update_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def chuchangjiaofei_info(request,id_): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - - data = chuchangjiaofei.getbyid(chuchangjiaofei,chuchangjiaofei, int(id_)) - if len(data)>0: - msg['data']=data[0] - #浏览点击次数 - try: - __browseClick__= chuchangjiaofei.__browseClick__ - except: - __browseClick__=None - - if __browseClick__=="是" and "clicknum" in chuchangjiaofei.getallcolumn(chuchangjiaofei,chuchangjiaofei): - try: - clicknum=int(data[0].get("clicknum",0))+1 - except: - clicknum=0+1 - click_dict={"id":int(id_),"clicknum":clicknum} - ret=chuchangjiaofei.updatebyparams(chuchangjiaofei,chuchangjiaofei,click_dict) - if ret!=None: - msg['code'] = crud_error_code - msg['msg'] = ret - return JsonResponse(msg) - -def chuchangjiaofei_detail(request,id_): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - - data =chuchangjiaofei.getbyid(chuchangjiaofei,chuchangjiaofei, int(id_)) - if len(data)>0: - msg['data']=data[0] - - #浏览点击次数 - try: - __browseClick__= chuchangjiaofei.__browseClick__ - except: - __browseClick__=None - - if __browseClick__=="是" and "clicknum" in chuchangjiaofei.getallcolumn(chuchangjiaofei,chuchangjiaofei): - try: - clicknum=int(data[0].get("clicknum",0))+1 - except: - clicknum=0+1 - click_dict={"id":int(id_),"clicknum":clicknum} - - ret=chuchangjiaofei.updatebyparams(chuchangjiaofei,chuchangjiaofei,click_dict) - if ret!=None: - msg['code'] = crud_error_code - msg['msg'] = retfo - return JsonResponse(msg) - - -def chuchangjiaofei_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 req_dict.get("password"): - if "mima" not in chuchangjiaofei.getallcolumn(chuchangjiaofei,chuchangjiaofei) : - del req_dict["mima"] - if "password" not in chuchangjiaofei.getallcolumn(chuchangjiaofei,chuchangjiaofei) : - del req_dict["password"] - try: - del req_dict["clicknum"] - except: - pass - error = chuchangjiaofei.updatebyparams(chuchangjiaofei, chuchangjiaofei, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def chuchangjiaofei_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=chuchangjiaofei.deletes(chuchangjiaofei, - chuchangjiaofei, - req_dict.get("ids") - ) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def chuchangjiaofei_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= chuchangjiaofei.getbyid(chuchangjiaofei, chuchangjiaofei, int(id_)) - for i in data: - votenum=i.get('votenum') - if votenum!=None: - params={"id":int(id_),"votenum":votenum+1} - error=chuchangjiaofei.updatebyparams(chuchangjiaofei,chuchangjiaofei,params) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - diff --git a/src/main/Huiyuan_v.py b/src/main/Huiyuan_v.py deleted file mode 100644 index f31b74f..0000000 --- a/src/main/Huiyuan_v.py +++ /dev/null @@ -1,522 +0,0 @@ -#coding:utf-8 -__author__ = "ila" -import copy -from django.http import JsonResponse -from django.apps import apps -from django.db.models.aggregates import Count,Sum -from .models import huiyuan -from util.codes import * -from util.auth import Auth -import util.message as mes - -def huiyuan_register(request): - if request.method in ["POST", "GET"]: - msg = {'code': normal_code, "msg": mes.normal_code} - req_dict = request.session.get("req_dict") - - error = huiyuan.createbyreq(huiyuan, huiyuan, req_dict) - if error != None: - msg['code'] = crud_error_code - msg['msg'] = "用户已存在,请勿重复注册!" - return JsonResponse(msg) - -def huiyuan_login(request): - if request.method in ["POST", "GET"]: - msg = {'code': normal_code, "msg": mes.normal_code} - req_dict = request.session.get("req_dict") - - datas = huiyuan.getbyparams(huiyuan, huiyuan, req_dict) - if not datas: - msg['code'] = password_error_code - msg['msg'] = mes.password_error_code - return JsonResponse(msg) - try: - __sfsh__= huiyuan.__sfsh__ - except: - __sfsh__=None - - if __sfsh__=='是': - if datas[0].get('sfsh')=='否': - msg['code']=other_code - msg['msg'] = "账号已锁定,请联系管理员审核!" - return JsonResponse(msg) - - req_dict['id'] = datas[0].get('id') - return Auth.authenticate(Auth, huiyuan, req_dict) - - -def huiyuan_logout(request): - if request.method in ["POST", "GET"]: - msg = { - "msg": "登出成功", - "code": 0 - } - - return JsonResponse(msg) - - -def huiyuan_resetPass(request): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code} - - req_dict = request.session.get("req_dict") - - error = huiyuan.updatebyparams(huiyuan,huiyuan, req_dict) - - if error != None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - - -def huiyuan_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'] = huiyuan.getbyparams(huiyuan, huiyuan, req_dict)[0] - - return JsonResponse(msg) - - -def huiyuan_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=huiyuan.getbyparams(huiyuan, huiyuan, req_dict) - if len(data)>0: - msg['data'] = data[0] - else: - msg['data'] = {} - return JsonResponse(msg) - -def huiyuan_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= huiyuan.getallcolumn( huiyuan, huiyuan) - - #当前登录用户所在表 - 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__=huiyuan.__authSeparate__ - except: - __authSeparate__=None - - if __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__=huiyuan.__hasMessage__ - except: - __hasMessage__=None - if __hasMessage__=="是": - tablename=request.session.get("tablename") - if tablename!="users": - req_dict["userid"]=request.session.get("params").get("id") - - - - # 判断当前表的表属性isAdmin,为真则是管理员表 - # 当表属性isAdmin=”是”,刷出来的用户表也是管理员,即page和list可以查看所有人的考试记录(同时应用于其他表) - __isAdmin__ = None - - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - # 当前表也是有管理员权限的表 - if __isAdmin__ == "是": - if req_dict.get("userid"): - del req_dict["userid"] - - else: - #非管理员权限的表,判断当前表字段名是否有userid - if tablename!="users" and "userid" in huiyuan.getallcolumn(huiyuan,huiyuan): - req_dict["userid"] = request.session.get("params").get("id") - - #当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的 - try: - __authTables__=huiyuan.__authTables__ - except: - __authTables__=None - - if __authTables__!=None and __authTables__!={}: - try: - del req_dict['userid'] - except: - pass - for authColumn,authTable in __authTables__.items(): - if authTable==tablename: - params = request.session.get("params") - req_dict[authColumn]=params.get(authColumn) - break - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] =huiyuan.page(huiyuan, huiyuan, req_dict) - - return JsonResponse(msg) - -def huiyuan_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 huiyuan.getallcolumn(huiyuan,huiyuan): - req_dict['sort']='clicknum' - else: - req_dict['sort']='clicktime' - req_dict['order']='desc' - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] = huiyuan.page(huiyuan,huiyuan, req_dict) - - return JsonResponse(msg) - - -def huiyuan_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= huiyuan.getallcolumn( huiyuan, huiyuan) - #表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看 - try: - __foreEndList__=huiyuan.__foreEndList__ - except: - __foreEndList__=None - - if __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 - #forrEndListAuth - try: - __foreEndListAuth__=huiyuan.__foreEndListAuth__ - except: - __foreEndListAuth__=None - - - #authSeparate - try: - __authSeparate__=huiyuan.__authSeparate__ - except: - __authSeparate__=None - - if __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__ = None - - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - if __isAdmin__ == "是": - if req_dict.get("userid"): - del req_dict["userid"] - else: - #非管理员权限的表,判断当前表字段名是否有userid - if "userid" in columns: - try: - # 本接口可以匿名访问,所以try判断是否为匿名 - req_dict['userid']=request.session.get("params").get("id") - except: - pass - #当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的 - try: - __authTables__=huiyuan.__authTables__ - except: - __authTables__=None - - if __authTables__!=None and __authTables__!={} and __foreEndListAuth__=="是": - try: - del req_dict['userid'] - except: - pass - for authColumn,authTable in __authTables__.items(): - if authTable==tablename: - params = request.session.get("params") - req_dict[authColumn]=params.get(authColumn) - break - - if huiyuan.__tablename__[:7]=="discuss": - try: - del req_dict['userid'] - except: - pass - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] = huiyuan.page(huiyuan, huiyuan, req_dict) - - return JsonResponse(msg) - -def huiyuan_save(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") - __isAdmin__ = None - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - #获取全部列名 - columns= huiyuan.getallcolumn( huiyuan, huiyuan) - 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') - - - error= huiyuan.createbyreq(huiyuan,huiyuan, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def huiyuan_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= huiyuan.getallcolumn( huiyuan, huiyuan) - - try: - __authSeparate__=huiyuan.__authSeparate__ - except: - __authSeparate__=None - - if __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 - - try: - __foreEndListAuth__=huiyuan.__foreEndListAuth__ - except: - __foreEndListAuth__=None - - if __foreEndListAuth__ and __foreEndListAuth__!="否": - tablename=request.session.get("tablename") - if tablename!="users": - req_dict['userid']=request.session.get("params").get("id") - - error= huiyuan.createbyreq(huiyuan,huiyuan, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - -def huiyuan_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=huiyuan.getbyid(huiyuan,huiyuan,id_) - - update_dict={ - "id":id_, - } - if type_==1:#赞 - update_dict["thumbsupnum"]=int(rets[0].get('thumbsupnum'))+1 - elif type_==2:#踩 - update_dict["crazilynum"]=int(rets[0].get('crazilynum'))+1 - error = huiyuan.updatebyparams(huiyuan,huiyuan, update_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def huiyuan_info(request,id_): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - - data = huiyuan.getbyid(huiyuan,huiyuan, int(id_)) - if len(data)>0: - msg['data']=data[0] - #浏览点击次数 - try: - __browseClick__= huiyuan.__browseClick__ - except: - __browseClick__=None - - if __browseClick__=="是" and "clicknum" in huiyuan.getallcolumn(huiyuan,huiyuan): - try: - clicknum=int(data[0].get("clicknum",0))+1 - except: - clicknum=0+1 - click_dict={"id":int(id_),"clicknum":clicknum} - ret=huiyuan.updatebyparams(huiyuan,huiyuan,click_dict) - if ret!=None: - msg['code'] = crud_error_code - msg['msg'] = ret - return JsonResponse(msg) - -def huiyuan_detail(request,id_): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - - data =huiyuan.getbyid(huiyuan,huiyuan, int(id_)) - if len(data)>0: - msg['data']=data[0] - - #浏览点击次数 - try: - __browseClick__= huiyuan.__browseClick__ - except: - __browseClick__=None - - if __browseClick__=="是" and "clicknum" in huiyuan.getallcolumn(huiyuan,huiyuan): - try: - clicknum=int(data[0].get("clicknum",0))+1 - except: - clicknum=0+1 - click_dict={"id":int(id_),"clicknum":clicknum} - - ret=huiyuan.updatebyparams(huiyuan,huiyuan,click_dict) - if ret!=None: - msg['code'] = crud_error_code - msg['msg'] = retfo - return JsonResponse(msg) - - -def huiyuan_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 req_dict.get("password"): - if "mima" not in huiyuan.getallcolumn(huiyuan,huiyuan) : - del req_dict["mima"] - if "password" not in huiyuan.getallcolumn(huiyuan,huiyuan) : - del req_dict["password"] - try: - del req_dict["clicknum"] - except: - pass - error = huiyuan.updatebyparams(huiyuan, huiyuan, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def huiyuan_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=huiyuan.deletes(huiyuan, - huiyuan, - req_dict.get("ids") - ) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def huiyuan_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= huiyuan.getbyid(huiyuan, huiyuan, int(id_)) - for i in data: - votenum=i.get('votenum') - if votenum!=None: - params={"id":int(id_),"votenum":votenum+1} - error=huiyuan.updatebyparams(huiyuan,huiyuan,params) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - diff --git a/src/main/Messages_v.py b/src/main/Messages_v.py deleted file mode 100644 index ae56d82..0000000 --- a/src/main/Messages_v.py +++ /dev/null @@ -1,522 +0,0 @@ -#coding:utf-8 -__author__ = "ila" -import copy -from django.http import JsonResponse -from django.apps import apps -from django.db.models.aggregates import Count,Sum -from .models import messages -from util.codes import * -from util.auth import Auth -import util.message as mes - -def messages_register(request): - if request.method in ["POST", "GET"]: - msg = {'code': normal_code, "msg": mes.normal_code} - req_dict = request.session.get("req_dict") - - error = messages.createbyreq(messages, messages, req_dict) - if error != None: - msg['code'] = crud_error_code - msg['msg'] = "用户已存在,请勿重复注册!" - return JsonResponse(msg) - -def messages_login(request): - if request.method in ["POST", "GET"]: - msg = {'code': normal_code, "msg": mes.normal_code} - req_dict = request.session.get("req_dict") - - datas = messages.getbyparams(messages, messages, req_dict) - if not datas: - msg['code'] = password_error_code - msg['msg'] = mes.password_error_code - return JsonResponse(msg) - try: - __sfsh__= messages.__sfsh__ - except: - __sfsh__=None - - if __sfsh__=='是': - if datas[0].get('sfsh')=='否': - msg['code']=other_code - msg['msg'] = "账号已锁定,请联系管理员审核!" - return JsonResponse(msg) - - req_dict['id'] = datas[0].get('id') - return Auth.authenticate(Auth, messages, req_dict) - - -def messages_logout(request): - if request.method in ["POST", "GET"]: - msg = { - "msg": "登出成功", - "code": 0 - } - - return JsonResponse(msg) - - -def messages_resetPass(request): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code} - - req_dict = request.session.get("req_dict") - - error = messages.updatebyparams(messages,messages, req_dict) - - if error != None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - - -def messages_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'] = messages.getbyparams(messages, messages, req_dict)[0] - - return JsonResponse(msg) - - -def messages_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=messages.getbyparams(messages, messages, req_dict) - if len(data)>0: - msg['data'] = data[0] - else: - msg['data'] = {} - return JsonResponse(msg) - -def messages_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= messages.getallcolumn( messages, messages) - - #当前登录用户所在表 - 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__=messages.__authSeparate__ - except: - __authSeparate__=None - - if __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__=messages.__hasMessage__ - except: - __hasMessage__=None - if __hasMessage__=="是": - tablename=request.session.get("tablename") - if tablename!="users": - req_dict["userid"]=request.session.get("params").get("id") - - - - # 判断当前表的表属性isAdmin,为真则是管理员表 - # 当表属性isAdmin=”是”,刷出来的用户表也是管理员,即page和list可以查看所有人的考试记录(同时应用于其他表) - __isAdmin__ = None - - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - # 当前表也是有管理员权限的表 - if __isAdmin__ == "是": - if req_dict.get("userid"): - del req_dict["userid"] - - else: - #非管理员权限的表,判断当前表字段名是否有userid - if tablename!="users" and "userid" in messages.getallcolumn(messages,messages): - req_dict["userid"] = request.session.get("params").get("id") - - #当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的 - try: - __authTables__=messages.__authTables__ - except: - __authTables__=None - - if __authTables__!=None and __authTables__!={}: - try: - del req_dict['userid'] - except: - pass - for authColumn,authTable in __authTables__.items(): - if authTable==tablename: - params = request.session.get("params") - req_dict[authColumn]=params.get(authColumn) - break - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] =messages.page(messages, messages, req_dict) - - return JsonResponse(msg) - -def messages_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 messages.getallcolumn(messages,messages): - req_dict['sort']='clicknum' - else: - req_dict['sort']='clicktime' - req_dict['order']='desc' - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] = messages.page(messages,messages, req_dict) - - return JsonResponse(msg) - - -def messages_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= messages.getallcolumn( messages, messages) - #表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看 - try: - __foreEndList__=messages.__foreEndList__ - except: - __foreEndList__=None - - if __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 - #forrEndListAuth - try: - __foreEndListAuth__=messages.__foreEndListAuth__ - except: - __foreEndListAuth__=None - - - #authSeparate - try: - __authSeparate__=messages.__authSeparate__ - except: - __authSeparate__=None - - if __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__ = None - - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - if __isAdmin__ == "是": - if req_dict.get("userid"): - del req_dict["userid"] - else: - #非管理员权限的表,判断当前表字段名是否有userid - if "userid" in columns: - try: - # 本接口可以匿名访问,所以try判断是否为匿名 - req_dict['userid']=request.session.get("params").get("id") - except: - pass - #当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的 - try: - __authTables__=messages.__authTables__ - except: - __authTables__=None - - if __authTables__!=None and __authTables__!={} and __foreEndListAuth__=="是": - try: - del req_dict['userid'] - except: - pass - for authColumn,authTable in __authTables__.items(): - if authTable==tablename: - params = request.session.get("params") - req_dict[authColumn]=params.get(authColumn) - break - - if messages.__tablename__[:7]=="discuss": - try: - del req_dict['userid'] - except: - pass - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] = messages.page(messages, messages, req_dict) - - return JsonResponse(msg) - -def messages_save(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") - __isAdmin__ = None - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - #获取全部列名 - columns= messages.getallcolumn( messages, messages) - 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') - - - error= messages.createbyreq(messages,messages, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def messages_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= messages.getallcolumn( messages, messages) - - try: - __authSeparate__=messages.__authSeparate__ - except: - __authSeparate__=None - - if __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 - - try: - __foreEndListAuth__=messages.__foreEndListAuth__ - except: - __foreEndListAuth__=None - - if __foreEndListAuth__ and __foreEndListAuth__!="否": - tablename=request.session.get("tablename") - if tablename!="users": - req_dict['userid']=request.session.get("params").get("id") - - error= messages.createbyreq(messages,messages, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - -def messages_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=messages.getbyid(messages,messages,id_) - - update_dict={ - "id":id_, - } - if type_==1:#赞 - update_dict["thumbsupnum"]=int(rets[0].get('thumbsupnum'))+1 - elif type_==2:#踩 - update_dict["crazilynum"]=int(rets[0].get('crazilynum'))+1 - error = messages.updatebyparams(messages,messages, update_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def messages_info(request,id_): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - - data = messages.getbyid(messages,messages, int(id_)) - if len(data)>0: - msg['data']=data[0] - #浏览点击次数 - try: - __browseClick__= messages.__browseClick__ - except: - __browseClick__=None - - if __browseClick__=="是" and "clicknum" in messages.getallcolumn(messages,messages): - try: - clicknum=int(data[0].get("clicknum",0))+1 - except: - clicknum=0+1 - click_dict={"id":int(id_),"clicknum":clicknum} - ret=messages.updatebyparams(messages,messages,click_dict) - if ret!=None: - msg['code'] = crud_error_code - msg['msg'] = ret - return JsonResponse(msg) - -def messages_detail(request,id_): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - - data =messages.getbyid(messages,messages, int(id_)) - if len(data)>0: - msg['data']=data[0] - - #浏览点击次数 - try: - __browseClick__= messages.__browseClick__ - except: - __browseClick__=None - - if __browseClick__=="是" and "clicknum" in messages.getallcolumn(messages,messages): - try: - clicknum=int(data[0].get("clicknum",0))+1 - except: - clicknum=0+1 - click_dict={"id":int(id_),"clicknum":clicknum} - - ret=messages.updatebyparams(messages,messages,click_dict) - if ret!=None: - msg['code'] = crud_error_code - msg['msg'] = retfo - return JsonResponse(msg) - - -def messages_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 req_dict.get("password"): - if "mima" not in messages.getallcolumn(messages,messages) : - del req_dict["mima"] - if "password" not in messages.getallcolumn(messages,messages) : - del req_dict["password"] - try: - del req_dict["clicknum"] - except: - pass - error = messages.updatebyparams(messages, messages, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def messages_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=messages.deletes(messages, - messages, - req_dict.get("ids") - ) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def messages_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= messages.getbyid(messages, messages, int(id_)) - for i in data: - votenum=i.get('votenum') - if votenum!=None: - params={"id":int(id_),"votenum":votenum+1} - error=messages.updatebyparams(messages,messages,params) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - diff --git a/src/main/News_v.py b/src/main/News_v.py deleted file mode 100644 index 5e2eb9c..0000000 --- a/src/main/News_v.py +++ /dev/null @@ -1,522 +0,0 @@ -#coding:utf-8 -__author__ = "ila" -import copy -from django.http import JsonResponse -from django.apps import apps -from django.db.models.aggregates import Count,Sum -from .models import news -from util.codes import * -from util.auth import Auth -import util.message as mes - -def news_register(request): - if request.method in ["POST", "GET"]: - msg = {'code': normal_code, "msg": mes.normal_code} - req_dict = request.session.get("req_dict") - - error = news.createbyreq(news, news, req_dict) - if error != None: - msg['code'] = crud_error_code - msg['msg'] = "用户已存在,请勿重复注册!" - return JsonResponse(msg) - -def news_login(request): - if request.method in ["POST", "GET"]: - msg = {'code': normal_code, "msg": mes.normal_code} - req_dict = request.session.get("req_dict") - - datas = news.getbyparams(news, news, req_dict) - if not datas: - msg['code'] = password_error_code - msg['msg'] = mes.password_error_code - return JsonResponse(msg) - try: - __sfsh__= news.__sfsh__ - except: - __sfsh__=None - - if __sfsh__=='是': - if datas[0].get('sfsh')=='否': - msg['code']=other_code - msg['msg'] = "账号已锁定,请联系管理员审核!" - return JsonResponse(msg) - - req_dict['id'] = datas[0].get('id') - return Auth.authenticate(Auth, news, req_dict) - - -def news_logout(request): - if request.method in ["POST", "GET"]: - msg = { - "msg": "登出成功", - "code": 0 - } - - return JsonResponse(msg) - - -def news_resetPass(request): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code} - - req_dict = request.session.get("req_dict") - - error = news.updatebyparams(news,news, req_dict) - - if error != None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - - -def news_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'] = news.getbyparams(news, news, req_dict)[0] - - return JsonResponse(msg) - - -def news_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=news.getbyparams(news, news, req_dict) - if len(data)>0: - msg['data'] = data[0] - else: - msg['data'] = {} - return JsonResponse(msg) - -def news_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= news.getallcolumn( news, news) - - #当前登录用户所在表 - 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__=news.__authSeparate__ - except: - __authSeparate__=None - - if __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__=news.__hasMessage__ - except: - __hasMessage__=None - if __hasMessage__=="是": - tablename=request.session.get("tablename") - if tablename!="users": - req_dict["userid"]=request.session.get("params").get("id") - - - - # 判断当前表的表属性isAdmin,为真则是管理员表 - # 当表属性isAdmin=”是”,刷出来的用户表也是管理员,即page和list可以查看所有人的考试记录(同时应用于其他表) - __isAdmin__ = None - - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - # 当前表也是有管理员权限的表 - if __isAdmin__ == "是": - if req_dict.get("userid"): - del req_dict["userid"] - - else: - #非管理员权限的表,判断当前表字段名是否有userid - if tablename!="users" and "userid" in news.getallcolumn(news,news): - req_dict["userid"] = request.session.get("params").get("id") - - #当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的 - try: - __authTables__=news.__authTables__ - except: - __authTables__=None - - if __authTables__!=None and __authTables__!={}: - try: - del req_dict['userid'] - except: - pass - for authColumn,authTable in __authTables__.items(): - if authTable==tablename: - params = request.session.get("params") - req_dict[authColumn]=params.get(authColumn) - break - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] =news.page(news, news, req_dict) - - return JsonResponse(msg) - -def news_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 news.getallcolumn(news,news): - req_dict['sort']='clicknum' - else: - req_dict['sort']='clicktime' - req_dict['order']='desc' - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] = news.page(news,news, req_dict) - - return JsonResponse(msg) - - -def news_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= news.getallcolumn( news, news) - #表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看 - try: - __foreEndList__=news.__foreEndList__ - except: - __foreEndList__=None - - if __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 - #forrEndListAuth - try: - __foreEndListAuth__=news.__foreEndListAuth__ - except: - __foreEndListAuth__=None - - - #authSeparate - try: - __authSeparate__=news.__authSeparate__ - except: - __authSeparate__=None - - if __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__ = None - - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - if __isAdmin__ == "是": - if req_dict.get("userid"): - del req_dict["userid"] - else: - #非管理员权限的表,判断当前表字段名是否有userid - if "userid" in columns: - try: - # 本接口可以匿名访问,所以try判断是否为匿名 - req_dict['userid']=request.session.get("params").get("id") - except: - pass - #当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的 - try: - __authTables__=news.__authTables__ - except: - __authTables__=None - - if __authTables__!=None and __authTables__!={} and __foreEndListAuth__=="是": - try: - del req_dict['userid'] - except: - pass - for authColumn,authTable in __authTables__.items(): - if authTable==tablename: - params = request.session.get("params") - req_dict[authColumn]=params.get(authColumn) - break - - if news.__tablename__[:7]=="discuss": - try: - del req_dict['userid'] - except: - pass - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] = news.page(news, news, req_dict) - - return JsonResponse(msg) - -def news_save(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") - __isAdmin__ = None - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - #获取全部列名 - columns= news.getallcolumn( news, news) - 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') - - - error= news.createbyreq(news,news, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def news_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= news.getallcolumn( news, news) - - try: - __authSeparate__=news.__authSeparate__ - except: - __authSeparate__=None - - if __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 - - try: - __foreEndListAuth__=news.__foreEndListAuth__ - except: - __foreEndListAuth__=None - - if __foreEndListAuth__ and __foreEndListAuth__!="否": - tablename=request.session.get("tablename") - if tablename!="users": - req_dict['userid']=request.session.get("params").get("id") - - error= news.createbyreq(news,news, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - -def news_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=news.getbyid(news,news,id_) - - update_dict={ - "id":id_, - } - if type_==1:#赞 - update_dict["thumbsupnum"]=int(rets[0].get('thumbsupnum'))+1 - elif type_==2:#踩 - update_dict["crazilynum"]=int(rets[0].get('crazilynum'))+1 - error = news.updatebyparams(news,news, update_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def news_info(request,id_): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - - data = news.getbyid(news,news, int(id_)) - if len(data)>0: - msg['data']=data[0] - #浏览点击次数 - try: - __browseClick__= news.__browseClick__ - except: - __browseClick__=None - - if __browseClick__=="是" and "clicknum" in news.getallcolumn(news,news): - try: - clicknum=int(data[0].get("clicknum",0))+1 - except: - clicknum=0+1 - click_dict={"id":int(id_),"clicknum":clicknum} - ret=news.updatebyparams(news,news,click_dict) - if ret!=None: - msg['code'] = crud_error_code - msg['msg'] = ret - return JsonResponse(msg) - -def news_detail(request,id_): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - - data =news.getbyid(news,news, int(id_)) - if len(data)>0: - msg['data']=data[0] - - #浏览点击次数 - try: - __browseClick__= news.__browseClick__ - except: - __browseClick__=None - - if __browseClick__=="是" and "clicknum" in news.getallcolumn(news,news): - try: - clicknum=int(data[0].get("clicknum",0))+1 - except: - clicknum=0+1 - click_dict={"id":int(id_),"clicknum":clicknum} - - ret=news.updatebyparams(news,news,click_dict) - if ret!=None: - msg['code'] = crud_error_code - msg['msg'] = retfo - return JsonResponse(msg) - - -def news_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 req_dict.get("password"): - if "mima" not in news.getallcolumn(news,news) : - del req_dict["mima"] - if "password" not in news.getallcolumn(news,news) : - del req_dict["password"] - try: - del req_dict["clicknum"] - except: - pass - error = news.updatebyparams(news, news, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def news_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=news.deletes(news, - news, - req_dict.get("ids") - ) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def news_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= news.getbyid(news, news, int(id_)) - for i in data: - votenum=i.get('votenum') - if votenum!=None: - params={"id":int(id_),"votenum":votenum+1} - error=news.updatebyparams(news,news,params) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - diff --git a/src/main/Ruchangtingche_v.py b/src/main/Ruchangtingche_v.py deleted file mode 100644 index 6398905..0000000 --- a/src/main/Ruchangtingche_v.py +++ /dev/null @@ -1,522 +0,0 @@ -#coding:utf-8 -__author__ = "ila" -import copy -from django.http import JsonResponse -from django.apps import apps -from django.db.models.aggregates import Count,Sum -from .models import ruchangtingche -from util.codes import * -from util.auth import Auth -import util.message as mes - -def ruchangtingche_register(request): - if request.method in ["POST", "GET"]: - msg = {'code': normal_code, "msg": mes.normal_code} - req_dict = request.session.get("req_dict") - - error = ruchangtingche.createbyreq(ruchangtingche, ruchangtingche, req_dict) - if error != None: - msg['code'] = crud_error_code - msg['msg'] = "用户已存在,请勿重复注册!" - return JsonResponse(msg) - -def ruchangtingche_login(request): - if request.method in ["POST", "GET"]: - msg = {'code': normal_code, "msg": mes.normal_code} - req_dict = request.session.get("req_dict") - - datas = ruchangtingche.getbyparams(ruchangtingche, ruchangtingche, req_dict) - if not datas: - msg['code'] = password_error_code - msg['msg'] = mes.password_error_code - return JsonResponse(msg) - try: - __sfsh__= ruchangtingche.__sfsh__ - except: - __sfsh__=None - - if __sfsh__=='是': - if datas[0].get('sfsh')=='否': - msg['code']=other_code - msg['msg'] = "账号已锁定,请联系管理员审核!" - return JsonResponse(msg) - - req_dict['id'] = datas[0].get('id') - return Auth.authenticate(Auth, ruchangtingche, req_dict) - - -def ruchangtingche_logout(request): - if request.method in ["POST", "GET"]: - msg = { - "msg": "登出成功", - "code": 0 - } - - return JsonResponse(msg) - - -def ruchangtingche_resetPass(request): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code} - - req_dict = request.session.get("req_dict") - - error = ruchangtingche.updatebyparams(ruchangtingche,ruchangtingche, req_dict) - - if error != None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - - -def ruchangtingche_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'] = ruchangtingche.getbyparams(ruchangtingche, ruchangtingche, req_dict)[0] - - return JsonResponse(msg) - - -def ruchangtingche_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=ruchangtingche.getbyparams(ruchangtingche, ruchangtingche, req_dict) - if len(data)>0: - msg['data'] = data[0] - else: - msg['data'] = {} - return JsonResponse(msg) - -def ruchangtingche_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= ruchangtingche.getallcolumn( ruchangtingche, ruchangtingche) - - #当前登录用户所在表 - 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__=ruchangtingche.__authSeparate__ - except: - __authSeparate__=None - - if __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__=ruchangtingche.__hasMessage__ - except: - __hasMessage__=None - if __hasMessage__=="是": - tablename=request.session.get("tablename") - if tablename!="users": - req_dict["userid"]=request.session.get("params").get("id") - - - - # 判断当前表的表属性isAdmin,为真则是管理员表 - # 当表属性isAdmin=”是”,刷出来的用户表也是管理员,即page和list可以查看所有人的考试记录(同时应用于其他表) - __isAdmin__ = None - - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - # 当前表也是有管理员权限的表 - if __isAdmin__ == "是": - if req_dict.get("userid"): - del req_dict["userid"] - - else: - #非管理员权限的表,判断当前表字段名是否有userid - if tablename!="users" and "userid" in ruchangtingche.getallcolumn(ruchangtingche,ruchangtingche): - req_dict["userid"] = request.session.get("params").get("id") - - #当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的 - try: - __authTables__=ruchangtingche.__authTables__ - except: - __authTables__=None - - if __authTables__!=None and __authTables__!={}: - try: - del req_dict['userid'] - except: - pass - for authColumn,authTable in __authTables__.items(): - if authTable==tablename: - params = request.session.get("params") - req_dict[authColumn]=params.get(authColumn) - break - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] =ruchangtingche.page(ruchangtingche, ruchangtingche, req_dict) - - return JsonResponse(msg) - -def ruchangtingche_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 ruchangtingche.getallcolumn(ruchangtingche,ruchangtingche): - req_dict['sort']='clicknum' - else: - req_dict['sort']='clicktime' - req_dict['order']='desc' - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] = ruchangtingche.page(ruchangtingche,ruchangtingche, req_dict) - - return JsonResponse(msg) - - -def ruchangtingche_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= ruchangtingche.getallcolumn( ruchangtingche, ruchangtingche) - #表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看 - try: - __foreEndList__=ruchangtingche.__foreEndList__ - except: - __foreEndList__=None - - if __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 - #forrEndListAuth - try: - __foreEndListAuth__=ruchangtingche.__foreEndListAuth__ - except: - __foreEndListAuth__=None - - - #authSeparate - try: - __authSeparate__=ruchangtingche.__authSeparate__ - except: - __authSeparate__=None - - if __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__ = None - - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - if __isAdmin__ == "是": - if req_dict.get("userid"): - del req_dict["userid"] - else: - #非管理员权限的表,判断当前表字段名是否有userid - if "userid" in columns: - try: - # 本接口可以匿名访问,所以try判断是否为匿名 - req_dict['userid']=request.session.get("params").get("id") - except: - pass - #当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的 - try: - __authTables__=ruchangtingche.__authTables__ - except: - __authTables__=None - - if __authTables__!=None and __authTables__!={} and __foreEndListAuth__=="是": - try: - del req_dict['userid'] - except: - pass - for authColumn,authTable in __authTables__.items(): - if authTable==tablename: - params = request.session.get("params") - req_dict[authColumn]=params.get(authColumn) - break - - if ruchangtingche.__tablename__[:7]=="discuss": - try: - del req_dict['userid'] - except: - pass - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] = ruchangtingche.page(ruchangtingche, ruchangtingche, req_dict) - - return JsonResponse(msg) - -def ruchangtingche_save(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") - __isAdmin__ = None - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - #获取全部列名 - columns= ruchangtingche.getallcolumn( ruchangtingche, ruchangtingche) - 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') - - - error= ruchangtingche.createbyreq(ruchangtingche,ruchangtingche, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def ruchangtingche_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= ruchangtingche.getallcolumn( ruchangtingche, ruchangtingche) - - try: - __authSeparate__=ruchangtingche.__authSeparate__ - except: - __authSeparate__=None - - if __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 - - try: - __foreEndListAuth__=ruchangtingche.__foreEndListAuth__ - except: - __foreEndListAuth__=None - - if __foreEndListAuth__ and __foreEndListAuth__!="否": - tablename=request.session.get("tablename") - if tablename!="users": - req_dict['userid']=request.session.get("params").get("id") - - error= ruchangtingche.createbyreq(ruchangtingche,ruchangtingche, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - -def ruchangtingche_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=ruchangtingche.getbyid(ruchangtingche,ruchangtingche,id_) - - update_dict={ - "id":id_, - } - if type_==1:#赞 - update_dict["thumbsupnum"]=int(rets[0].get('thumbsupnum'))+1 - elif type_==2:#踩 - update_dict["crazilynum"]=int(rets[0].get('crazilynum'))+1 - error = ruchangtingche.updatebyparams(ruchangtingche,ruchangtingche, update_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def ruchangtingche_info(request,id_): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - - data = ruchangtingche.getbyid(ruchangtingche,ruchangtingche, int(id_)) - if len(data)>0: - msg['data']=data[0] - #浏览点击次数 - try: - __browseClick__= ruchangtingche.__browseClick__ - except: - __browseClick__=None - - if __browseClick__=="是" and "clicknum" in ruchangtingche.getallcolumn(ruchangtingche,ruchangtingche): - try: - clicknum=int(data[0].get("clicknum",0))+1 - except: - clicknum=0+1 - click_dict={"id":int(id_),"clicknum":clicknum} - ret=ruchangtingche.updatebyparams(ruchangtingche,ruchangtingche,click_dict) - if ret!=None: - msg['code'] = crud_error_code - msg['msg'] = ret - return JsonResponse(msg) - -def ruchangtingche_detail(request,id_): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - - data =ruchangtingche.getbyid(ruchangtingche,ruchangtingche, int(id_)) - if len(data)>0: - msg['data']=data[0] - - #浏览点击次数 - try: - __browseClick__= ruchangtingche.__browseClick__ - except: - __browseClick__=None - - if __browseClick__=="是" and "clicknum" in ruchangtingche.getallcolumn(ruchangtingche,ruchangtingche): - try: - clicknum=int(data[0].get("clicknum",0))+1 - except: - clicknum=0+1 - click_dict={"id":int(id_),"clicknum":clicknum} - - ret=ruchangtingche.updatebyparams(ruchangtingche,ruchangtingche,click_dict) - if ret!=None: - msg['code'] = crud_error_code - msg['msg'] = retfo - return JsonResponse(msg) - - -def ruchangtingche_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 req_dict.get("password"): - if "mima" not in ruchangtingche.getallcolumn(ruchangtingche,ruchangtingche) : - del req_dict["mima"] - if "password" not in ruchangtingche.getallcolumn(ruchangtingche,ruchangtingche) : - del req_dict["password"] - try: - del req_dict["clicknum"] - except: - pass - error = ruchangtingche.updatebyparams(ruchangtingche, ruchangtingche, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def ruchangtingche_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=ruchangtingche.deletes(ruchangtingche, - ruchangtingche, - req_dict.get("ids") - ) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def ruchangtingche_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= ruchangtingche.getbyid(ruchangtingche, ruchangtingche, int(id_)) - for i in data: - votenum=i.get('votenum') - if votenum!=None: - params={"id":int(id_),"votenum":votenum+1} - error=ruchangtingche.updatebyparams(ruchangtingche,ruchangtingche,params) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - diff --git a/src/main/Storeup_v.py b/src/main/Storeup_v.py deleted file mode 100644 index fd6e114..0000000 --- a/src/main/Storeup_v.py +++ /dev/null @@ -1,522 +0,0 @@ -#coding:utf-8 -__author__ = "ila" -import copy -from django.http import JsonResponse -from django.apps import apps -from django.db.models.aggregates import Count,Sum -from .models import storeup -from util.codes import * -from util.auth import Auth -import util.message as mes - -def storeup_register(request): - if request.method in ["POST", "GET"]: - msg = {'code': normal_code, "msg": mes.normal_code} - req_dict = request.session.get("req_dict") - - error = storeup.createbyreq(storeup, storeup, req_dict) - if error != None: - msg['code'] = crud_error_code - msg['msg'] = "用户已存在,请勿重复注册!" - return JsonResponse(msg) - -def storeup_login(request): - if request.method in ["POST", "GET"]: - msg = {'code': normal_code, "msg": mes.normal_code} - req_dict = request.session.get("req_dict") - - datas = storeup.getbyparams(storeup, storeup, req_dict) - if not datas: - msg['code'] = password_error_code - msg['msg'] = mes.password_error_code - return JsonResponse(msg) - try: - __sfsh__= storeup.__sfsh__ - except: - __sfsh__=None - - if __sfsh__=='是': - if datas[0].get('sfsh')=='否': - msg['code']=other_code - msg['msg'] = "账号已锁定,请联系管理员审核!" - return JsonResponse(msg) - - req_dict['id'] = datas[0].get('id') - return Auth.authenticate(Auth, storeup, req_dict) - - -def storeup_logout(request): - if request.method in ["POST", "GET"]: - msg = { - "msg": "登出成功", - "code": 0 - } - - return JsonResponse(msg) - - -def storeup_resetPass(request): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code} - - req_dict = request.session.get("req_dict") - - error = storeup.updatebyparams(storeup,storeup, req_dict) - - if error != None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - - -def storeup_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'] = storeup.getbyparams(storeup, storeup, req_dict)[0] - - return JsonResponse(msg) - - -def storeup_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=storeup.getbyparams(storeup, storeup, req_dict) - if len(data)>0: - msg['data'] = data[0] - else: - msg['data'] = {} - return JsonResponse(msg) - -def storeup_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= storeup.getallcolumn( storeup, storeup) - - #当前登录用户所在表 - 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__=storeup.__authSeparate__ - except: - __authSeparate__=None - - if __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__=storeup.__hasMessage__ - except: - __hasMessage__=None - if __hasMessage__=="是": - tablename=request.session.get("tablename") - if tablename!="users": - req_dict["userid"]=request.session.get("params").get("id") - - - - # 判断当前表的表属性isAdmin,为真则是管理员表 - # 当表属性isAdmin=”是”,刷出来的用户表也是管理员,即page和list可以查看所有人的考试记录(同时应用于其他表) - __isAdmin__ = None - - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - # 当前表也是有管理员权限的表 - if __isAdmin__ == "是": - if req_dict.get("userid"): - del req_dict["userid"] - - else: - #非管理员权限的表,判断当前表字段名是否有userid - if tablename!="users" and "userid" in storeup.getallcolumn(storeup,storeup): - req_dict["userid"] = request.session.get("params").get("id") - - #当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的 - try: - __authTables__=storeup.__authTables__ - except: - __authTables__=None - - if __authTables__!=None and __authTables__!={}: - try: - del req_dict['userid'] - except: - pass - for authColumn,authTable in __authTables__.items(): - if authTable==tablename: - params = request.session.get("params") - req_dict[authColumn]=params.get(authColumn) - break - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] =storeup.page(storeup, storeup, req_dict) - - return JsonResponse(msg) - -def storeup_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 storeup.getallcolumn(storeup,storeup): - req_dict['sort']='clicknum' - else: - req_dict['sort']='clicktime' - req_dict['order']='desc' - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] = storeup.page(storeup,storeup, req_dict) - - return JsonResponse(msg) - - -def storeup_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= storeup.getallcolumn( storeup, storeup) - #表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看 - try: - __foreEndList__=storeup.__foreEndList__ - except: - __foreEndList__=None - - if __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 - #forrEndListAuth - try: - __foreEndListAuth__=storeup.__foreEndListAuth__ - except: - __foreEndListAuth__=None - - - #authSeparate - try: - __authSeparate__=storeup.__authSeparate__ - except: - __authSeparate__=None - - if __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__ = None - - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - if __isAdmin__ == "是": - if req_dict.get("userid"): - del req_dict["userid"] - else: - #非管理员权限的表,判断当前表字段名是否有userid - if "userid" in columns: - try: - # 本接口可以匿名访问,所以try判断是否为匿名 - req_dict['userid']=request.session.get("params").get("id") - except: - pass - #当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的 - try: - __authTables__=storeup.__authTables__ - except: - __authTables__=None - - if __authTables__!=None and __authTables__!={} and __foreEndListAuth__=="是": - try: - del req_dict['userid'] - except: - pass - for authColumn,authTable in __authTables__.items(): - if authTable==tablename: - params = request.session.get("params") - req_dict[authColumn]=params.get(authColumn) - break - - if storeup.__tablename__[:7]=="discuss": - try: - del req_dict['userid'] - except: - pass - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] = storeup.page(storeup, storeup, req_dict) - - return JsonResponse(msg) - -def storeup_save(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") - __isAdmin__ = None - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__==tablename: - - try: - __isAdmin__ = m.__isAdmin__ - except: - __isAdmin__ = None - break - - #获取全部列名 - columns= storeup.getallcolumn( storeup, storeup) - 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') - - - error= storeup.createbyreq(storeup,storeup, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def storeup_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= storeup.getallcolumn( storeup, storeup) - - try: - __authSeparate__=storeup.__authSeparate__ - except: - __authSeparate__=None - - if __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 - - try: - __foreEndListAuth__=storeup.__foreEndListAuth__ - except: - __foreEndListAuth__=None - - if __foreEndListAuth__ and __foreEndListAuth__!="否": - tablename=request.session.get("tablename") - if tablename!="users": - req_dict['userid']=request.session.get("params").get("id") - - error= storeup.createbyreq(storeup,storeup, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - -def storeup_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=storeup.getbyid(storeup,storeup,id_) - - update_dict={ - "id":id_, - } - if type_==1:#赞 - update_dict["thumbsupnum"]=int(rets[0].get('thumbsupnum'))+1 - elif type_==2:#踩 - update_dict["crazilynum"]=int(rets[0].get('crazilynum'))+1 - error = storeup.updatebyparams(storeup,storeup, update_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def storeup_info(request,id_): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - - data = storeup.getbyid(storeup,storeup, int(id_)) - if len(data)>0: - msg['data']=data[0] - #浏览点击次数 - try: - __browseClick__= storeup.__browseClick__ - except: - __browseClick__=None - - if __browseClick__=="是" and "clicknum" in storeup.getallcolumn(storeup,storeup): - try: - clicknum=int(data[0].get("clicknum",0))+1 - except: - clicknum=0+1 - click_dict={"id":int(id_),"clicknum":clicknum} - ret=storeup.updatebyparams(storeup,storeup,click_dict) - if ret!=None: - msg['code'] = crud_error_code - msg['msg'] = ret - return JsonResponse(msg) - -def storeup_detail(request,id_): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - - data =storeup.getbyid(storeup,storeup, int(id_)) - if len(data)>0: - msg['data']=data[0] - - #浏览点击次数 - try: - __browseClick__= storeup.__browseClick__ - except: - __browseClick__=None - - if __browseClick__=="是" and "clicknum" in storeup.getallcolumn(storeup,storeup): - try: - clicknum=int(data[0].get("clicknum",0))+1 - except: - clicknum=0+1 - click_dict={"id":int(id_),"clicknum":clicknum} - - ret=storeup.updatebyparams(storeup,storeup,click_dict) - if ret!=None: - msg['code'] = crud_error_code - msg['msg'] = retfo - return JsonResponse(msg) - - -def storeup_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 req_dict.get("password"): - if "mima" not in storeup.getallcolumn(storeup,storeup) : - del req_dict["mima"] - if "password" not in storeup.getallcolumn(storeup,storeup) : - del req_dict["password"] - try: - del req_dict["clicknum"] - except: - pass - error = storeup.updatebyparams(storeup, storeup, req_dict) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def storeup_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=storeup.deletes(storeup, - storeup, - req_dict.get("ids") - ) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def storeup_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= storeup.getbyid(storeup, storeup, int(id_)) - for i in data: - votenum=i.get('votenum') - if votenum!=None: - params={"id":int(id_),"votenum":votenum+1} - error=storeup.updatebyparams(storeup,storeup,params) - if error!=None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - diff --git a/src/main/__init__.py b/src/main/__init__.py deleted file mode 100644 index de0c674..0000000 --- a/src/main/__init__.py +++ /dev/null @@ -1 +0,0 @@ -default_app_config = 'main.apps.MainConfig' diff --git a/src/main/__pycache__/Cheweileixing_v.cpython-37.pyc b/src/main/__pycache__/Cheweileixing_v.cpython-37.pyc deleted file mode 100644 index deb36f7899c7706fc72d0e386dc79c06626581ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10720 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 diff --git a/src/main/__pycache__/Cheweileixing_v.cpython-38.pyc b/src/main/__pycache__/Cheweileixing_v.cpython-38.pyc deleted file mode 100644 index 505f84e3b742ee892e2111f3b21b0f7f1811292f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10319 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 diff --git a/src/main/__pycache__/Cheweiweihu_v.cpython-37.pyc b/src/main/__pycache__/Cheweiweihu_v.cpython-37.pyc deleted file mode 100644 index 5346578cc540914be692b6ff52cee64aaa937637..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10682 zcmd^FTaX;pd7i$_^z_Wmu69@V1xpxXEhrKo-*6-ckco+GZxkd4XN77Q?P;xMHJ8=t z9$={%7cvf75#8({BZLAw1Z0^6NyZS#NI+8M%0nLVln1JxQf1BTZi# z!eXN_rZBajj4HTl1+}P+Y6_L<1-)pD8X|8L;>E;hqG*nqxR0|$Az8FWE%D4Oq;^vM zWFcMb8SN2eY9UkX9qmKjVyU0RMwhTO>%q03Wmqq+1FVlN!F7=JvjJR}vO%^K*JW%O zTaN2;wt}t1bp>0+R^z&o4Y6BrUBzx?U%+)WTf^4kI>c^cU&Qqmc02nLuD7x~*q3qr z0$az1ab3giWOw1ZmZ>{p!|OdQU&zg4+Od&g#Y=B<%B4qaXR=&!Y~1U)$w_Be^^C3M zO3C%K9hKs|g1UH=8rx?-Y3K2OUj?_yomBmSio0)&D$qY2KLfw5_&Ga~RAUp6%KkXt z?kcW20U4iBYYIxW8J%f$rKY;ZOx!hGqpH@mnpV|VY`?}Ib`w>|eshc&xW+ffT(hb? ztL(r^VFrm2j8EVGr#p6f+IJq>NjGCvN6gj;!Sw)EiEE@uKbSD>E-uD)VBlkoDWO z9WUY7j*~B!JZ;=|xryqK2e)&sy=Mwtdc9-3!m>8!WiH<08nvi<2|TRWjw^cLz4V?T zYW*_CSK{u!Hf@}m+CQ;zata-nHr{vlrh7KBiCk&C{I&AE_ifr(%;ifPx3&bIePYAp zls6bziY&Ls^NwrtG@5hzki-;ANh@hJqnP54uSQw8NVGt4{KO*tBQoJ4UA@^waz=s$ z!lKer8LcInvRq>#S<@ell>mMEW3ih47qOE1!&p^k@%<`4gJn*vi~#~>9b1M-olF2IMyd_bH6w2fI620r(fuw~G9r&>D zQ<26MOEr~#i5azD;kTn^h#Ha@Nl&0=4Kg8WhM3AUrqjlDmB=6(tXy&L#w!j<95Yi@#nkwhkPpZH`%p`I zsFr}vs@9>FbW%%C8`c{9!`K(c;z$dO!^zJ;Po^@7<%NEc0OHFqCts~Zq(dr&ub`wu zPD`V5;>#AS99m(~)GrxUjME$G{e`w}1!@^wf?hRqubkKamF z1(dW-VRgu9ASx$c%YPSdJAyqxN*Q&TvP|W7qAZk88>C8j63SrR9T#)1HN`+pqIcD80ClSz>dnWadeF$hpbL<}%wh*KkB`LOxPE zB=Zil_vR`Ew@vYh8pGD20`%e%ctVE>L3&!jE-eB*T8>WWwTaXp!lNWoQj#$hB87d* z$Q1D78&DdGmJ|Z*Wua+EO9Y}lq4H8-p`df1b;e`RI|efdh`ylXQBqM?K`A8JNT6I7 zwkc6FBDTq_8NO{Yge7`AS|9ex!oGi-rK%c8%-d6|{HJLF_MX5dp}n-Ub+Rqdk6DYi z^%M8|iBmr(6s|AqDN@?e12bz0H#uXm40=x0V>R=sZ&b~1$9CUcOIDK;>8dW;9GbFl z*HcTh^_-ABZ;zc&4h%gSt0w#rlmJMb!Lp*?8M3ZhVx@cKoT-Gt%1UxpSNF$79VyF> zv5DDcYF1mHmOopInfo=Y+#OXb4{Ap_j8XK}DYd6ISFM@edW>fEm|9EK($!#IpS0v& z>#6q4=vBc7s^9}+R-Zf?!&v(QBKa86#@>}N)(2fJb4$Wpf0!ExbA#AkOZ@F+LOCt% zqMUdFpqwYAFl>0{ScUWLxpCV|x@9+45LrWHJ#!M}JMvH4o?ZYkTWoW>xjoobxuQK1 z>`u?9I5u~%|8U7OK8(Jk0@R5H%ANfcDkOu)@1f*gN;V-G?q766OEQuM8Oaq2W934n zSn~R^S)vv@Y*MYR4epW2X7}Zs?}O%I_}MHc73XE}QWh=&IBjWfe%!O@z6iEmaJ-&u zHk=ge)O8$t( zk;KTqFS}KW{C+C3sDrI?Hp#FvDYOn1-xpQ!Gz5kQoC1=VmR43NX$^m=770o#eV|0E zK#AhIUn(fIr7S~1hVq~pf--?@5ZN~MA!V5sv@qxssyOHrJp~b0?^pT5=r2@rWSc@Y zcNRB*xb&4?yE!Gt64C9+x3L7al}Q$ZC1s9@jRt5Nur$7pCALNyTcbySpK_Tn*Bj>K z#-XR!IHC8|kF7CK`8wP^!E~-)J=T2by}4)KZyq~0ca%sS^6Td6=Ni9yrTNS+u3tU9 zD_?T$!Xx%rxp@8RG?@2BQ0?ni5AR;z{Q1SkYp;wI@?-nme9_+3IDB;W?=D=se6)G$ zgW1>Lo4fEvrYyf$oIyL@Ht?7?dv)|&?}G^Ss~V9|8r?2j8K zpKJW}!Jy;_TAF|HN^pDl+U2*dz5gM)r?$lan`fSx`|zi;KmJYQ&=nfO^v_X(x0;u( zG@hS9$yb|yQ=dD3vGM-N#>HRF)sHOThC-k4jaYf``Ys!q(@tMRd6;5$rAiS_Oqsi0 zGMp`FlkJRo2K)@Tnd{JmXs25TBcH`U`F-^IgOuD9lWOxyu_MbnFt&ff>(cHU7Hu_b zE%GzOh8V%Ka6=H04L8K6?RNi@o7)nt4N=p4TOaj96A?eugx7i2w<<|+1EXpPTYuKK z^=JPVwmwnwZM_&nvdtPNYQ8nD##u(#?Au|FgPgRlk@3Ll-X7RK*28*19m!^g%wxd} zh*>-m*mahG#TEC$wx3~%n(10IDb@!Tkp_!Mf<+_+i?FKJL{HTaBbtDPwk9$)Gh)&4 zW`spdfJK=8sILaSp{M^0ScH@!m3%Ha_SRBueWrXCkrFde`H!k8pGEx0mmkV*z$a2O zeIcJn6LSzVRQa|*rdat*H3L2YPE%E@X~8Gd1KWsCO!Tk>Tk@AGlwd#PqVhKv>j}79 z(xzYs@D4ZyxCiByhPh>7Zh4qn0R`J1ag0`0$k7w(0!p!Q{9iipcHcuqTOR&5%R&ksg>zCny8#5B2UcBCHc5j*6 z50%*WK$bui2HFZ9fRP6o5p;kU3Exb~7D~QF39$pg2lxY&YbmSV4t~MOpWuH+i69t{ zP);-}n)o)|K19j=l>9Lz-=RbZ<3@afINraZrZbHsru%#%;0I835jGK&2CPCI#8XQd zQt2&IUBE5iDuG*oVW_HLBft57EZWSpCSYJORnK7*1((h zw}tdpr80tFU(=XT(@D89xK}d?C=TPPuT%{vj`g*8H9i5~73%b1Y>#+H=nwA&YU9Ae z*i=wHuH{;A%n}sZgLCy;p*|=OXwV%qs|mPTzl9r;6i?+SER4den$lg7>;`S6sV(6@ z!wC}a|A*UyO^0n9iO1F?u8xMAJPuQD4<(&2CBBo2H zJgw+ptCk3(Nq!p#L%stj%xGaac_-?J*rM@<;p8=FFTfU*|Ip&G5JD5FOmfk?m}))1 z4R8RX#83OkB=??7H6iCTutIM6>CnW$Z~`H~ibP1KgDLuHcgyv_R9EBtW0;f_+Wojo zUqM+%512(VQ2ao2f+0+Zc@K(kHldJ$Md2;4R5_szbnVsPJ$bm5mJ+g0coKd)m=?OEkgYv_(qTv zLCPNx^uP_pKN@-%r2H4$1kmIE+y*?=Ur0`PkRwGn3u&MXk9ODvB8F63_ACRCNmPetkgf?*vC%O9UHMW`>1wh1N# zvkwr^Q-!J`$BjS&RVKotDFG7lQH5q&121Fl-B;jFg|3ymuTtFO{9tmI?^5lCU(%Sq zgy#}V@_A(v9s=HM{OrgW&pn+lOws-2Uj{DKLZ76&;`4NOYSNY@fa0;jbMaD}Ecu6N32{_{pa&gLM6{m79xAeI^xT66l=XCOyN;KV;YxYx*A0ek zen~LuDq(RAItx^v3C|>>nLy$Yu(pbvc8R&iQKt=ap}M<m?N!(u}wJ!AUKIrnmAfQkFHh?&`5^&Bd92q0jp41@|-R0qmc|}x=TE4 zAyx3LVQ@W<#8#gQdJ%~6gz20}#(bUy5908eM&y3IgRsNp1`WF20OiGzTC=%bd-S^*L^ zMCWF}N{ANPw*P<7;sPb&RJP~;0xg+NP0|G|T%gm?xP9Il3j1;X)>IA2^0D0~kp z@i9s|sDIn(ql`mc?1GUn6d1us>pXrhVFYi9f5ZesjdC70p+7x|6rW=d(Rz&nfMn~$ zxn~lVDmaRwgFNe|bc6WvK`-WuIf{?VgK)7Yqn2XvGbwo%C04a#%j=!wq?-k3TQzAe z{*_kkHd+DN+1S^E(EoAqlVRL=YftAGhj*S;%fWQ3-$6nR5b>ecQF2hz0)q z0+wxDBLS0=_6@8Whq_Et=nsFKg74kc{6cSGtzlls)3S2cK{BQ?FM!#ky| zK}3xX>o_h2aq4w06!JfOi(f6>&eP}n2L~i^WEcf zznGR$-{#-fnJW+P-XwQB{5lKfydJGDPM%K%2sX&I&WjB5W(T_EI<<+_K zbr~3^__hd%BeLB-{g<1^Ph9)pp8$4K zEWlIpT(mt*Z*)@abJ`NcwWNK$Pbg~3o!9PkN7f1eCr`TXb?y5;$VtX zFkXa>_)f}^r^O$qgcuDclf_97ik&Ma9x;u=NUp+D&)kgRRtomFhzvS(I!WIckssHG jpUA0Z%3Nt$<`Oe)_L#fP0W)i^HP@kRwRx+#%FJrBU3U3rg#gJ!g9wV{*p3urTSAf*Sy~f;%gzFs40{`Pmibw3 z_kf{hRKilkqVQ)&SO^hmN0Bfn5n$O0SRg6!Lmu*wCqJnADOF}>cdJxEl}h~J2P@yX zx4Wlj*acF_TNdW_?c2BS?|07m&bj@ao*pZPzh8Z;`WK%+8H@dzZlZrGZoYw^^C=P* z8;&uBsYPX2!Bs1&C2d$!s7x>FC1cnSd7~IFC596vbJ)avoF$6Mk~M6JXJ#?And&Et z=~B;dk0?`%nNsg?AMzGUy$~Co$I`3^*M62^y|@mrJ~j{6`K+G};JSd#XA5v$$QH6i zxGrLg*%DkAv!!equ1nY;y93vyY&p9V*JW%4TZ!u+TgC3e^$vD7`vR`Z*=qKCxZcU` zVOd;Pur=&nTvsx6Q!KmI(+b7>45l3$$|_#^NvBeN#&*UlWyi+7o*y4~vZ`lns8q|Y zr){d1W)#%LqtwW#z1J?_|7aDr${MQvaMc|hp$fsDj*Nld2K=1ONNTY$tjw-B-{>l? zI)-&Vt=1KkYLhzC8cJPtjmfxcxJFHFXmzcovDhw+Kj9{7SpW4gX5boMA9Kx`^1QMM zyMR1zQ=UsdIK6L5zj_@kW*_>Cnc#CVOa!&UWcv!U^SMv}tkt#K!$2 zGU3Kuz1@v-hJsDQM$`5g?QPp{xyD$su75XHhDgvq7OU%j7AvdYi`8@%-=*@?*!skh z7+_&GAWBr?T0RKq8fh)8nQACCm8H;6YBKGnB#3;Fq=$G4^WYguXxRlG#4h|7ZB6Us z1x|{<)14j8s3>Y4KU2LIMbke&(>z9anR)p@^ZcpnR}TX*(+6Ij`q`DK^Np$FFE)R8 zvU$GIn!LQyQwuEH!~3cI0ZQgmvVf9>lt`QaG28cz=Xt*5cmv~k$JtxqH(}=0$-~tn4h5 z7opf$jiikV9jLJIQ<26MOEr~#i4?V8;aSw|zzVGzt)Rfl3S>g83^J8zOeYa{m59I^ zaxba`$f;MaG!K5znmFEk=?$>~Syj%2#1(n5l+--(?P+$+s=sSim8$y(c*PNV9}`d& z^>=ZDuR&SI(El&=lOF0PK(eNF=_j4^({BxH1^&7KIMha9HhBxkWUAxXQ>Ye+8on4a z5gLUrpH$Itg<8EAP@RiDmP&qFokim({!1juyWgV;u|V z_y1kgb7+TRDi#nXCL>eejDH2C9Scc{nAG70{2Ur|u#m@9UJi^56bMwv&KQ)4!3;v2 zzpU{nS7@kU3X(%4P_7H}lBgRI^J3Nw-@F*Yn7kLQ50hg-ir-_Yng(w2-u|Wj)3iW! zPheKiURs(f*_P_RRCk797ZYn>Rz>)HQC#U(X6(r z^;A7w3+DA%d)4bbwVp}6CJcHF1|73fcdy2*KEqi10)Dua*kJFH80&-PmAQFgu0PBT zgt_?;rg^?Fnb1ND+FFPwfWsLw80QSn9I0}?F~8IHl5WM#7e&?(St)S;M8kIGH4=+H_)VLZ|VEsPF+wNI&yGrer;mZ2z3X zD_KMuEFxblj#P@(QrYXv<%kn(vPo&WHb_GzmmAGHPlKgmyty1FTjyo)QVy&hl(f8~ zu+y{Xz67#dbiAHiE}Q_~Pvvq2=V4YVlx1Vo{AQYh@=i!hQ$~!9eF(A57Y#n{O zdF*eePQB22Q_OAEN|swJu$0zBGxFFSq`tF@64G^TQL(i$9%i9F8zM(jfe+l>8ATZN*@U zL6@r~I2RS}ddYAS;5)W6;u+xoZ~}#$ol7AM-HIggN2pgKF_Ia6k#b#<)8Q9F$SRvK zo_|6`huo8xVUhF@%842V7$>vdfpMbdA;y2xX}bU8_E6r&cwO_&b<`V7M7%*0zTX+& zG$di(jhZ3M^%>t>pZQ;y>qOl**J2FG4wIUw`zEy(XBlC5?}kYYa?(Ub#skB7cVNI+ z598BQfFJ@^%^K^e8Dc!6 zFtOHHrfx<|GTw_2f!AR&M{A}(>Z?I-=;_}BA|O|hO8!Ud*jrC^^qTUCKuXL+<}4^txez!u7hWG$f zRKo5(yB{aD;##f+uPH&HGk89~6pDcYZ3f*jvzCA#^h@{%N%2&U!NM5ek4RraQW3P3 zrnZDD3l$~apLTm7P7u)=99JSFZpIfH14JVe5t`#iAvBUQM1&?ZoB}FCoRH7k!Xcd8 zwuF!|5)mU{ZqDeyoY*BZCJiUW!P;>Z_|9Dc1OeMFunJI%p)8}fZ-!GRzsLR(7?!gZ zHDkK;kJE|{GKpYYfGi~r0=pWh%V=S6b{pz<;E2W?24`2G%>YMG;)8P|iI798kG$ns zOs*cF1iKFN!cY0CmppAUxrCEbKn8ipr$SQ!0|-0-84?fOzMkl((?iw+lUs}PPhlET zX!p}u`U=XrdcZ7_fdU796AbY;%zM5F4in}m)J&L5`Iw^!ToiLcQO}Jz>AKCWkXK^y z+wrPwdTz|Mp(XU3(0E-SGrK`1041uowd8Ej>Wz9pdB!#qvWRt(21MjV3mux-H6Sz| zG#dh3aAj~seCE&b?g)jBfL2`h!e(vv;>g02elF134;9yh9wrofDCeaRtX)X@{^G|KwDVH!cNC0 zO%YCuqisS2A?hOp%~YX-$bBL_Ku3w_V@lwGJVv2%R)FhIzyCU%n$W>Rpscn8giOL#6}BcE5tLFn;j^GAnAcz%DOxR35Hp9>tDsAmvrG*5T;joUIrw+cfL zQ3o#-X>o@3z_Z#-M#IFZInjoLyt01`l@P}Zh&Pa?iD)zlHdJJ}=ve^`DCgzb(y0$xjnniD`PpxzBY3)R^*JPm>N zZ=FDM0V!9*KLIj29z+b4Vy7Bnr;ostX^5SwbW8}fqm99bh%nU92m(-azVr$FYz@Fc zdldHKpX?tb&{7+dNw7(jqGfXtjBKQpFpMb20N5sRx)Dc9=+V_`0R+j6egYMwG5{1R zNuEljeF(w~o=ZnUPXZpa?=s9SN#8ScPjmqX9|9_(pl$7LIAs$0hH%YCDETrHqIcVQ zWv^pzAdehO?h$$O9k)j1UN%b^<<)+4ty!jJ^ihJ;C zOhnWBp>WztX)y@YAe}7%7onl6pzi-KWVk?tIIrw!BZH4&8M2vfNuOnR|2#CKTj%Is`e0;Ri<} zuoDf1Gr>U($}z!mC0E&%;6o(T58>>;&0tW9`pkF;qK<3)p;$NbK;1AnCcYye{_-Y; zyvVMIbGjs~LU6P~XHr(TNYcTPrs7{{ykVPJ@i2dmlwpkDDI`%~B z;eVw)A=wuq1Ob{4#Y#cQc<6tG!sDXW4Z9I~8{~_GyYaobcOzI~u@~4C{~HWaXB)+F zKEAyWYe&aY!8aJh>diK*Zyox@%)w*LiOHE)-FyXD=<9iX`|WDGMPyftzsAUXY6>K3Gw2v_v%xj@VFL zujz2l2-rkv=xBItXeo?E_)y5V7O*`LYa#2I05X5R#OE)msH&o5znLj5~eso#snt z@BJd)`So)LS}&cLdi$)54tES-PsO#PJ^K|!+!qz;F{lz6Su4Ax0vYs`-S`zmKi1Th zH>S@wWEhvCu_AzrIBe(iUuzvZe(j^z!l%)(MKGAbj(Q2d{hy8WcAC~0tDVID0TISbb+t1oQ_YmQ#I($LX4>pAx0wTG&Rl8UgR*7ja&w{C|KG2Gj;sIx diff --git a/src/main/__pycache__/Cheweixinxi_v.cpython-37.pyc b/src/main/__pycache__/Cheweixinxi_v.cpython-37.pyc deleted file mode 100644 index 68dfada6b00ad717a25369dd6693ce4badbbf5b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10682 zcmd^FTaX;pd7i$_^z_Wmu69@VMV2teT2LfFzTrp?AQKbW-Y7^8&I;8q+S8I|HJ8=t z9?()VE@T|EBD&c@MhFFV2*@%Cl8hmek$|Mim4`g!DGyXXrOKMw-4qp7@xVh~lJ7sK zyQgP%R)~r#FWId*efsq2bNSDA{{Q>`(+~CZSTX#)^WDl5|GhO9`yJf`e=0H$;OBgd zgvCZoT^2t;BUX8)CQNx`M4@U%+)GTg}$sI>c^gU&Qq`b_e?suB+Ic?8~@* zfvsi3xUOb*vAc0y!_@7u;dP#tFXZMh?byh$;-$Ab<Pk&@jp?{+xJFg2Yc;K^vDki%KjJ2;ko~3@GjNS>in(T0 zc~;qumBI`XBN(5)?N7Jw@U-tdyn}AW%FOn(qO;dCxqTqZ@?$RVLI0I6BAI#Nd~@n@ z=C98;o;$jRXHaiA>BWn-yRXc=RH@91xkA=& z*LJ*wV>?d1T=KNNw#!Xahdj8QbM4)e=+f&Q;}w>*IWKeZ7T2gn-AmwM#dciL1Mj8x z3{mTsF}@sk|Fv<$Eax=7AQ zus~Q;S}LQpM3a_lj3;aQW3dvTPyZ}d)Bhq?Qhyk$>MXurE~# z3r^QaYhle)U8$-pg?>`gX*VSS;{zfMK=2f1B1C{ZEqzPit=kGMO7rwZPTSwpojuMz zQPenju5veuX5Ts2I6+96d*M*y!kHV_jsh#QhhCWZ_0^dR^_i2;HGX=!aiQLvzOu$s z^K7_>leqaJO8O}opk$B|i4b6A_vA#5=ZcOuFp+bdr^g}D**<_s zd3os^_Lp69^J75Tu)&v7+XPl0N-XE*9KMfpIwb8R*GWCa}EFFA_j}3FhRhm56jmrSN5x zbjWFOR8HJ>YGp>l9XpoCczD^0oYT@wOw_1EiEumnchAeizC@`Lsc*geReV#@prNOGntcsyb~j zof&zht|&1#KAmvmZd_VESUBxj*t-2XABED33z;Q0#Y$$Lq=%fFjBGBmZF3Dr!RFndp~QgGW8pQtfxEhs=QE`cX>m=L6=73|Ui(4*z(gkGCS{UJO?A|)jmQz25= zr;JPiKfWHNp=e1V&|VgrhO|T=+LJ0T1r`cA2U=%u40^|41_99*bUaEb>MAIOBpV5o z>%ulAYDUC1nKi?=O@^>UZ%6CHURl`pZ?jZY1BrQia)tjiEx_Ir*d(-=>JvZKh_m^=bLDwV1hI!^+)Rwep~Ll*1TBU!77rxT$JQ_ts-HtH;$^s+O(>^ZKME z_gYW2XIifcK2QZ85VQK^u^7hM7ZAzEi8l5wkFh@JYMEOU=K90jK$siE_FCj`FB8gX zaTn#p69DBLDTQIfGsh~NZ_Dkqy`)=qa|Mw#MAkDWP`*9?wC(8y5VM6gr<>c2U6m`^ zBf;+UjEZA(2m23~JmbUYODaH}XrSELU!g)Wc>G>U?xSQQlHvXZH?$-pX^@dzp)gi1 zREj09FPkN5vE3%s>e}EQnQV4n&iOuQE{31Ya#C?#1}|md5`fc|_T=|^7Tp)YwhNBe zlg);6!279eHt#&hiusakjGEs;b98WTzWT8>1}a~NyC;~=jcdo7FTFSW?EB5*=Vy-*sY8D4Z2f%WSFbdm`NfTE zXLjaGu3dQ49xE4bT$=*(-TzY5m)OhWcu|j@qznd@GI~zxi&HUZP>sO97 zPk%7;`g^k%-)Ow`V)MegyW|CL&t7^Ko?O1Pr@Vmy$@xO__#2HAe>-#LC(RfCq4CU1 z&6nRnqi7toy?OLV*mU#w&l>NYXukT!?8VoHt?O5=&YnAT{lj|m(8b2oix@1LZk+pZ ztN)w7%0D=UVn&^TVhgeUMY5Dc{|4TPk3G0eZ!)y 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 diff --git a/src/main/__pycache__/Chuchangjiaofei_v.cpython-38.pyc b/src/main/__pycache__/Chuchangjiaofei_v.cpython-38.pyc deleted file mode 100644 index fa86fc4fdde63244914a4463788fd13566997104..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10357 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 diff --git a/src/main/__pycache__/Huiyuan_v.cpython-37.pyc b/src/main/__pycache__/Huiyuan_v.cpython-37.pyc deleted file mode 100644 index 7bbecf070e616a63d799647fb33a1ec58f49d0cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10606 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

ruAGyxClC4*U-eXqfE) diff --git a/src/main/__pycache__/Huiyuan_v.cpython-38.pyc b/src/main/__pycache__/Huiyuan_v.cpython-38.pyc deleted file mode 100644 index 6cd710fe140f0d610dc46282ff982327c484511b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10205 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 diff --git a/src/main/__pycache__/Messages_v.cpython-38.pyc b/src/main/__pycache__/Messages_v.cpython-38.pyc deleted file mode 100644 index 73fd120388ae9e49df18d23625e1b744df17a429..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10224 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 diff --git a/src/main/__pycache__/News_v.cpython-37.pyc b/src/main/__pycache__/News_v.cpython-37.pyc deleted file mode 100644 index 4bc2c041718914bf6250e918c82271854712477d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10549 zcmd^FTaX;pdG6~>PtRpnySi(UC5*8a6p4#(IFil9#01+L1L-e+ zQhGEk%Cusp)Hm9Xyv>q7RYsSv6ieeez%r~4*Fo0Lmf*US4X{C6m$9X68LrFOa<&53 z6>KG2h3iVTnytZg6&qqV;kufwWnaK`4O_?7<2uA{W?#hhCUy(^60U36t?bLVet~UZ z!?>D#NNc@=f(Q91vlgR6QQ-P~7o_m0sM`ZMq|@p}M2X9tp+G68Yyi}7u)>S_}Z?rE*A zqEw$TnBGw9nrqI)T+=mcT0^hvHJvH@bpDVVuR-Wr6lUTY+oHHuO?_6~jwQm-<0BZD zvF*>c@9^~RKDdK!#wslD=_O~}vv_`gmKDZao<{%GFCv+J;cRRA-R8URG~YhiJbiZK z-1&E#fBoV7!6VJrkFc_Z zeLU}S3)Q{k7|-Y2{O&1q>Gh5AD$C|MuW<1e*QrIri{oK6@3^7|-be45qSl)VUxmB> z-ne;cYTv}>$tiSP-h9s;ci*|0P2|esm9JIqy65iArCg!Bc?1&AKCx+X%1e{*vphdu zaNImkp#i5KiK5zSN=<1Q)e`@F4a&l0p(TmoCzj=(kO`ON%8f3IGZHKbmXQ|6Y%j`` z?V1yby78z|2FmH5DRtv7m9q9DrDm|$K8>Ho!p2uASahp_-9aU;?JqH1BdvuslMS_| zu_XFQ&ZOL=goqD;6d=Hpn28Vp^0e4(5w~xvv<$72=Q-_k&v5oQdqq+6_?hbMD4P4t zndULV#{3Hhn&(bkyK)%lm^<*o?5{7+o@>k=f3Eqnlg)FD*36~#o>pMPX-?wiODGwj zWRQ}jlt@ef9lNI{b39jayurzw<2+g63vl6C*(?nuoAvC9yEpGchV+z|%3(+4%Wh!| z*cvwZ3Tm6+>4S&m+?>PLQ32scCaaP2Y=MnpWxPfV964#^l((lpi5`InFn2mOaoJw~W{fXABNrFslf zJx`nVI{abKi=%I(4Zq>UXW%7Moy3Adhe*iq<(QMNIwE2rwZT_X(j}mbuMV8NyA4?T zCaOq%phF*M&<9v%`sZK9lTcP9_E1f4!%eur-XUb=W{(RT~XeD(pg+%4X&& z#g`Mbf>6N00%CC!;M_muvhsl!b!n08trFLcvUQ3dR?UuwXT9#$*OF3u;4E6*o2$cVli$ z+B4WK{aIMBeFh(eVv7l3#kVMBt3YBy&P_!2k=3z}h9d$Kf{_{^QE*s(Pp(>YJCvKK zF>Eg?IWH!mCiIk$pr;q}(C80DNDcaM@g2X0Tm6hgz?G96oBKKP#VgVHa%@y zp-o5=1TsCY@p52(pjV(-#uexmlbHlPU&65{M`&nZ2$DO*QEmvs6R(>Q!(-J=-|(2i z%)Aq=4`XCwi@(E?H65JfovGFS)0BXBIxskBFC`6`Y)kZG)ngs~#Qc6@)X#C18w-1i zly>#Nta{u{%-Af0o|6rwZawvln)MxJ*B$jlEisX*8KTXhDI0g`dc33Oxa@hGa$Ma% z^r%vc`y(g=i3Wq&M87j+I=3q2yX2gygu#SLuGP@?#Y7z`%dWAB*=Fi?N1wJoTbo(? zbgbO1HM;<&Mmda8^wll3r?%AWnZAZXvwBRcC+n$NFt1PAa<8Xr=^3LYjC~EpUd-x~ zM-_~AYtY!MYaPm2Pe~wo|T@9|^XlXI7m&cd+qrDKI{a zzNE@Ch}Fq0{S_)C+s5yt!G``kh)zq5Jh$n4*rzk2CN>*NQsufI2U{*C6_FSgEI z+$Aq~d+x%s@W=|~J(bN25H1v3N8e~3`@7jwKW)AEkIiRZYQ6j$G>XPS##@IEg-y4P z{=E6#vDT|^%$E@ZAG*3L&{F?(o$zilK|KjD~ z_R!T!Z(n`?Lv&AVivhMyKQs5?&t`w}+vdT`G=%A2pagHV-o4y>eg-99ZT)Ry?%aju z`zM+gel^!Pynz1+MZz~@<-yi_>|{<`d=af-iP@E_CAcOP?s|!EwqQtkXUsFh)JOR{jJ4VMp)@vV1a|2w5XBsz|P(hSUZ+xePD@Xr9-ZdtuE_ zvv}Qd?U^L&2X9D$HzdFt5`s6_HG3jmGsTD|V3X~MOx=puaJ(7e4HMuEmOtt%L2u~k zzXIMMrAQ^8OOAc@WJjM#pEo4MOf>%ETGHnYKlbH^vgX1fnS=s_N0j~&b0-QqA z1pf%$*Vgvn6d}(bcCj5}33V#*Q(7_MJ$;G{a4*?~uTcY6-QN$=Bb8bRPJ3NvX5ApI z%HT=O#Gx_Fr@m4%p)oerW3|`>{8Q-Bhp;bVT_HTY7wC)q4`DY!>$tXS!v~8~hz@?# z?}Xl_+FQFD$pXJ!s1@iIL+KUhk(AfTJ(0f~tj*bowiQD<-YL}pF||chOj6kx$ndRz zUq%n(!8=et1QiW5j0dkndjY7R?uQl+bP$Y4Ns=4h!#EoOU;qG^A%4n-B)RZpoCz|g z01|S&PlZMWrV`KqNF+46ok-D7r|WG5#<>>bAH#?w(eB4R`U=XrdcZ6afvN|T;|x(h z%zLSbM-%)gx=rv)`tYN;Ule{qrGGB?g&yJc^)x7T1c9l=5!eQrP=7)Zc0tbShMa(x zsNPndy?|y3-zvx04#F8(3{s2;@aUnd)LSt^5klc1q()d2F~=Vg=0F3*AB{PTIsPkd z0?hG$=|G(3uOull9Wj5z6cKDTYjj`)Ts1V@8)1-5#i5bOVl@?U$rx}K2kxFgZ3K~m z(*}g!;wu#3gj}kdg>usP$w(bwFRWu@-D5MB2;jxgHsOQt^#Q_knov&UoDn*pyhOA! zDbPWFsL)00;7QC~d<8C3=svl7tEJt}4<~o}ZqqLK9?j`@@mzvPKCe!~3&5MrpC2CM zxu*-oDZ0P(X5cn0^gDX1I?r&YCiBwXQ+QQ)Ctfnr$viEIXSaKa#;cQyq7LVUW&hwS zE)F>m(V!ECh@O+6Lq(R2o>sIriKW()W%E#OcbSP*;)Y`9BCztSjsT~ zx(S@G#LyCYboE*QL$a|SK`ChrAcc~WM`I};hGZjCJ)&F-K|-r9XkS|^{V5d@%fPXQ zz>FvekJJ_(dI<%zlinJo8+5C!Efu^t>lb_+#{lqQjDe<|s!U z1Dc`*I>hyKpr$(xEo~tM5Ka(0HsBpa1oQ`>f!bPXC5YA#9d!XDAxvna{{MlA3wVeV z)b#%aOfucNqX$g5Smqwk@Jy^U{0JQjg!3P9B)Awt_-<6^uI17TAYN(tEZfsJH3H~jK)4n(#A$_tH zUpBPq6iQK_nOmV{aE)zMx@i#VhLJz>lDSNqG(j@#FE!WK?dfLm_$xET?W8x>n zv9b0pE}&M&LWM38K_*5Pe{pb6JI*uqZ1)kI-(0cJ|QJ*wH=Yx zq2JCQJl33^nSbf^8+1g-Habz!e%ASL9HIHVn|C5s_H#&9zI>G=ON!VxqFM}^F-0Lf z{Bw$)_tuDqqq3ZqvJ@ZiXba8eQ-4v@;Z%;)jhX>xlQsjfFgj7+6dE>j1-_T^jT=m5 z#JI_N7QhdA3*!b@@81Ns6TD0CEMnn_>OGi>5OwR~vAJJP%dl@E0;Tid4#*6#CjdYNJ5|%&Wk1S9EUD}-hc0-olQwvj z=u#C0vFDUdr!eGP4EU-brSb}%4d3k9^85=QUx8_kRq&-$Qhr6XX|L-}3ab*9m zJPupq*I~Oi$wRPBx$$v)T!j-fhm*I$$pYZ3FmY5R&)w{*TPSX#55pWUA@X!s#VJrT zniBUVdFJND{fzujh`z`Y-`R-oR>TJx;^PBxS}u;1I7QP%_=oSH9QjZDaY~4_aI#LE zG@sbAV&W0=Ck)|gJoT(C7;d$g{}wSlhYl3!(;xEA`tcJv%}QFUEZbUQrL45I%Nn$@ R)_Q9L%GOwGt>xCh{{V60ffN7$ diff --git a/src/main/__pycache__/News_v.cpython-38.pyc b/src/main/__pycache__/News_v.cpython-38.pyc deleted file mode 100644 index ba9e3080e324fbbcef8f18b0b8827111fa5f83a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10148 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 Wx!oKvbLL9(9+WLJmzxXC{{IH47FVDE diff --git a/src/main/__pycache__/Ruchangtingche_v.cpython-37.pyc b/src/main/__pycache__/Ruchangtingche_v.cpython-37.pyc deleted file mode 100644 index d63eed0dfc87db615afdaee7b84399dcea5e9d74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10739 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 diff --git a/src/main/__pycache__/Ruchangtingche_v.cpython-38.pyc b/src/main/__pycache__/Ruchangtingche_v.cpython-38.pyc deleted file mode 100644 index f7434a10c2d6d22d74baf21b8155ee856577d292..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10338 zcmd^FU62&lb)Np4>FJrBU3Ovl6#^s^Eg~qEV>?p7wuB@rva}|E%gzFs411g1S>|WC z-GdA@qY{=P7KJ}M!a@j3JF*KFYCi~5nIR>;o8so z*k77p-G%EN>~8isTvxKS><@6g zlikAxa9zdLv3qe{&D3qNf%Tr2FXU!0?bzUe;-#N(%B8KgGhQw^HtzM@__#BmddB8* zrQ~|rwn}kEL0vq`@XGLLt~BE2OC!UhR9RU^Z#-0SM~A6S@TVhV;I|n+XFHN=Yz)HL z8|PbG#Z|{3>a%K1L8&&WGp(-FRM(h{yM}92)w)*Gsv3*!)%fFXqKYNh7-I&m@r^Op ztSZkb+pu7mNMi7U>gij)xox|ref`nxbTeFLwx<=H5zplIzAVcRySy9ySMEYG_0sv~ z#FfUCcN_1VZk#>8e)`gt#@~E2bNE=}&121 zp9KICOJe|sS;wBD64&yfK-WlXVa-%ssj4i6eo~WZHzlFuLnS@PQ2NUTuFP+1FvrBG%7^oXC_%dpnR@R3V%egs+e~tb>#SOj=Wo@JXztB~BsH*_Xs@9>abkbG7HLO+m>ww{43x@;ATL33h8OO>( z%}DI6R4TK6$KrAMwEhdC=L2Jpv(+R_T4W4;% zf4YP+ejk!Sy!Dw|jNe67Y4B*X1sSpJJEYX#AthhAe*^DI;6O$hwO{F1`TZ!HA2=mE z4W%>IE*)Ps!pv3GNrUOk$SZY4iMjE~gd2C`(&)jsY0tsT?bZ1Zv|3z9EU__GGV>%m zBMX$89^#5bUKijU;q ziL_1``a}3OsyehzF%>d|#mUGNXyac(X`3ubFOzoMjGsf}4rF;!<)y&pK$$?DjKrW& z3}z7Se96Y61fs5jK1gDbK)EigO`>K*tc_VSd~0I}+wyL-J}i)h?ffoFRW%TncMmS} zpQZ)2y8Xcg5n(VH} zXjVJbTB??=2J`x~CG}cYwQEwZ3j1D#eaEcSeQPnRPchb>fHdwTirBq0#(JQFWo|*3 z>kV^#VQwMz(*l1#nb1XxTDpiQfWsNG92X4F9IkM_B{yPwNw@6g3LqBG1*a306Pk^0qQVC#AuY}Sl#-1| z272e+zmim>K`L^E!f?4zDVDsRY?dg(Hk(wZYlA~%vf0s`^AxBn#+%J@GJ0MHFJ-~@ z!Bb0n@*|!__eC)1g5z~%v*85rekz;II}fp9z9bu?=C{)X9o!pv*9Mo-NfuIXWIFVQ zmyjcK_*ZC3w9EM;lsr!3NMhtq$!?V*|1&DGsDsUNHp#FvDYOn1-q)eRX%q}?IO9lS zT3T7Aq&57fT4W}z^nltd1GS0keyQNZmeP*`;>Bsu1wnlji>#z#>MN9fEofn(PmJPd zhn{9YFVeqXhm`+0`fSr|WQIb`b`CedwRDBvxIMkb644#WpI`~>B$KQHOUfJ*dkbhb zU`>1%O6-O-c0-rIJLNKAt~<=hy+Tj1S3>8i7rUXa@@05*g0tMbe!Th0`_s>T&^&&A z`WW#vaphO52xOIfBMo}jdxydUVLwtyx{HW%g@14%a`_)?_&UU zzR*1WR^!Bvr_MazeEA<5&%V-p_2+05jf06dj~)q|ZXW+ZRhk}x$XldrN@1J#0-lz5CNTNVgPe8?rkt9vL3?xH|+-eKW-1`EtuCd-)Ki-kJ zG~p1Q^9@82M&76z!f2oKjrO_!h0#vbe4{PKkZd!oiJEU%t8tbQ=J#$G)*vShWn?@s zpLYjljCHYYkUlcLA%&PV1EL690|U(xFrDIF80oVtQ8Qg@GR1m82hyMepaFsoSXFDR zt7?exjKa`bW0{&6G0b=`LI+-h;T)}+{;019y`iUn59olDB9;7)^y0BTZIt7)GYJOgs@I06h^ zEWsB1wF=eN3(2Vb?fH5F?iRGE%|5&XasU!RxkX{FKg=x-b4#E$dm|3b(hBVwp#-4n z8YeC{CSI7Szjqs2VX%_Kn|KL&3qG;5lwU;={~9GBUx-lqhwxyAw2YTvd1tudIG?RD z2KqjmMhK1Jb!W4C%G`dm#GVADfqn05D|iT&84N<$aH0|XQA!@8Nf$<(KS8-r z{|t0@kOGddY>W?4B3Qu=%86!06Hn3YASJ{I_%|upLWz(>haT%B0Yt`rh04xRBr)A5 z0fAA6CW}yjpfsQY>OwrVlocwyWva6X0o)l70?-0g6%-M2%mn28!2@S-0hmijG9imlfey|Oh7L{8$vH^sKu-CF}Re_m5%}Y z@s5xi-U_tBzWw_iBhBJkt_AlgK_NA`K))2afdX&_-7&M8fJ5|4I15SfRF1*I7~q&l zr$Q1Ew3Vi|gj)+OCElNQyRf6MORI2ViI%t-f8Q9O8=1(yIe8rWMiPg}z6s5zK+7N} z@blLG5Dsr^laM_UVI;tA-eAGJ@Fhzo%_jxNT9Fp`(H-#wf!q$f3S5h!ET^|`0aYir z-~Ixqma`s}W4iQ}(~1sOi6C46E+q~oyB5I9XkpxT7wWe`iH04kBqTchKG9FRx2y+- zw;Jc4z(AzX?k98f6_j=KfLSC1H4X?T7=m(`_d*djCfHFFnqZgmVMk%PDC~r~o*#D7 zjhkOBuZHkj5v+mq{IF}GOK3Zx_d0N9cH&H6N>p#@%DK?h+u;r67~4+ZA_hu&5P=vi zbZ+L>gV1}>ZwPt8t-%%Hn!m)m!xT&k{%8haVDMjX69A3>a~sT5fB7i%r6C}Xz#k&P zMwL!|0H(T%dp!(-DLDBtSiGtrco+xR5&+wN)JCu;I0`^`EU`ESaF7GEMrb0HpN`Z4 z;KDi<7CSy^iU3<2Z4)R6R39RYrV33&t`tE6no5KuQvwp?JqpFM3cP>%z1QI2gwBpT zS}E>!zBRtXcXD>YQ)ov$;{CzNMub3w1umk0)4CH&ou{sQG@!kfrwYE1pTu9?aTAZ(dXb^>d8)SHF1 zP^sO((-3R_){Zq7sB$&@3!Kp@A_A)vP}LAneHb=PLqJuf(?lpAZ4CZIgsq0w5SXF^ zsE^@xYrqcLqd*w{_}~h{EwwS31hYgbS~eHM+D2Ll1B-GDKyDIeA91vV9$l>(ppfk8 z$52En14f~k)nsB@jYOFT>xG0B)sw;teh0#`ryYAUIp|<@57Q%YR@DxW3%)|K>3I(&_ffK!66zSB6fMw!tET}kx3YTV z-=892+=I7cBFf$iwbN2fOF*Vp(BTuH5n8-5>i+)%hYL`MGtI6RIQSUEFp%lo?{h4$ zT%b7?)ibb0VEGza;sr`NSW4%CnheEUo@2$rs90phT4&4qXvOeW_@^TmZs&`*3Agjx zZQD7B?FXkOFc@`(GeJoW$}vHDC2!fA;DfZaH{nBp7MnpS>N8^#HaxEJO|ecEg1TYE zOnh`eT;>gmgOPy|2YE@Dhv3wOPOPlXjY-E!o?grsa}*7hr@3NJM3wXW=P&ZyMJ!SK zmYefbuX9wM| z@J=6oyYb@rdq0nNe*NsB=8LDM-a0P>$87`HUv}+i&wfP_5=KRO4CaJJ*2`|GK*ob* zH+}`tk2Q7e_34Xs8R4Zst%&U+MB6_7SDPnJ-uUp<@M&~x5g2B$qF%ypf3VHceix4- zOn=ti?oh;Ym{Xi!3qP{moO(*0i?(mucckI{hJd>SL!wY^TB8p&h_?6oR?|}WK|C8+ z<5}`l2;Uch(hZmKsZdIOP_$vxb;pG%2upJK2236jE%)oN-5cc5(1zT|2)-%8xst=l z2jH{`@WGTgz>%j>R>jR1HqbXyj+Yd9I>O-;=@?3j`=UIF@)CYVekrq(nj4^G9VPTV zf;e^;=f&b^g;U^}la}J-{R+>76J_K?4LDgFP8v>ZS26L3VG}0q4m|bDjTmmFV1I=+ uv~xca`r?KBo*w)}PBl~JQqwXQm}#@i+-3HeS#z~{56YICE6skh_rC!;>ZKk4 diff --git a/src/main/__pycache__/Storeup_v.cpython-37.pyc b/src/main/__pycache__/Storeup_v.cpython-37.pyc deleted file mode 100644 index 0d7055fe1c8955cefeb66fb984b7ce635ca623d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10606 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 W=1z05nKRd!>ruAaTw^XX2mc2bUX;)P diff --git a/src/main/__pycache__/Storeup_v.cpython-38.pyc b/src/main/__pycache__/Storeup_v.cpython-38.pyc deleted file mode 100644 index 45e201c7c089a44f5a177e5e51cde18196574595..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10205 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 diff --git a/src/main/__pycache__/__init__.cpython-37.pyc b/src/main/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index eab032d545c8346c8c55331a720b66f5baf8c0e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176 zcmZ?b<>g`kf+^mm2|7UfF^B^Lj6jA15EpX*i4=w?h7`tN22G|ak=(@0JiWw%f?_>i zAj>&FFD*0OPm}SMP)cfAVrfoEJWwt^87#b#p@<2n8%+Gt)32<|&eAWaEXl~v)3-D* xHq=kaO3X{oH_JD&G}Z?hs~;bqnU`4-AFo$Xd5gm)H$SB`C)Ez*l42lc005XbEo1-y diff --git a/src/main/__pycache__/__init__.cpython-38.pyc b/src/main/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index cf4d0e45cf640af0d1d72086026739a9c4c798eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 196 zcmWIL<>g`kf-Byo2|7UfF^Gc<7=auIATH(r5-AK(3@MDk44O<;BDsl~d3uQj1;u*4 zK$dfUURq|lpC;oip_J6L#L}FSc%WQ-GFW&eLlF~DH<ES=o8=*Mgs1w2L=s6A z$tkDQ@=USZ;ZE*yw~-yy%01q0cvty(z=MWwsW6XtM9CsXFHgnq$tfvfO6>kf3ig3O z8)()M-Sxe(zI)(YZ_4(PUT-Z4-@beTw_y8)| zbA1Q;u)AcGTzo$zGJHn{(I3p845(=(GEa*EGj39rl?jf^^5v{JPbX;e;4tc)|BDdS;jj1C_i zJRZp`DJHY0v;D(^k*#{vz&0!w+Rn<3E!junQf#QL64EiCNEyDQ?D)demb+ M#m%~Gi*5P;02u%GqyPW_ diff --git a/src/main/__pycache__/admin.cpython-38.pyc b/src/main/__pycache__/admin.cpython-38.pyc deleted file mode 100644 index be43feda1bef37b01edaa9b76717f09e04f2a77f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 939 zcmYjP&2AGh5VpOW&Hg1#e`pH_&V)k_t%SsnP%A2NK=e`&U1~7#i&4~Z^%1RrIfh&fmG~0 zfiBRZC;F>>ZM6@;yIGgr1-;o=5WWdpuz5|7$j1j`#_#a$mqdm#`buPk(L2{3-*s7T z?!q?gE*K>j-(-A3hRJWNoeZh%WU|bwA+vr~*TzPNb^T&io#j*X1@iPbE5V(b8_>o< zlYdV7(E4STR}+`$_VCd-z-2}#fN&}aXH&vG@QY3nV5tM%#YcqDEusa|cCiH>k0r&j zn2pMr1ZDCDj)#d2g{ZIsA#5xJdgjXMsSp?QOszbr%1t9=ZfccX*-jg8JEDXpv%y&o zN*e1;X37TmLa3zmU7+n5$n@k~EKhtVdK=4a#h<4~PsYW(%4b?!=GpjUepBc!p>`Ke}j z$R;b$bwJ~fBieDuQ(5ed3^Yw%O^xn2C^nOGC^Od;K5+Mr+Qv9)Kxy|e`Faa4+qA;F z4o_Nq$*%Ps!8UeMG}-~D*M(+LpB(@}Z)2>#s#3!wl8pv4*(g%nOuiaEyU5GhZQ zd!$H=?+Eu4JwZ|H3#w3r?ed;62RgeLkIvo8LOcKi&|(!#j5t;Zn3xmgQN$^4DFR)n z4UXkFYxtI?fXfgF^M|+3>Fi@RoxeN}qb2JLk;ya`!UjU5T9t{zp%B-lOnx)ec^lrw z`I#=_y56q*kAz9eTqdt5Z^MY%e6O>rx|%Rk-CXL7^*4H(Oig4q(%X8g-(zkeCXFe& trpgJh+$R;z_?Y7QWf&3LZa7_6nY+vD%-@&>xx=i#)2zRXT_;x?k{=unWy=5n diff --git a/src/main/__pycache__/apps.cpython-38.pyc b/src/main/__pycache__/apps.cpython-38.pyc deleted file mode 100644 index e2848c24acd40626281b12cf5e8c8cfee715a3a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 431 zcmYjNy-ve05Vm6%l{TGN7+JG)011f-p(2nN5M3&kD3WpOP^C&@V`F}1Ixw&^F?1_W zz>6?>MMdxmOq>%WdeVJ&=ezsPcjui>3xT|!+KVT!A3j(W3PB&#Yyk))aE=NbV~kFa z2n3lSK~nrc;y}S|1#8D z7v7|LBu!e?yN%U|soZLwzarg+5f%LOj(f?}mYLM-F5}72j;87O+9c+dDJ{L9h$$~8 za#wEe?Iiw#30KN=)x9Rb;tyv$G%>~1%OE1IUH5c-rS_MoGXG<1&oAnl`}H~p*faUs Gko*G6qi#O{ diff --git a/src/main/__pycache__/config_model.cpython-37.pyc b/src/main/__pycache__/config_model.cpython-37.pyc deleted file mode 100644 index a0ded45b350572fc858275b1b5828efdb487c04c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 733 zcmZuvy>8S%5Z*sK_T?^sXm|xT=a5K9K?p^O1O-YOIycK+cDWzc_OU)k995)1c@jll zfDW2G0ldhz2!S7fhKdKDH#A>S}rF9E?m>}nf8 zlZl7#v&FSW5%100yf z2dXkhcyxjf*6W(_A)FYJQD9|;&jd1SzG7K$m5DYB;eO+W{hVdd6?b@27B8pcMnj`I z1ZXZUzkgUI%=dEjMp{#h7Zcw7|ZrWw~vkW9e1 z9L5!IH#^GVky$8*lywZyykGtJdinF?r{g5_k!+cy^gSuTk=h!F`%=EHl|>DZMS3I` zYGjSWa)0-4iE?ghr|f6qZoyp(zjxB*^3^PzFBg-tNcXmP@27gEigEd%+}Ybrb2Tl} zP8l*9JDe}QK#jMdMTL$>R8V&Zg5xB1_&c~wggycX@bTe9xhGR&wHK(;2dB!`#t&qt zv{T-;xDnPxNYa{t!&DJK#J1=b6RbT&Q@{#UgLntS$DQ<{9(Bw?E7=9>F8^!qqeq>U PkMT=Y=)7Qk*5`i!!41p?7My%V2=)QEaAGFu&q^?oKh2Eo`Mw$Z*>Kn=VBem)=f5c--!WJ>4#5tr z`Zjre@2@0NaN}doEs^~3Ik>;mC8mf&$lEgm9jax?QqvLspZN0yERWoFlsmmMjg=Bi=?4>~CBtIAv*k&L2&x@d*GR|o52SU7b(x48A zVl@_x92;%%y1%(DQ!I?L(tIZN8tk?3XLoNqo4YcvtT@hPcId`)J!$H!ekB&RLO)Y; zSx&2a)t&oyvqI)&)+t2=+Kd*jJx9&gp=6D(5K~U=4R8*Up2e?XHxUL10f6s4no0XO z*G74cs(pAQjnjT8I^|s_ZHX(PorfgtaIm>L28h`f-C~@zSsW6KM!IGO{RrRdq>t3N dV-8!%HoU0vzw$nQ(2e#XzFdtj!P$Tfg1<_Wx#a)= diff --git a/src/main/__pycache__/config_v.cpython-37.pyc b/src/main/__pycache__/config_v.cpython-37.pyc deleted file mode 100644 index 94a2fe4321d864913c1a233ee5fdddac9bec486e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3244 zcmdT`TW{P%6!v(0+g-1drgzGvTqIa7o0bZsMj;9XgjA#uH5Eb&(&FwoTPI$78PAp` zI1dnn`qWAYDxvlvk$B;WJ|H2%1OH=QArbitJaNu=*PCtv4eATn@|olDj6L(6?|eQN zs@1Xv$Jg)lKKj7ZwBPV%aOmL7!j)!VnAXr3VR}Rw1X>#D9onEoV+J!LqhmHq@Cmab z>oT@>WOtlK3HlsX`a)}zS(#O!tuU8Wp>>(Z#-OdTadrq=k4><{(2lVq>?pM3>=-)^ z?IETwXtfiPhLOJm%h2X(M7kH#B)$}+-6T$f9Rj`3X|HfJo(E%hf;9EpK?@(_ zLE&=XdIK)CqfA?Zl`dQSx*$Sdg1xDewqZ|qO=jMuYXrv74TD*mWK9?5h9yj4X8I=m z(9B?uCt-KfTHh-bUb*lph38Id!p_J#SXYW80hq|#0S>oAEWZ3lvzFkTw?X^xn~S8e!6FGvMHgzq~H=6j8wg67Zq zCj zMUD_xpC$Y;xc{%leAVm+lOqv%2@S@Q=ds)mcomTv<>NR^!KdPc7(Os!{0NRZisl%a z<7iHx!4UD2Xz~d0N6;^#qhgbrN8v$%I+6&(mZMJlsMA@UKMuVu)C)XtOBP%z)8@b_ zGVNlXX`#k+$Sz$#ZV3t}WYap?q-#`I8C?f;SvL5Ej52ys%XDU_+|gC;n227-D)1W3D4$17Rs7JG&@+K4POh?`)}?`3uNk7eQDN4Gn;DyAlMpR4n7vH- zm!g`_&y4$LGaGp33^jV|#+|KSetwWf57T-t9aY8_S-g5G^{)jWq4>+H^B{d~aLjzV zHdpgT344F)%8H_H*XMpGl~o{Wa2--pDY6P0WGoMS5nNdT<&}1nwA*3ami8w;kI}If zQNo2BYw;dT<~-qQa?Ko3f`+9&a#osZ(BBCIZsv6eVv2Hsa_s3Y@rXejQYMb>k#X?w zcP*;8(>t2z5*kBcY)Ci+!Pp19SkEf zEIbekb4cp#J3nsUzW1=C-bY?X*y{DVP-_4gbHe6u(GjMNA~jHyeC{G_JXMuyPA=Wk z`I%9eZ0JyW^5$-sW)A`r)Oe^2bQf6aPcsB->&C{;x8FT1Sol{-AB>pIf+!F{`tP91 zC-o32tl0*6Xc3*bl%Ip1+Jr1On|=?fE#7SM=b%eg@`9^=Rfujb9&Vqc9jFzfyqqid zL>Sev;!CB0K1Z8N1vB`!PO%Cx VbVqkVJseoG9kdWZOpWxJ2u!a9Z4utPj&tf}KmJ6a={p!`yT~*)v-dFu` zsZ=m<{qbS<^UunL@h4TbUM4EX@uWQ%VN?ylgc-9cL&;;a#jBhd!V-3Dwd|@5p9v>+ zPE+Z|Zp*8Vq0JLx-x$?`D2O7;qVPotr7y~29A!yNh+QblVp8lzIWG2yy(lNdKCvI= zE@3Vhl>-@%;$RcYFy<>P^G~En`&5{Al6D$yGPI)6X(a8%s0oi9hH+bAng-3VLEVFk z!}0LEi%0LOXDng0=Nx%aF=Z}cfBNQ4?CX{->|1=9VGLifgtN+)O=Yh*%2syIT;(;p zhkYKz4rh(NH#YPNL$5gW{8>Y}J$8jH7@~w-mAe(JqcDZ*?`yxTU%#<_{p*eIZ~yiC z>c&?;>E;<3s;+F$=*pUzStmbQIGyni-ajoZyt+y8TeCB-(UtNfHk*y9L{nK0!VU|Qt9bQ=^&nH7$(x5#gL~=h3 ze2UD}&^!Zgh!TkD1HN-_b&Nmv~Hs|;Y5!P+IMh68_qaSsa-{=iE|F&=bY3oC5W=y65H4G)uu>Gxir=$V*(zg3&l2uAF27Z! z{QaJ_{cYhw{=AX=tzW&l{@bq)mcK0wA@z{E$&i>_K9mOMLr4+H|FjI#w+7eTm&@~& z@=gvB`{k2lG@FW=O`Sjntu!lvJK;s7h*maDD`bug0~MaR1O?07IB7Pcb~AG?1hP$z zvq(~?vhjxO;$_I$0F@~tGClfp0k3`Tm2vyH_oE#D7vIN(P5=M^ diff --git a/src/main/__pycache__/model.cpython-37.pyc b/src/main/__pycache__/model.cpython-37.pyc deleted file mode 100644 index 7e3787d2bac9659d20976572bf1c89bbbcee3867..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15770 zcmcIr>vvnlwLdRON0Keevg0@*fT0PEC^#Wd3T~2{O9BNhxLFBpKm~;CIdLS*vOPKi zTREZ>14&lNqr6%k1^Je8X-fmWeL+HR{{jAjv-ozA6MtgeweBZA-QS)$Iy#b#4ePe{ z(mpeDW@gXq*|Ybaz31G~-5pc#_tL*r9{Znzit^u-Y5o~V?8C480svDo3R9U@R5Pl0 zY8g#D^^7i_Mka)(UJOq~G7**P8bxy|nu&^Zs2H1yXW}9qE_O|IXSzi?QcO(sWO_u} zM0qlkoa)W=PNg!bslH6#RDY&lRlcXND2qL#u$UDoY*^4U157)tq~orhFXompIAt`g zy5Xs5W);gwb&FKip3buTxQ&A7!Q4c?l(VNfGKqtH+P21Ri`~h&DCwK9?Cf}jbE{-$ zxiwp{%62;B>W3>+u6}=R4j^B0^?!YQ!VT@8u9WO?!rA=Ok=Tb{Ii)I!rGPw2M#GRn zEDTv&&_E!a8P6yggN0Za&k&0+6VI@mRwlyYtP6RQb+ZJXQP#tfc*a;SOW_%3eXJkP zF1CRU;MvVKvOzo(Y!lmzXAirAZNW3iu4Gr?*~_kGLwKgxHSAhE``9@rKHFvYVbUGFN!HUF>G$wpdrPTk!7N z>{jHi^4@)i-G~=PS_CxHuY&V|Qusv9&y>9f5T-myxR;P_{AeSUu5{V|^my z>gv^m-)#7P%g#M8nl@ZBn=R$0tZdeeWwTi3N|DlC+3aj3SM=VPxv{d%bK~}J6rMuY z0(|kU9rN>(g&i~V_Oa>Gj@x(MeA5nA$dx9hZ=K$C`^`J1a{1B@!8gM*^R7V%X;@_q zz*KoZ9^;gzKU#6x9Q*Mr4*)o7L8+^YN=m0dkoEV>ae zWib!-(p{r$6_2_hfzu7KoSiGThRgfVZ3c5ZWZ67#J#JCHOh^?ird9h}q-j<0#}`5^ z`ib$~hXh82F*@p^R@3H29PNPe$gZ01=yh!6MYU!)22a_VV=RDonf9!>Znl<`+fOy4!RH+iaAP5>xsmm0&rp$;NdP5B6in^nhYap;fQkZcn~ zIEhjlOXO&ENUcShG^WqANt173dQJD=8RDHG>V+1ug(r1>um2V$i)u+@;aW)4hq!--b7_TAan~uoGWUC&TAd9v0(|fhwj*#gU3S(Rzf% zSR70cJ*UowvHT{{1N9Gq#mzm6pdj+)qfW$o^IxJ&Lmk_RfW`*vnxx#D*dk^jdK4^l zMy|8ZT7h%3g8@VKJacYI4&jHedb{F zg&wB|Z~(uJM?;5clpE|pM`3*n+Buy+?kI&#c?D}mX|28)v>u=`k=kfqVQ+B;7S#Hc zcy1)REvU6Y`zmJ;f*?6*pw$dUp28f4YyFsk<_xmrCS_6Vqh=bT(fMv?Lv!rs^x55@ zr{Sb(8zgi#I3bL)&k55Q)BTlw5dEzW7bq|6tcgDoShphS~4?}o3Q+5lo@LL?Zw8a)60v0ZYwV5tJcuc`)5&p z`TPfszrB3vwP%)J{(IxXJASn?Pz^1ed7*LPY~%MoUpoKi8ye5Oy7c>tjW^!C{P$OH zXuR|E(wlF{;WkcOSbpi%&p&?t((it{{G0b0fBMbRg$2K(Y0fM@)Hroc` zxP1QYTzUNSk54U~eC6^}&n~}uTE1eIDD_*8%;b1(Y6wP%uw6!4FCgG5ywoay{=jfY zT`kYtkU;1fH2q~#t8S>6pUT_$*Pyb}+UV#P>NZz#4Z>E{Z#-VBYR79|s3V*-nj00= zB<1ObDrJk8-9$Ed1}Nar49}NrH!QHYeT5NmId+E7^QIrQ%Xw3N7hIOO>fC z&8o~d(#zeXr+;DDY#wvjX_OzWVy5@|ft9)}XL^YK zVqMCz01H~SZ|cyHnQ%6H5Y!=Bm)`+U;z`w14K=A=i+>H8GOUKRwVyG~M4ObF5Sleb zZMyq~j-@wYHDw5hbWBg6PpTKDANozAU6(oljHHuIjh-o$TKDToJV{TZ9coaktJIVh z)(owhZ0T(|0bgsA_V!H|()hx3A>&0`)TK$Ky2+rSLGw@Rt)=64qg4l;#NyRaF3dSa z4Vsp;K0f*|>d;RZ4F`~rmK~6*bq&H(w_!GrLbZ(rrDn`+adZgBewYJBJ>-PyVX8?2 ze0J**#g33gB?oPKTLDah(}iUGZ=-*HCjd-C#>AH5gfks(&Bl$5PZujwC6aZLuT0{k zELd1DPscc$}T1GRlBth)%61$60)rpssk z+Bo~l(p%>s#vxRZ`0T^qN&$*&Z&nV$ASVuC zD$K-dZPnIny{<1RP@h^qAPhi#Hz{R(ZYSy)g%G%9Yt4Y^Wz-{7uWl|X%$U^pPFUkn z$0)!E1NZDaqRia^g&h|r+pRDeLbWiIs6H9yWAjN{C9?-cSZFuQ%h@r{{DVcw%%6IgZ}I26eZ`z3!Ytex#0?`8yJqe#f8Ha( zdBcdz0KXQTc?r$|`e$Zy=44=_pUi3_V9|EE3)Ad2ryJlhzO@6yhj-?O-S0-o_ybeA~ux^=VJvA7wvvpzK_n=JYNzA{8 zC17gOT($E5`uU`MZzm!Ba6l;Zq8?0AKp6Aj_QY;wj`^4$Y+*(ZsYPWng5Ed#*pX(b z7DccgdU=fXwU?j{C{1NF1JGNa-R!L{9UA1GO5vOu*gvTA%n>E8)M9hn{k7cEMm?Rs z>x5y1(+cXd?_%~U4kxiQYArs$#fjJZ=vZR+*Eg{KI?QV+)mic|4*vE=91{$_8OH=T zv8wRO)CcU1PB)$TVfJ@F+1)%IQ2q2k zjf)o=?|;;|@Y2$|i;Xvb>KmwyXWwf)`-i1hK3e+Y%U?}qO1otZnaOuzH2KSr@%%cZ z+@7&Kd}FpXVezARtH`8HD9oc~ksCW&oX*+e^#t08KbVBaa-83QjN1*JWRXKaRB@w} z70J8YFj6($MkR$njcw(1jlJt#PA~%$sf{TW1ON?2XoNg}!c2?MRrCc#<&(EM*arz01^M9fC2AR10RwVf@0yoRT zO0g()Z-nxZvQ;j_B;@$yp#3%MLk*8uO>w92JxN@xGs@TlDkEVsYB>@KqE|D z>Q+^@Ou@LL-pH`ifITVl?Z!o5+`a-`-MD~rs%ha>s+gS5>|cGm_)XTdDc0Q|oi;^a z4sABYDrP2FKrGbQJQkR|!K>I5ff_zZ$gM{|V!85F0FY}+f#j)r+Os=h2J0Y^F8qpG z<%g)`&sUNt&pbQqddpwMkn{XiI)ev?-wQ>ilJ64!NDa*3 z`96eNEuqXGp+;Sx8eHa5s!FjY;1L`qW!pVI52`B;GqT3G*pir=i68Nz;KTDs z*f`4IfUDtv3&8`E3O@2h@~0YpUhq&YG(SL|Uf}}qz3Mlm zOtS1JEUP5RJ|tT;4HWU*>&Ce?l`pX}d^olnl^OCt8Dwx&56T#l7xWpHuCMLaUoX2# zHw%u}!1aheS$l?l6zJ~;c>bt!^!G@57~H=-UF{Y88W_ahajdZTBljJxG52#ycdaPA{Rhp1Pvi;h#uAwXfMRh3z4l0~u4?~Ug#G~Rj(?vC)!Ma79~6MVUpyLY$h>IHWy1VtD9T&=&aTzE`4fj zC29zh2*-cKv*3gyC}LYSeA>S>~oMj>LoOkw*e3fp5V!MFDK1o%UEqNBNq32sfm zmgXe-ILSUv-W(nWXp^#HYVEViY!JM#AA6#L+XGD}TZN`ZohX70h!v_=x2Cvio3?qb z>F=yeqho(<>CE`T^Gk0$)p+|q2!3$3@zEa}zdX@+>SMpon(HsMDR~pukcHrZt2=n0 zbJFY4%B4FMBt3{yWAhSi&1Zs0^~x57R;lUJhiF55K> z0XatBTf}MKZ}^W`ClN*X=ZV;#H5Uw$|EAW0fu;F$Wv00Sh?~|G{j}BkXc4yq2+==O z!!kN*U7^KfFgPg9kX}&pnp9XgjO;^osH`D8gcks5(h9CRhnKBQN?i-B@KS5YxMv^? z#)DMf%#})r5Mk$&KU^GX+U_BUuG+Og69M&|>04#e&k-(i2rK3mn299rDf|)S?NwU& zyuG?f2$J|GVe%IE{Br3J7aJ#kC)v#}T$72uim<=3ZKHQC>$=;#cY>NUH#k}RKW{F8 z5~*I%;+Yloe8op@7ZRVs2t9^`+~Q<5(iW$9OLL3U_NLn@HDkUDf*;Y9S_qqb7kqNz z$ry*BQVWZ~eZ&qk99JlC?-*1^1n$F6hMS%_hXT=|%I84>FFk(>a#Rv{>CCSiXMg3B z`S6|h-MRmPp{>W~_WR+O+6~Bi0R-9twILCL9J=e!_wUCW;l7gPG8{ZM-&vo+u|pzI zJ9N`dAJ>{o8o(bA;9{YN0%HlhTNyJEdunu9=)GYO0LGEOPxwz!AeG|)r4A4vf0r<@ z(vg-K<;DYJapM8x0b^=4f7YPTh(Dx2*d6n8fp&G`oFs55(JsUdHJq==0X3jiuWj+s zmo@g;$v}JGa-iN;+ELZ~S3ETYW*DI8*Q2(3ZQBmB>{VvoW>lTUnE5#Z?dFF&07WVE z%oxZfH7aemKl&TatPZsZwR&Y=_;dq-zw3rUGq!Pv3h8v5(6S=%{Z1JOAtY8#j%VziepL4+iRVen{liFZa2 zE{_H1FRm|bZySL&yIn-mnj@e{T8jo6e-u~7L`;l7%Hk3yqEL@|YrPi5=|Y*tU+KX1 z3a}mU=S!E|g4jOsv3+9q)>Et-un)i9MR0qQ=Yao{uYjLoXgVKg!>`W{tbt$W_j&k{ z68L*o#jnra=i#TwmgKlpE!KevGsRwvBeK<`Ek(9kv(@98u<}xBkKg z@I2|#AuRd zBteF}Kk0*(TJy7y>lD~}{ZC7;d?2G*@J%k&ESXX-=X2)---3YkL zgQ93xZA27FD1uuQWg0qO<8++hM+iI!;0Lz&LsUd@EuI0W_HKLV#%)tKZev5+?jG58 z|H!t({6|!7Hp@Mi`6w64bW^~OIY*t`3gBwoawA9K*?~_--jDhoy%XW2$0(H}Fh*dU z00pc#BQQeXQ37=OcTM;*kBSIbR5)8G*>cq*+%`kOw}8s-ZmDb;r_%E*%L~+36c>*U z3U_C~J!-&UxG6($7oQ}w3npt=%Cz(GneByy0Fi)2vU ztjUUTevf; zKdJlTgD#O96+1}8#>x8ft8Yso@%hKEHJ&{womzBZ=(*GKtt`28@kP3Xxkg-^LJt9J zZKeI231bH!PV8-1@03W9E;o#C6s)%G6O4Ghfhw!+1Vp?Jh=%2DL})r;Dq%Vh(oHx0`r9xm@fb` z^s|^VSv(Rm-IZ#eGwz4M!lQ7EKWkWc8nDw{DLL=XyHd9Se>6CA-@@~6iFp>@ZLkoo z1NK-U?p@EP>-7=4yPja-I_y+fNMtD>;DU{w#N8K_|3%IP_uZ0o!|_4!Hf>f&VfYNU zbn2t!6K5sA%8P)@3-A78@3IK(4USW!GH=u4)j`R0fyfCZam{2j-OC@NMndUcL#Z(W z9h#REcR>A$GcrjD{!0S1DS4iNP~vptY>P4wp9?iBwdg&RB_Ybmq1$n^%RrUNjn-79 z-=%GIH)<;8|Ko~>h(XZBjAV!EYe(j9$Mr?gNsOqqz~U+se43XoKI0jEfhCu2P~3NK zy!{&dp?L-#kP_bSU`@=j22x`0qLPWq7lf^2GqwwKRa(rqul1(CPv$OV7usiikg$-BvZ%@JuLl!xeR z(U#=^r_5vMPznj(9&dBi6zIJ$lH0W*C&T~8G;vaHN{F^Fw%|aE;PB4)cN<32*YX7Q z)I)$=R^oF*el?}G68JuW?F1em@B;!f1ZD|v0%Zd81gZpnLf~lvv}5@x0?!jTP2gt) zULf!qf!7HfAn+!Ew*c_L0*JxulwTyUk$^bQw5BRj!t+kvBpQ90PAjIG(9N(JHJ>zf zz?k{4fKl@b5cSlCw>1gO;faOUlFIJXsdOWOsx2W_+4k!?^P=KL?f{pCtWW znoUTWXExc#aGi_EnD%fm!^vm8S_n}D7u?YO^sTFyOhC~4)N;+;7#Y4?-3t!EXTt!7 NM&C(v`Ttvt{{tnwei#4% diff --git a/src/main/__pycache__/model.cpython-38.pyc b/src/main/__pycache__/model.cpython-38.pyc deleted file mode 100644 index 95ca0ea26e2a9d03a7f3d19a082eaf3cbd3889a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15699 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 VjGwAKtgY7`LH?w+LmSnG{|i$VBCh}d diff --git a/src/main/__pycache__/models.cpython-38.pyc b/src/main/__pycache__/models.cpython-38.pyc deleted file mode 100644 index 7aad0cf4925e1ffa93a425d08afbcedaea82d9e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7754 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 DR2LuG diff --git a/src/main/__pycache__/urls.cpython-38.pyc b/src/main/__pycache__/urls.cpython-38.pyc deleted file mode 100644 index 3a74810c8fff056e11cd45e65b13b8db23d5f627..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4114 zcmb7GNpllN6rLHamMkIT1#Apn01LBNW(Ok_5*)HX2*Dvs$JAu3ZpkA?8ZnD(4@EAn z-1!O8F;{*|PIF3Ca^aH7nG~hG?w%RX7^{*<qE|(GD^Xq;4$Jt|o z@H-X4pD7UTz@Pa#AqZGN0v55PiAaS1F->a5P)ww{xE60FP@pQT=jMv~0oDJ=agO$zwfGs)9Pc$#X^Jeld9#K*g*$b3)i ziK6gIe4fN7Aks`vM5oCDIlT+oJ>RclPhW?;Z@lN7Y9u_xycbEadj`+o*`Cy0>dV;5ufJ&!lKZwO+w3a=;4^4>`;!Bul1f(qAQ;E6p1r7ERSeVm{M^i9%Mm!vfFzTr=u@qJF!sa}s7uOeg zU^m`W;DlK}5lihI?-X)}Vs9%S0!Gwspgreeu#2GjGLN zS8ygQWkVwml_t3z`c$0ki)BwYoigA{OItd5|xHtptyX}7(S1rB|^1Gy-L3LUtmI=X2%K&a$Fez?}5sq@Mo zm^_)9ydDfpo=jtQbc^`y>u;LsP=;(PO@mZ*13NTk`qx4wFt*6_^CmGFF0qtZ=!i zYj(3m8?@r&YN|#`Sl?=Cx&j4aqTOb~a!uDXeXCRsI|wZtME(WH9QXoltiZzE@k>^QfesAJw|Cvjd=il_da-|t)h&!t^p;&!4U{F@Rn5la0qntz!3Bph9hGd!78H-TDY`YR z8m_3KG}Y5Gx-r<6n}qp-W6hJnzvPuxQtY=dv zv)Mu;?-|f&NEM9JSV+kxs|JUOtmZ?8&V`74L}ZqQ7TY{)U|m)B{}tkcPYSGk)mH+5`lq#}VQGc5{2TuO_>;#e{x?)ysn+FGk|L16}5QU2@1{ V^`(9~8Q*^%F(bj3pZYJU{}0;5MGF7` diff --git a/src/main/__pycache__/users_model.cpython-37.pyc b/src/main/__pycache__/users_model.cpython-37.pyc deleted file mode 100644 index ecf13ecc2d6ce98df2f6bfb801aa339e786be74c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 852 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 0: - msg['data'] = data[0] - return JsonResponse(msg) - - -def config_detail(request, id_): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - - data = config.getbyid(config, config, int(id_)) - if len(data) > 0: - msg['data'] = data[0] - return JsonResponse(msg) - - -def config_save(request): - ''' - 创建参数信息 - :return: - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - - req_dict = request.session.get('req_dict') - param1 = config.getbyparams(config, config, req_dict) - if param1: - msg['code'] = id_exist_code - msg['msg'] = mes.id_exist_code - return JsonResponse(msg) - - error = config.createbyreq(config, config, req_dict) - logging.warning("save_config.res=========>{}".format(error)) - if error != None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def config_add(request): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - req_dict = request.session.get("req_dict") - - error = config.createbyreq(config, config, req_dict) - if error != None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def config_update(request): - ''' - 更新参数信息 - :return: - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - - req_dict = request.session.get('req_dict') - - config.updatebyparams(config, config, req_dict) - - return JsonResponse(msg) - - -def config_delete(request): - ''' - 删除参数信息 - :return: - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - - req_dict = request.session.get('req_dict') - config.deletes(config, - config, - req_dict.get("ids") - ) - - return JsonResponse(msg) diff --git a/src/main/migrations/0001_initial.py b/src/main/migrations/0001_initial.py deleted file mode 100644 index 57663e7..0000000 --- a/src/main/migrations/0001_initial.py +++ /dev/null @@ -1,219 +0,0 @@ -# Generated by Django 2.0 on 2022-08-14 05:19 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='cheweileixing', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('addtime', models.DateTimeField(verbose_name='创建时间')), - ('cheweileixing', models.CharField(max_length=255, unique=True, verbose_name='车位类型')), - ], - options={ - 'verbose_name': '车位类型', - 'verbose_name_plural': '车位类型', - 'db_table': 'cheweileixing', - }, - ), - migrations.CreateModel( - name='cheweiweihu', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('addtime', models.DateTimeField(verbose_name='创建时间')), - ('cheweibianhao', models.CharField(max_length=255, verbose_name='车位编号')), - ('cheweimingcheng', models.CharField(max_length=255, null=True, verbose_name='车位名称')), - ('cheweileixing', models.CharField(max_length=255, null=True, verbose_name='车位类型')), - ('cheweiweizhi', models.CharField(max_length=255, null=True, verbose_name='车位位置')), - ('weihuleixing', models.CharField(max_length=255, verbose_name='维护类型')), - ('weihuxiangmu', models.CharField(max_length=255, null=True, verbose_name='维护项目')), - ('weihushijian', models.DateTimeField(verbose_name='维护时间')), - ('weihuxiangqing', models.TextField(null=True, verbose_name='维护详情')), - ], - options={ - 'verbose_name': '车位维护', - 'verbose_name_plural': '车位维护', - 'db_table': 'cheweiweihu', - }, - ), - migrations.CreateModel( - name='cheweixinxi', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('addtime', models.DateTimeField(verbose_name='创建时间')), - ('cheweibianhao', models.CharField(max_length=255, unique=True, verbose_name='车位编号')), - ('cheweimingcheng', models.CharField(max_length=255, null=True, verbose_name='车位名称')), - ('cheweileixing', models.CharField(max_length=255, null=True, verbose_name='车位类型')), - ('cheweitupian', models.CharField(max_length=255, null=True, verbose_name='车位图片')), - ('cheweiweizhi', models.CharField(max_length=255, null=True, verbose_name='车位位置')), - ('cheweizhuangtai', models.CharField(max_length=255, verbose_name='车位状态')), - ('tingchejiage', models.IntegerField(verbose_name='停车价格')), - ('shoufeibiaozhun', models.CharField(max_length=255, null=True, verbose_name='收费标准')), - ('cheweixiangqing', models.TextField(null=True, verbose_name='车位详情')), - ], - options={ - 'verbose_name': '车位信息', - 'verbose_name_plural': '车位信息', - 'db_table': 'cheweixinxi', - }, - ), - migrations.CreateModel( - name='chuchangjiaofei', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('addtime', models.DateTimeField(verbose_name='创建时间')), - ('cheweibianhao', models.CharField(max_length=255, verbose_name='车位编号')), - ('cheweimingcheng', models.CharField(max_length=255, null=True, verbose_name='车位名称')), - ('cheweileixing', models.CharField(max_length=255, null=True, verbose_name='车位类型')), - ('cheweitupian', models.CharField(max_length=255, null=True, verbose_name='车位图片')), - ('tingchejiage', models.IntegerField(null=True, verbose_name='停车价格')), - ('ruchangshijian', models.CharField(max_length=255, null=True, verbose_name='入场时间')), - ('chuchangshijian', models.DateTimeField(verbose_name='出场时间')), - ('tingcheshizhang', models.IntegerField(verbose_name='停车时长')), - ('tingchefeiyong', models.IntegerField(null=True, verbose_name='停车费用')), - ('xinxibeizhu', models.CharField(max_length=255, null=True, verbose_name='信息备注')), - ('yonghuming', models.CharField(max_length=255, null=True, verbose_name='用户名')), - ('shouji', models.CharField(max_length=255, null=True, verbose_name='手机')), - ('chepai', models.CharField(max_length=255, null=True, verbose_name='车牌')), - ('sfsh', models.CharField(default='否', max_length=255, null=True, verbose_name='是否审核')), - ('shhf', models.TextField(null=True, verbose_name='审核回复')), - ('ispay', models.CharField(default='未支付', max_length=255, null=True, verbose_name='是否支付')), - ], - options={ - 'verbose_name': '出场缴费', - 'verbose_name_plural': '出场缴费', - 'db_table': 'chuchangjiaofei', - }, - ), - migrations.CreateModel( - name='config', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=100, verbose_name='键名')), - ('value', models.CharField(max_length=100, verbose_name='键值')), - ], - options={ - 'verbose_name': '配置表', - 'verbose_name_plural': '配置表', - 'db_table': 'config', - }, - ), - migrations.CreateModel( - name='huiyuan', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('addtime', models.DateTimeField(verbose_name='创建时间')), - ('yonghuming', models.CharField(max_length=255, unique=True, verbose_name='用户名')), - ('mima', models.CharField(max_length=255, verbose_name='密码')), - ('xingming', models.CharField(max_length=255, null=True, verbose_name='姓名')), - ('touxiang', models.CharField(max_length=255, null=True, verbose_name='头像')), - ('xingbie', models.CharField(max_length=255, null=True, verbose_name='性别')), - ('shouji', models.CharField(max_length=255, null=True, verbose_name='手机')), - ('chepai', models.CharField(max_length=255, null=True, verbose_name='车牌')), - ], - options={ - 'verbose_name': '会员', - 'verbose_name_plural': '会员', - 'db_table': 'huiyuan', - }, - ), - migrations.CreateModel( - name='messages', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('addtime', models.DateTimeField(verbose_name='创建时间')), - ('userid', models.BigIntegerField(verbose_name='留言人id')), - ('username', models.CharField(max_length=255, null=True, verbose_name='用户名')), - ('content', models.TextField(verbose_name='留言内容')), - ('reply', models.TextField(null=True, verbose_name='回复内容')), - ], - options={ - 'verbose_name': '留言板', - 'verbose_name_plural': '留言板', - 'db_table': 'messages', - }, - ), - migrations.CreateModel( - name='news', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('addtime', models.DateTimeField(verbose_name='创建时间')), - ('title', models.CharField(max_length=255, verbose_name='标题')), - ('introduction', models.TextField(null=True, verbose_name='简介')), - ('picture', models.CharField(max_length=255, verbose_name='图片')), - ('content', models.TextField(verbose_name='内容')), - ], - options={ - 'verbose_name': '公告信息', - 'verbose_name_plural': '公告信息', - 'db_table': 'news', - }, - ), - migrations.CreateModel( - name='ruchangtingche', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('addtime', models.DateTimeField(verbose_name='创建时间')), - ('cheweibianhao', models.CharField(max_length=255, verbose_name='车位编号')), - ('cheweimingcheng', models.CharField(max_length=255, null=True, verbose_name='车位名称')), - ('cheweileixing', models.CharField(max_length=255, null=True, verbose_name='车位类型')), - ('cheweitupian', models.CharField(max_length=255, null=True, verbose_name='车位图片')), - ('cheweiweizhi', models.CharField(max_length=255, null=True, verbose_name='车位位置')), - ('cheweizhuangtai', models.CharField(max_length=255, null=True, verbose_name='车位状态')), - ('shoufeibiaozhun', models.CharField(max_length=255, null=True, verbose_name='收费标准')), - ('tingchejiage', models.IntegerField(null=True, verbose_name='停车价格')), - ('ruchangshijian', models.DateTimeField(verbose_name='入场时间')), - ('ruchangbeizhu', models.CharField(max_length=255, null=True, verbose_name='入场备注')), - ('yonghuming', models.CharField(max_length=255, null=True, verbose_name='用户名')), - ('shouji', models.CharField(max_length=255, null=True, verbose_name='手机')), - ('chepai', models.CharField(max_length=255, null=True, verbose_name='车牌')), - ('sfsh', models.CharField(default='否', max_length=255, null=True, verbose_name='是否审核')), - ('shhf', models.TextField(null=True, verbose_name='审核回复')), - ], - options={ - 'verbose_name': '入场停车', - 'verbose_name_plural': '入场停车', - 'db_table': 'ruchangtingche', - }, - ), - migrations.CreateModel( - name='storeup', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('addtime', models.DateTimeField(verbose_name='创建时间')), - ('userid', models.BigIntegerField(verbose_name='用户id')), - ('refid', models.BigIntegerField(null=True, verbose_name='收藏id')), - ('tablename', models.CharField(max_length=255, null=True, verbose_name='表名')), - ('name', models.CharField(max_length=255, verbose_name='收藏名称')), - ('picture', models.CharField(max_length=255, verbose_name='收藏图片')), - ], - options={ - 'verbose_name': '收藏表', - 'verbose_name_plural': '收藏表', - 'db_table': 'storeup', - }, - ), - migrations.CreateModel( - name='users', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('username', models.CharField(max_length=100, verbose_name='账号')), - ('password', models.CharField(max_length=100, verbose_name='密码')), - ('role', models.CharField(max_length=100, verbose_name='角色')), - ('addtime', models.DateTimeField(verbose_name='创建时间')), - ], - options={ - 'verbose_name': '管理员表', - 'verbose_name_plural': '管理员表', - 'db_table': 'users', - }, - ), - ] diff --git a/src/main/migrations/__init__.py b/src/main/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/migrations/__pycache__/0001_initial.cpython-38.pyc b/src/main/migrations/__pycache__/0001_initial.cpython-38.pyc deleted file mode 100644 index 10d80647985216bea410ce3c9aa04050e532fd22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4461 zcmbVP`*Ryd9oL=CdP{a32MR4v3Ixm}xG5A`N=ciL5<)^DNn3Hf ze!idYV|R6jve{GwKCOv=7Y}WZME=Yt;g1HB9q{LDg)b5zN;Ohb@=8t3t4idl2vJG& zdl3?)%24!JG#@3}fk=PX8t6v)RhFumhON7%Rd-mdW)WI-N_;8&xgRDw;Lmv`9*NLM zULldZN|b!mh~zceH5B76XnZI^6c`%mBC#p0tdcm$k|aTrQwq#fn59SxG}0t96)meq z6rR#xo1Ko5+*DK`b#DNv2az_B-YFH3HwValWD7^`@FgX033T3yI`^RDZHV&rK;vH2 zxDO;r@($$xPMD>E{kzEh+^dly?}pLc!Ty1}V6Tu(G7lT#|DJ%|dy(Cp5xoy}wqiu@ zhk1s40QvU^2p>d*4}pY7^kIxBO+EtSfsTl_-90=4kVAG&I!{R*qnCUR#fCSPc*TArUlPbE@@4dN0Otxhh|wMjB+sDa*+B9fN;Z%+BT2pjs!Hf6W1k+A<4ps zk>_EQI=ogl;PwAG#qQiSZ+;3WWGhze&Yi#BUQ3bz%xewfRY)BX!o4KV(+zY1*}&d0 zHW3R(wIh3t4P;Mt%3)+|1LG|0NCzwC1`&7|f!t*&as+GGuIaFx8*wrMqtU@*bX^{@ zEBBHyMEa)iwKv#R-@^H~alK<#8eQZ&Fh<*cjC4Lnz6%%fI7{wp-^2%5wp5|R)T~l- z#H<@kHOX$K?%CC^v5fAyR-t55-KB)38@5@~?a{*Xbd)6>YMXl19HT6AgxW>Rp@q6$ zqb#ly;+i$;W#AI`Ph9ku7Mtg!jA)e zq)?@G!>zEGS2quPR2cL}#Xq(=?55DDdbVC=2~sS$da+6YKokCBWs_Ek!{Sy${?JIv z@F2p9*N(Ml>h+3lg=sAR$Uk$vU$t{UPde%m}jBA5quUeHh znZVgt#S9tnKyS{mj9`J87R#-rh32VCG6}dm0_2RE7g}DMz0tbZwstD!5NL#!Wqw&s zfD7xxz&WI_I)Ax&YyyJ2ryZPF!~zHg4ATTHFk&(c!}S_%Pg2*v_{Y}CNrssjt9ZcF z)x&|dPF-t`A7vR=W(}Ac*a}CdImXiU=FBqdb}E)vrY6+E0u&ic^W3%7g&WP8Nq_Qq z+eK$Il7x&V6v4`^+2+xCZsL_HzzCdL0M2r@oQE^!PyF1U#*Vyg(V;Q97}CHvKw*qS z3$MNig=hW6TP%kf;BeIHP=H`s=dQA}NNJG*fUK#c>tC8|{{AXUaifaIo6Ji>b-F^R zLeHN+-kLee68uCGx#1!ESANLh60YTmzL1)i7W`vpSe$DXP3fgMe#JlWE3v$?{1g9$ z3oKEijsvX-?;RdLxroQlqSlK)UcEZLvbbmxmf&)Ef@aJx@E}J&0 zqcUkCT~aO!C$O47y#>bs9d=lkYr0jWGc&pNvkNR^)?M2oUWuPef?R8Ed}Zl0i#N=Y z>)BFSZZR2}@G9L+{Mvuv6gGOhud(x37W+KZW3tUd)c`x?zk4XYj_Es1krJj z0f?>)iQzK770;gmSyCLXJS~C|R0}E~0Hq4d;2;bO#0eq$M}Y7Gck$dh5@F#ooU<&^ z&>d&kvI)~{3)8fE5)JaA08I!2-s$tubozw{N}^ zoFhskl2A2O(=?LKMKqx7uHiTeqBzN%)>?qAyGwlB^C zJiM+ZaqShYr@aQKFmi9Q7T^Mcj7Ca;g`kg6FM2l0fuh5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!Hgi&ackX 0: - for i in newData: - if i.get(list1[0]) == params.get(list1[0]): - newDataa.append(i) - else: - newDataa = newData - else: - newDataa = newData - - return newDataa, page, pages, total, limit - - def page(self, model, params): - return self.__Page(self, model, params) - - def __GetByColumn(self, model, columnName): - # data1= model.query.options(load_only(column)).all() - datas = model.objects.values(columnName).all() - print(datas) - data_set = set() - for i in datas: - data_set.add(i.get(columnName)) - return list(data_set) - - def getbyColumn(self, model, columnName): - ''' - 获取某表的某个字段的内容列表,去重 - :param model: - :param column: - :return: - ''' - return self.__GetByColumn(self, model, columnName) - - - def __CreateByReq(self, model, params): - ''' - 根据请求参数创建对应模型记录的公共方法 - :param model: - :param params: - :return: - ''' - if model.__tablename__ != 'users': - params['id'] = int(float(time.time()) * 1000) - - column_list = [] - for col in model._meta.fields: - if str(col.get_internal_type()).lower() == "bigintegerfield": - column_list.append(col.name) - for k, v in params.items(): - if k in column_list: - try: - params[k] = int(v) - except: - params[k] = 0 - - column_list = [] - for col in model._meta.fields: - if str(col.get_internal_type()).lower() == "integerfield": - column_list.append(col.name) - for k, v in params.items(): - if k in column_list : - try: - params[k] = int(v) - except: - params[k] = 0 - - column_list = [] - for col in model._meta.fields: - if str(col.get_internal_type()).lower() == "floatfield": - column_list.append(col.name) - for k, v in params.items(): - if k in column_list : - try: - params[k] = float(v) - except: - params[k] = 0.0 - - column_list = [] - for col in model._meta.fields: - if 'char' in str(col.get_internal_type()).lower(): - column_list.append(col.name) - for k, v in params.items(): - if k in column_list and v == '': - params[k] = "" - - column_list = [] - for col in model._meta.fields: - if str(col.get_internal_type()).lower() == "datetimefield" or str(col.get_internal_type()).lower() == "datefield": - column_list.append(col.name) - params_=copy.deepcopy(params) - for k, v in params_.items(): - if k in column_list and v == '': - del params[k] - - userid = False - for col in model._meta.fields: - if str(col.name) == 'userid': - if col.null == False: - userid = True - - if userid == True: - if params.get("userid") == "" or params.get("userid") == None: - request = get_current_request() - params['userid'] = request.session.get("params").get('id') - - for col in model._meta.fields: - if str(col.name) not in params.keys(): - if col.null == False: - if "VarChar" in str(col.get_internal_type()) or "Char" in str(col.get_internal_type()): - params[str(col.name)] = "" - - column_list = [] - for col in model._meta.fields: - column_list.append(col.name) - paramss={} - for k, v in params.items(): - if k in column_list: - paramss[k] = v - m = model(**paramss) - try: - ret = m.save() - log.info("ret========>{}".format(ret)) - return None - except Exception as e: - return "{}:{}".format(Exception, e) - - def createbyreq(self, model, params): - ''' - 根据请求参数创建对应模型记录 - :param model: - :param params: - :return: - ''' - return self.__CreateByReq(model, model, params) - - def __GetById(self, model, id): - ''' - 根据id获取数据公共方法 - :param id: - :return: - ''' - data = model.objects.filter(id=id).all() - - return self.to_list(model, data) - - def getbyid(self, model, id): - ''' - 根据id获取数据 - :param model: - :param id: - :return: - ''' - return self.__GetById(model, model, id) - - def __GetByParams(self, model, params): - - try: - __loginUser__ = model.__loginUser__ - except: - __loginUser__ = None - - if __loginUser__ != None: - if params.get('username'): - params[model.__loginUser__] = copy.deepcopy(params.get('username')) - del params['username'] - if model.__tablename__ != 'users': - if params.get('password'): - params['mima'] = copy.deepcopy(params.get('password')) - del params['password'] - - # 前端传了无用参数和传错参数名,在这里修改 - paramss = {} - columnList = self.getallcolumn(model, model) - for k, v in params.items(): - if k in columnList: - paramss[k] = v - - datas_ = model.objects.filter(**paramss).all() - - return self.to_list(datas_, datas_) - - def getbyparams(self, model, params): - return self.__GetByParams(model, model, params) - - def __GetBetweenParams(self, model, columnName, params): - ''' - - :param model: - :param params: - :return: - ''' - print("__GetBetweenParams params=============>",params) - remindstart = copy.deepcopy(params.get("remindstart")) - remindend = copy.deepcopy(params.get("remindend")) - try: - del params["remindstart"] - del params["remindend"] - del params["type"] - except: - pass - # todo where是否合法 - - - datas = eval("model.objects.filter(**params).filter({}__range= [remindstart, remindend]).all()".format(columnName)) - print("datas===========>",datas) - try: - data = [i if i.items else model_to_dict(i) for i in datas] - except: - try: - data = [model_to_dict(i) for i in datas] - except: - data = datas - - return data - - def getbetweenparams(self, model, columnName, params): - ''' - 区域内查询 - :param model: - :param params: - :return: - ''' - - return self.__GetBetweenParams(self, model, columnName, params) - - def __GetComputedByColumn(self, model, columnName): - return model.objects.aggregate( - sum=Sum(columnName), - max=Max(columnName), - min=Min(columnName), - avg=Avg(columnName), - ) - - def getcomputedbycolumn(self, model, columnName): - ''' - 求和最大最小平均值 - :param model: - :param columnName: - :return: - ''' - return self.__GetComputedByColumn(self, model, columnName) - - def __GroupByColumnName(self, model, columnName): - ''' - django指定获取那些列:values - 统计values里每一个字符串出现的次数 - :param model: - :param columnName: - :return: - ''' - datas = model.objects.values(columnName).annotate(total=Count(columnName)).all() - - try: - data = [model_to_dict(i) for i in datas] - except: - data = datas - data = [{columnName: x.get(columnName), "total": int(x.get("total"))} for x in data] - return data - - def groupbycolumnname(self, model, columnName): - ''' - 类别统计 - :param model: - :param params: - :return: - ''' - return self.__GroupByColumnName(self, model, columnName) - - def __GetValueByxyColumnName(self, model, xColumnName, yColumnName): - ''' - 按值统计接口 - SELECT ${xColumnName}, ${yColumnName} total FROM ${tableName} order by ${yColumnName} desc limit 10 - :param model: - :param xColumnName: - :param yColumnName: - :return: - ''' - datas = model.objects.values(xColumnName).\ - annotate(total=Sum(yColumnName)).all()[:10] - try: - data = list(datas) - except Exception as e: - print(Exception,":",e) - data = datas - - return data - - def getvaluebyxycolumnname(self, model, xColumnName, yColumnName): - ''' - - :param model: - :param xColumnName: - :param yColumnName: - :return: - ''' - return self.__GetValueByxyColumnName(self, model, xColumnName, yColumnName) - - def __UpdateByParams(self, model, params): - ''' - 根据接口传参更新对应id记录的公共方法 - :param model: - :param params: - :return: - ''' - id_ = copy.deepcopy(params['id']) - del params['id'] - - # 去掉多传的参数 - column_list = self.getallcolumn(model,model) # 获取所有字段名 - - newParams = {} - for k, v in params.items(): - if k in column_list: - ret1 = re.findall("\d{4}-\d{2}-\d{2}", str(v)) - ret2 = re.findall("\d{2}:\d{2}:\d{2}", str(v)) - if len(ret1) > 0 and len(ret2) > 0: - newParams[k] ="{} {}".format( ret1[0],ret2[0]) - else: - newParams[k] = v - - column_list = [] - for col in model._meta.fields: - if str(col.get_internal_type()).lower() == "bigintegerfield": - column_list.append(col.name) - for k, v in newParams.items(): - if k in column_list: - try: - newParams[k] = int(v) - except: - newParams[k] = 0 - - column_list = [] - for col in model._meta.fields: - if str(col.get_internal_type()).lower() == "integerfield": - column_list.append(col.name) - for k, v in newParams.items(): - if k in column_list : - try: - newParams[k] = int(v) - except: - newParams[k] = 0 - - column_list = [] - for col in model._meta.fields: - if str(col.get_internal_type()).lower() == "floatfield": - column_list.append(col.name) - for k, v in newParams.items(): - if k in column_list : - try: - newParams[k] = float(v) - except: - newParams[k] = 0.0 - - column_list = [] - for col in model._meta.fields: - if 'char' in str(col.get_internal_type()).lower(): - column_list.append(col.name) - for k, v in newParams.items(): - if k in column_list and v == '': - newParams[k] = "" - - column_list = [] - for col in model._meta.fields: - if str(col.get_internal_type()).lower() == "datetimefield": - column_list.append(col.name) - for k, v in newParams.items(): - if k in column_list and v == '': - newParams[k] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())) - - column_list = [] - for col in model._meta.fields: - if str(col.get_internal_type()).lower() == "datefield": - column_list.append(col.name) - for k, v in newParams.items(): - if k in column_list and v == '': - newParams[k] = time.strftime("%Y-%m-%d", time.localtime(time.time())) - - column_list = [] - for col in model._meta.fields: - column_list.append(col.name) - paramss = {} - for k, v in newParams.items(): - if k in column_list: - paramss[k] = v - try: - model.objects.filter(id=int(id_)).update( - **paramss - ) - return None - except Exception as e: - print(Exception, ":", e) - return e - - def updatebyparams(self, model, params): - ''' - 根据接口传参更新对应id记录 - :param params: - :return: - ''' - return self.__UpdateByParams(model, model, params) - - def __Deletes(self, model,ids:list): - ''' - 删除记录:先查询,再删除查询结果公共方法 - :param user: - :return: - ''' - try: - model.objects.filter(id__in =ids).delete() - return None - except Exception as e: - print(Exception, ":", e) - return e - - - def deletes(self,model, ids:list): - ''' - 删除记录:先查询,再删除查询结果 - :param user: - :return: - ''' - return self.__Deletes(model,model, ids) - - def __DeleteByParams(self, model, newParams: dict): - ''' - 批量删除的内部方法 - :param model: - :param params: - :return: - ''' - - column_list = [] - for col in model._meta.fields: - if str(col.get_internal_type()).lower() == "integerfield": - column_list.append(col.name) - for k, v in newParams.items(): - if k in column_list: - try: - newParams[k] = int(v) - except: - newParams[k] = 0 - - column_list = [] - for col in model._meta.fields: - if str(col.get_internal_type()).lower() == "bigintegerfield": - column_list.append(col.name) - for k, v in newParams.items(): - if k in column_list: - try: - newParams[k] = int(v) - except: - newParams[k] = 0 - - column_list = [] - for col in model._meta.fields: - if str(col.get_internal_type()).lower() == "floatfield": - column_list.append(col.name) - for k, v in newParams.items(): - if k in column_list: - try: - newParams[k] = float(v) - except: - newParams[k] = 0.0 - try: - ret = model.objects.filter(**newParams).delete() - log.info("delete===============>{}".format(ret)) - return None - except ProtectedError: - return str(ProtectedError) - - def deletebyparams(self, model, ids: list): - ''' - 根据数组传参批量删除一个或多个id的记录 - :param model: - :param params: - :return: - ''' - - return self.__DeleteByParams(model, model, ids) - - def to_list(self, datas): - dataList = [] - try: - dataList = [model_to_dict(i) for i in datas] - # for i in datas_: - # datas.append(model_to_dict(i)) - except Exception as e: - print(Exception, ":", e) - - return dataList - - def getallcolumn(self, model): - """ - 获取当前模型的所有字段 - :returns dict: - """ - column_list = [] - for col in model._meta.fields: - column_list.append(col.name) - return column_list diff --git a/src/main/models.py b/src/main/models.py deleted file mode 100644 index 7e42c31..0000000 --- a/src/main/models.py +++ /dev/null @@ -1,325 +0,0 @@ -#coding:utf-8 -__author__ = "ila" -from django.db import models - -from .model import BaseModel - -from datetime import datetime - - - -class huiyuan(BaseModel): - __doc__ = u'''huiyuan''' - __tablename__ = 'huiyuan' - - __loginUser__='yonghuming' - - - __authTables__={} - __authPeople__='是'#用户表,表属性loginUserColumn对应的值就是用户名字段,mima就是密码字段 - __loginUserColumn__='yonghuming'#用户表,表属性loginUserColumn对应的值就是用户名字段,mima就是密码字段 - __sfsh__='否'#表sfsh(是否审核,”是”或”否”)字段和sfhf(审核回复)字段,后台列表(page)的操作中要多一个”审核”按钮,点击”审核”弹出一个页面,包含”是否审核”和”审核回复”,点击确定调用update接口,修改sfsh和sfhf两个字段。 - __authSeparate__='否'#后台列表权限 - __thumbsUp__='否'#表属性thumbsUp[是/否],新增thumbsupnum赞和crazilynum踩字段 - __intelRecom__='否'#智能推荐功能(表属性:[intelRecom(是/否)],新增clicktime[前端不显示该字段]字段(调用info/detail接口的时候更新),按clicktime排序查询) - __browseClick__='否'#表属性[browseClick:是/否],点击字段(clicknum),调用info/detail接口的时候后端自动+1)、投票功能(表属性[vote:是/否],投票字段(votenum),调用vote接口后端votenum+1 - __foreEndListAuth__='否'#前台列表权限foreEndListAuth[是/否];当foreEndListAuth=是,刷的表新增用户字段userid,前台list列表接口仅能查看自己的记录和add接口后台赋值userid的值 - __foreEndList__='否'#表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看 - __isAdmin__='否'#表属性isAdmin=”是”,刷出来的用户表也是管理员,即page和list可以查看所有人的考试记录(同时应用于其他表) - addtime = models.DateTimeField(auto_now_add=False, verbose_name=u'创建时间') - yonghuming=models.CharField ( max_length=255,null=False,unique=True, verbose_name='用户名' ) - mima=models.CharField ( max_length=255,null=False, unique=False, verbose_name='密码' ) - xingming=models.CharField ( max_length=255, null=True, unique=False, verbose_name='姓名' ) - touxiang=models.CharField ( max_length=255, null=True, unique=False, verbose_name='头像' ) - xingbie=models.CharField ( max_length=255, null=True, unique=False, verbose_name='性别' ) - shouji=models.CharField ( max_length=255, null=True, unique=False, verbose_name='手机' ) - chepai=models.CharField ( max_length=255, null=True, unique=False, verbose_name='车牌' ) - ''' - yonghuming=VARCHAR - mima=VARCHAR - xingming=VARCHAR - touxiang=VARCHAR - xingbie=VARCHAR - shouji=VARCHAR - chepai=VARCHAR - ''' - class Meta: - db_table = 'huiyuan' - verbose_name = verbose_name_plural = '会员' -class cheweileixing(BaseModel): - __doc__ = u'''cheweileixing''' - __tablename__ = 'cheweileixing' - - - - __authTables__={} - __authPeople__='否'#用户表,表属性loginUserColumn对应的值就是用户名字段,mima就是密码字段 - __sfsh__='否'#表sfsh(是否审核,”是”或”否”)字段和sfhf(审核回复)字段,后台列表(page)的操作中要多一个”审核”按钮,点击”审核”弹出一个页面,包含”是否审核”和”审核回复”,点击确定调用update接口,修改sfsh和sfhf两个字段。 - __authSeparate__='否'#后台列表权限 - __thumbsUp__='否'#表属性thumbsUp[是/否],新增thumbsupnum赞和crazilynum踩字段 - __intelRecom__='否'#智能推荐功能(表属性:[intelRecom(是/否)],新增clicktime[前端不显示该字段]字段(调用info/detail接口的时候更新),按clicktime排序查询) - __browseClick__='否'#表属性[browseClick:是/否],点击字段(clicknum),调用info/detail接口的时候后端自动+1)、投票功能(表属性[vote:是/否],投票字段(votenum),调用vote接口后端votenum+1 - __foreEndListAuth__='否'#前台列表权限foreEndListAuth[是/否];当foreEndListAuth=是,刷的表新增用户字段userid,前台list列表接口仅能查看自己的记录和add接口后台赋值userid的值 - __foreEndList__='否'#表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看 - __isAdmin__='否'#表属性isAdmin=”是”,刷出来的用户表也是管理员,即page和list可以查看所有人的考试记录(同时应用于其他表) - addtime = models.DateTimeField(auto_now_add=False, verbose_name=u'创建时间') - cheweileixing=models.CharField ( max_length=255,null=False,unique=True, verbose_name='车位类型' ) - ''' - cheweileixing=VARCHAR - ''' - class Meta: - db_table = 'cheweileixing' - verbose_name = verbose_name_plural = '车位类型' -class cheweixinxi(BaseModel): - __doc__ = u'''cheweixinxi''' - __tablename__ = 'cheweixinxi' - - - - __authTables__={} - __authPeople__='否'#用户表,表属性loginUserColumn对应的值就是用户名字段,mima就是密码字段 - __sfsh__='否'#表sfsh(是否审核,”是”或”否”)字段和sfhf(审核回复)字段,后台列表(page)的操作中要多一个”审核”按钮,点击”审核”弹出一个页面,包含”是否审核”和”审核回复”,点击确定调用update接口,修改sfsh和sfhf两个字段。 - __authSeparate__='否'#后台列表权限 - __thumbsUp__='否'#表属性thumbsUp[是/否],新增thumbsupnum赞和crazilynum踩字段 - __intelRecom__='否'#智能推荐功能(表属性:[intelRecom(是/否)],新增clicktime[前端不显示该字段]字段(调用info/detail接口的时候更新),按clicktime排序查询) - __browseClick__='否'#表属性[browseClick:是/否],点击字段(clicknum),调用info/detail接口的时候后端自动+1)、投票功能(表属性[vote:是/否],投票字段(votenum),调用vote接口后端votenum+1 - __foreEndListAuth__='否'#前台列表权限foreEndListAuth[是/否];当foreEndListAuth=是,刷的表新增用户字段userid,前台list列表接口仅能查看自己的记录和add接口后台赋值userid的值 - __foreEndList__='是'#表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看 - __isAdmin__='否'#表属性isAdmin=”是”,刷出来的用户表也是管理员,即page和list可以查看所有人的考试记录(同时应用于其他表) - addtime = models.DateTimeField(auto_now_add=False, verbose_name=u'创建时间') - cheweibianhao=models.CharField ( max_length=255,null=False,unique=True, verbose_name='车位编号' ) - cheweimingcheng=models.CharField ( max_length=255, null=True, unique=False, verbose_name='车位名称' ) - cheweileixing=models.CharField ( max_length=255, null=True, unique=False, verbose_name='车位类型' ) - cheweitupian=models.CharField ( max_length=255, null=True, unique=False, verbose_name='车位图片' ) - cheweiweizhi=models.CharField ( max_length=255, null=True, unique=False, verbose_name='车位位置' ) - cheweizhuangtai=models.CharField ( max_length=255,null=False, unique=False, verbose_name='车位状态' ) - tingchejiage=models.IntegerField ( null=False, unique=False, verbose_name='停车价格' ) - shoufeibiaozhun=models.CharField ( max_length=255, null=True, unique=False, verbose_name='收费标准' ) - cheweixiangqing=models.TextField ( null=True, unique=False, verbose_name='车位详情' ) - ''' - cheweibianhao=VARCHAR - cheweimingcheng=VARCHAR - cheweileixing=VARCHAR - cheweitupian=VARCHAR - cheweiweizhi=VARCHAR - cheweizhuangtai=VARCHAR - tingchejiage=Integer - shoufeibiaozhun=VARCHAR - cheweixiangqing=Text - ''' - class Meta: - db_table = 'cheweixinxi' - verbose_name = verbose_name_plural = '车位信息' -class cheweiweihu(BaseModel): - __doc__ = u'''cheweiweihu''' - __tablename__ = 'cheweiweihu' - - - - __authTables__={} - __authPeople__='否'#用户表,表属性loginUserColumn对应的值就是用户名字段,mima就是密码字段 - __sfsh__='否'#表sfsh(是否审核,”是”或”否”)字段和sfhf(审核回复)字段,后台列表(page)的操作中要多一个”审核”按钮,点击”审核”弹出一个页面,包含”是否审核”和”审核回复”,点击确定调用update接口,修改sfsh和sfhf两个字段。 - __authSeparate__='否'#后台列表权限 - __thumbsUp__='否'#表属性thumbsUp[是/否],新增thumbsupnum赞和crazilynum踩字段 - __intelRecom__='否'#智能推荐功能(表属性:[intelRecom(是/否)],新增clicktime[前端不显示该字段]字段(调用info/detail接口的时候更新),按clicktime排序查询) - __browseClick__='否'#表属性[browseClick:是/否],点击字段(clicknum),调用info/detail接口的时候后端自动+1)、投票功能(表属性[vote:是/否],投票字段(votenum),调用vote接口后端votenum+1 - __foreEndListAuth__='否'#前台列表权限foreEndListAuth[是/否];当foreEndListAuth=是,刷的表新增用户字段userid,前台list列表接口仅能查看自己的记录和add接口后台赋值userid的值 - __foreEndList__='否'#表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看 - __isAdmin__='否'#表属性isAdmin=”是”,刷出来的用户表也是管理员,即page和list可以查看所有人的考试记录(同时应用于其他表) - addtime = models.DateTimeField(auto_now_add=False, verbose_name=u'创建时间') - cheweibianhao=models.CharField ( max_length=255,null=False, unique=False, verbose_name='车位编号' ) - cheweimingcheng=models.CharField ( max_length=255, null=True, unique=False, verbose_name='车位名称' ) - cheweileixing=models.CharField ( max_length=255, null=True, unique=False, verbose_name='车位类型' ) - cheweiweizhi=models.CharField ( max_length=255, null=True, unique=False, verbose_name='车位位置' ) - weihuleixing=models.CharField ( max_length=255,null=False, unique=False, verbose_name='维护类型' ) - weihuxiangmu=models.CharField ( max_length=255, null=True, unique=False, verbose_name='维护项目' ) - weihushijian=models.DateTimeField ( null=False, unique=False, verbose_name='维护时间' ) - weihuxiangqing=models.TextField ( null=True, unique=False, verbose_name='维护详情' ) - ''' - cheweibianhao=VARCHAR - cheweimingcheng=VARCHAR - cheweileixing=VARCHAR - cheweiweizhi=VARCHAR - weihuleixing=VARCHAR - weihuxiangmu=VARCHAR - weihushijian=DateTime - weihuxiangqing=Text - ''' - class Meta: - db_table = 'cheweiweihu' - verbose_name = verbose_name_plural = '车位维护' -class ruchangtingche(BaseModel): - __doc__ = u'''ruchangtingche''' - __tablename__ = 'ruchangtingche' - - - - __authTables__={'yonghuming':'huiyuan',} - __authPeople__='否'#用户表,表属性loginUserColumn对应的值就是用户名字段,mima就是密码字段 - __sfsh__='是'#表sfsh(是否审核,”是”或”否”)字段和sfhf(审核回复)字段,后台列表(page)的操作中要多一个”审核”按钮,点击”审核”弹出一个页面,包含”是否审核”和”审核回复”,点击确定调用update接口,修改sfsh和sfhf两个字段。 - __authSeparate__='否'#后台列表权限 - __thumbsUp__='否'#表属性thumbsUp[是/否],新增thumbsupnum赞和crazilynum踩字段 - __intelRecom__='否'#智能推荐功能(表属性:[intelRecom(是/否)],新增clicktime[前端不显示该字段]字段(调用info/detail接口的时候更新),按clicktime排序查询) - __browseClick__='否'#表属性[browseClick:是/否],点击字段(clicknum),调用info/detail接口的时候后端自动+1)、投票功能(表属性[vote:是/否],投票字段(votenum),调用vote接口后端votenum+1 - __foreEndListAuth__='否'#前台列表权限foreEndListAuth[是/否];当foreEndListAuth=是,刷的表新增用户字段userid,前台list列表接口仅能查看自己的记录和add接口后台赋值userid的值 - __foreEndList__='否'#表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看 - __isAdmin__='否'#表属性isAdmin=”是”,刷出来的用户表也是管理员,即page和list可以查看所有人的考试记录(同时应用于其他表) - addtime = models.DateTimeField(auto_now_add=False, verbose_name=u'创建时间') - cheweibianhao=models.CharField ( max_length=255,null=False, unique=False, verbose_name='车位编号' ) - cheweimingcheng=models.CharField ( max_length=255, null=True, unique=False, verbose_name='车位名称' ) - cheweileixing=models.CharField ( max_length=255, null=True, unique=False, verbose_name='车位类型' ) - cheweitupian=models.CharField ( max_length=255, null=True, unique=False, verbose_name='车位图片' ) - cheweiweizhi=models.CharField ( max_length=255, null=True, unique=False, verbose_name='车位位置' ) - cheweizhuangtai=models.CharField ( max_length=255, null=True, unique=False, verbose_name='车位状态' ) - shoufeibiaozhun=models.CharField ( max_length=255, null=True, unique=False, verbose_name='收费标准' ) - tingchejiage=models.IntegerField ( null=True, unique=False, verbose_name='停车价格' ) - ruchangshijian=models.DateTimeField ( null=False, unique=False, verbose_name='入场时间' ) - ruchangbeizhu=models.CharField ( max_length=255, null=True, unique=False, verbose_name='入场备注' ) - yonghuming=models.CharField ( max_length=255, null=True, unique=False, verbose_name='用户名' ) - shouji=models.CharField ( max_length=255, null=True, unique=False, verbose_name='手机' ) - chepai=models.CharField ( max_length=255, null=True, unique=False, verbose_name='车牌' ) - sfsh=models.CharField ( max_length=255, null=True, unique=False,default='否', verbose_name='是否审核' ) - shhf=models.TextField ( null=True, unique=False, verbose_name='审核回复' ) - ''' - cheweibianhao=VARCHAR - cheweimingcheng=VARCHAR - cheweileixing=VARCHAR - cheweitupian=VARCHAR - cheweiweizhi=VARCHAR - cheweizhuangtai=VARCHAR - shoufeibiaozhun=VARCHAR - tingchejiage=Integer - ruchangshijian=DateTime - ruchangbeizhu=VARCHAR - yonghuming=VARCHAR - shouji=VARCHAR - chepai=VARCHAR - sfsh=VARCHAR - shhf=Text - ''' - class Meta: - db_table = 'ruchangtingche' - verbose_name = verbose_name_plural = '入场停车' -class chuchangjiaofei(BaseModel): - __doc__ = u'''chuchangjiaofei''' - __tablename__ = 'chuchangjiaofei' - - - - __authTables__={'yonghuming':'huiyuan',} - __authPeople__='否'#用户表,表属性loginUserColumn对应的值就是用户名字段,mima就是密码字段 - __sfsh__='是'#表sfsh(是否审核,”是”或”否”)字段和sfhf(审核回复)字段,后台列表(page)的操作中要多一个”审核”按钮,点击”审核”弹出一个页面,包含”是否审核”和”审核回复”,点击确定调用update接口,修改sfsh和sfhf两个字段。 - __authSeparate__='否'#后台列表权限 - __thumbsUp__='否'#表属性thumbsUp[是/否],新增thumbsupnum赞和crazilynum踩字段 - __intelRecom__='否'#智能推荐功能(表属性:[intelRecom(是/否)],新增clicktime[前端不显示该字段]字段(调用info/detail接口的时候更新),按clicktime排序查询) - __browseClick__='否'#表属性[browseClick:是/否],点击字段(clicknum),调用info/detail接口的时候后端自动+1)、投票功能(表属性[vote:是/否],投票字段(votenum),调用vote接口后端votenum+1 - __foreEndListAuth__='否'#前台列表权限foreEndListAuth[是/否];当foreEndListAuth=是,刷的表新增用户字段userid,前台list列表接口仅能查看自己的记录和add接口后台赋值userid的值 - __foreEndList__='否'#表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看 - __isAdmin__='否'#表属性isAdmin=”是”,刷出来的用户表也是管理员,即page和list可以查看所有人的考试记录(同时应用于其他表) - addtime = models.DateTimeField(auto_now_add=False, verbose_name=u'创建时间') - cheweibianhao=models.CharField ( max_length=255,null=False, unique=False, verbose_name='车位编号' ) - cheweimingcheng=models.CharField ( max_length=255, null=True, unique=False, verbose_name='车位名称' ) - cheweileixing=models.CharField ( max_length=255, null=True, unique=False, verbose_name='车位类型' ) - cheweitupian=models.CharField ( max_length=255, null=True, unique=False, verbose_name='车位图片' ) - tingchejiage=models.IntegerField ( null=True, unique=False, verbose_name='停车价格' ) - ruchangshijian=models.CharField ( max_length=255, null=True, unique=False, verbose_name='入场时间' ) - chuchangshijian=models.DateTimeField ( null=False, unique=False, verbose_name='出场时间' ) - tingcheshizhang=models.IntegerField ( null=False, unique=False, verbose_name='停车时长' ) - tingchefeiyong=models.IntegerField ( null=True, unique=False, verbose_name='停车费用' ) - xinxibeizhu=models.CharField ( max_length=255, null=True, unique=False, verbose_name='信息备注' ) - yonghuming=models.CharField ( max_length=255, null=True, unique=False, verbose_name='用户名' ) - shouji=models.CharField ( max_length=255, null=True, unique=False, verbose_name='手机' ) - chepai=models.CharField ( max_length=255, null=True, unique=False, verbose_name='车牌' ) - sfsh=models.CharField ( max_length=255, null=True, unique=False,default='否', verbose_name='是否审核' ) - shhf=models.TextField ( null=True, unique=False, verbose_name='审核回复' ) - ispay=models.CharField ( max_length=255, null=True, unique=False,default='未支付', verbose_name='是否支付' ) - ''' - cheweibianhao=VARCHAR - cheweimingcheng=VARCHAR - cheweileixing=VARCHAR - cheweitupian=VARCHAR - tingchejiage=Integer - ruchangshijian=VARCHAR - chuchangshijian=DateTime - tingcheshizhang=Integer - tingchefeiyong=Integer - xinxibeizhu=VARCHAR - yonghuming=VARCHAR - shouji=VARCHAR - chepai=VARCHAR - sfsh=VARCHAR - shhf=Text - ispay=VARCHAR - ''' - class Meta: - db_table = 'chuchangjiaofei' - verbose_name = verbose_name_plural = '出场缴费' -class storeup(BaseModel): - __doc__ = u'''storeup''' - __tablename__ = 'storeup' - - - - __authTables__={} - __authSeparate__='是'#后台列表权限 - __foreEndListAuth__='是'#前台列表权限foreEndListAuth[是/否];当foreEndListAuth=是,刷的表新增用户字段userid,前台list列表接口仅能查看自己的记录和add接口后台赋值userid的值 - addtime = models.DateTimeField(auto_now_add=False, verbose_name=u'创建时间') - userid=models.BigIntegerField ( null=False, unique=False, verbose_name='用户id' ) - refid=models.BigIntegerField ( null=True, unique=False, verbose_name='收藏id' ) - tablename=models.CharField ( max_length=255, null=True, unique=False, verbose_name='表名' ) - name=models.CharField ( max_length=255,null=False, unique=False, verbose_name='收藏名称' ) - picture=models.CharField ( max_length=255,null=False, unique=False, verbose_name='收藏图片' ) - ''' - userid=BigInteger - refid=BigInteger - tablename=VARCHAR - name=VARCHAR - picture=VARCHAR - ''' - class Meta: - db_table = 'storeup' - verbose_name = verbose_name_plural = '收藏表' -class news(BaseModel): - __doc__ = u'''news''' - __tablename__ = 'news' - - - - __authTables__={} - addtime = models.DateTimeField(auto_now_add=False, verbose_name=u'创建时间') - title=models.CharField ( max_length=255,null=False, unique=False, verbose_name='标题' ) - introduction=models.TextField ( null=True, unique=False, verbose_name='简介' ) - picture=models.CharField ( max_length=255,null=False, unique=False, verbose_name='图片' ) - content=models.TextField ( null=False, unique=False, verbose_name='内容' ) - ''' - title=VARCHAR - introduction=Text - picture=VARCHAR - content=Text - ''' - class Meta: - db_table = 'news' - verbose_name = verbose_name_plural = '公告信息' -class messages(BaseModel): - __doc__ = u'''messages''' - __tablename__ = 'messages' - - - - __authTables__={} - __hasMessage__='是'#表属性hasMessage为是,新增留言板表messages,字段content(内容),userid(用户id) - __foreEndListAuth__='是'#前台列表权限foreEndListAuth[是/否];当foreEndListAuth=是,刷的表新增用户字段userid,前台list列表接口仅能查看自己的记录和add接口后台赋值userid的值 - addtime = models.DateTimeField(auto_now_add=False, verbose_name=u'创建时间') - userid=models.BigIntegerField ( null=False, unique=False, verbose_name='留言人id' ) - username=models.CharField ( max_length=255, null=True, unique=False, verbose_name='用户名' ) - content=models.TextField ( null=False, unique=False, verbose_name='留言内容' ) - reply=models.TextField ( null=True, unique=False, verbose_name='回复内容' ) - ''' - userid=BigInteger - username=VARCHAR - content=Text - reply=Text - ''' - class Meta: - db_table = 'messages' - verbose_name = verbose_name_plural = '留言板' diff --git a/src/main/schema_v.py b/src/main/schema_v.py deleted file mode 100644 index e31fe47..0000000 --- a/src/main/schema_v.py +++ /dev/null @@ -1,499 +0,0 @@ -# coding:utf-8 -__author__ = "ila" - -import logging, os, time - -from django.http import JsonResponse -from django.apps import apps -from wsgiref.util import FileWrapper -from django.http import HttpResponse,HttpResponseRedirect -from django.shortcuts import redirect - -from .config_model import config -from util.codes import * -from util import message as mes -from util.baidubce_api import BaiDuBce -from util.locate import geocoding -from dj2.settings import dbName as schemaName - -def schemaName_cal(request, tableName, columnName): - ''' - 计算规则接口 - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, 'data': []} - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__ == tableName: - - data = m.getcomputedbycolumn( - m, - m, - columnName - ) - print(data) - if data: - try: - sum='%.05f' % float(data.get("sum")) - except: - sum=0.00 - try: - max='%.05f' % float(data.get("max")) - except: - max=0.00 - try: - min='%.05f' % float(data.get("min")) - except: - min=0.00 - try: - avg='%.05f' % float(data.get("avg")) - except: - avg=0.00 - msg['data'] = { - "sum": sum, - "max": max, - "min": min, - "avg": avg, - } - break - - return JsonResponse(msg) - - -def schemaName_file_upload(request): - ''' - 上传 - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": "成功", "data": {}} - - file = request.FILES.get("file") - - if file: - filename = file.name - filesuffix = filename.split(".")[-1] - file_name = "{}.{}".format(int(float(time.time()) * 1000), filesuffix) - filePath = os.path.join(os.getcwd(), "templates/front", file_name) - print("filePath===========>", filePath) - - with open(filePath, 'wb+') as destination: - for chunk in file.chunks(): - destination.write(chunk) - msg["file"] = file_name - # 判断是否需要保存为人脸识别基础照片 - req_dict = request.session.get("req_dict") - type1 = req_dict.get("type", 0) - print("type1=======>",type1) - type1 = int(type1) - if type1 == 1: - params = {"name":"faceFile","value": file_name} - config.createbyreq(config, config, params) - return JsonResponse(msg) - - -def schemaName_file_download(request): - ''' - 下载 - ''' - if request.method in ["POST", "GET"]: - req_dict = request.session.get("req_dict") - filename = req_dict.get("fileName") - - filePath = os.path.join(os.getcwd(), "templates/front", filename) - print("filePath===========>", filePath) - - file = open(filePath, 'rb') - response = HttpResponse(file) - - response['Content-Type'] = 'text/plain' - response['Content-Disposition'] = 'attachment; filename=%s' % os.path.basename(filePath) - response['Content-Length'] = os.path.getsize(filePath) - return response - - -def schemaName_follow_level(request, tableName, columnName, level, parent): - ''' - - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, 'data': []} - # 组合查询参数 - params = { - "level": level, - "parent": parent - } - - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__ == tableName: - data = m.getbyparams( - m, - m, - params - ) - # 只需要此列的数据 - for i in data: - msg['data'].append(i.get(columnName)) - break - return JsonResponse(msg) - - -def schemaName_follow(request, tableName, columnName): - ''' - 根据option字段值获取某表的单行记录接口 - 组合columnName和columnValue成dict,传入查询方法 - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, 'data': []} - # 组合查询参数 - params = request.session.get('req_dict') - columnValue = params.get("columnValue") - params = {columnName: columnValue} - - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__ == tableName: - data = m.getbyparams( - m, - m, - params - ) - if len(data)>0: - msg['data'] = data[0] - break - - return JsonResponse(msg) - - -def schemaName_location(request): - ''' - 定位 - :return: - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "address": ''} - req_dict = request.session.get('req_dict') - - datas = config.getbyparams(config, config, {"name": "baidu_ditu_ak"}) - if len(datas) > 0: - baidu_ditu_ak = datas[0].get("baidu_ditu_ak") - else: - baidu_ditu_ak = 'QvMZVORsL7sGzPyTf5ZhawntyjiWYCif' - lat = req_dict.get("lat", 24.2943350100) - lon = req_dict.get("lng", 116.1287866600) - msg['address'] = geocoding(baidu_ditu_ak, lat, lon) - - return JsonResponse(msg) - - -def schemaName_matchface(request): - ''' - baidubce百度人脸识别 - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code} - req_dict = request.session.get("req_dict") - - face1 = req_dict.get("face1") - file_path1 = os.path.join(os.getcwd(),"templates/front",face1) - - face2 = req_dict.get("face1") - file_path2 = os.path.join(os.getcwd(), "templates/front", face2) - - data = config.getbyparams(config, config, {"name": "APIKey"}) - client_id = data[0].get("APIKey") - data = config.getbyparams(config, config, {"name": "SecretKey"}) - client_secret = data[0].get("SecretKey") - - bdb = BaiDuBce() - score = bdb.bd_check2pic(client_id, client_secret, file_path1, file_path2) - msg['score'] = score - - return JsonResponse(msg) - - -def schemaName_option(request, tableName, columnName): - ''' - 获取某表的某个字段列表接口 - :param request: - :param tableName: - :param columnName: - :return: - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, 'data': []} - - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__ == tableName: - data = m.getbyColumn( - m, - m, - columnName - ) - - msg['data'] = data - break - return JsonResponse(msg) - - -def schemaName_remind_tablename_columnname_type(request, tableName, columnName, type)->int: - ''' - 前台提醒接口(通用接口,不需要登陆) - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, 'data': []} - # 组合查询参数 - params = request.session.get("req_dict") - remindstart = int(params.get('remindstart')) if params.get('remindstart') != None else None - remindend = int(params.get('remindend')) if params.get('remindend') != None else None - if int(type) == 1: # 数字 - if remindstart == None and remindend != None: - params['remindstart'] = 0 - elif remindstart != None and remindend == None: - params['remindend'] = 999999 - elif remindstart == None and remindend == None: - params['remindstart'] = 0 - params['remindend'] = 999999 - elif int(type) == 2: # 日期 - current_time = int(time.time()) - if remindstart == None and remindend != None: - starttime = current_time - 60 * 60 * 24 * 365 * 2 - params['remindstart'] = time.strftime("%Y-%m-%d", time.localtime(starttime)) - endtime = current_time + 60 * 60 * 24 * remindend - params['remindend'] = time.strftime("%Y-%m-%d", time.localtime(endtime)) - - elif remindstart != None and remindend == None: - starttime = current_time - 60 * 60 * 24 * remindstart - params['remindstart'] = time.strftime("%Y-%m-%d", time.localtime(starttime)) - endtime = current_time + 60 * 60 * 24 * 365 * 2 - params['remindend'] = time.strftime("%Y-%m-%d", time.localtime(endtime)) - elif remindstart == None and remindend == None: - starttime = current_time - 60 * 60 * 24 * 365 * 2 - params['remindstart'] = time.strftime("%Y-%m-%d", time.localtime(starttime)) - endtime = current_time + 60 * 60 * 24 * 365 * 2 - params['remindend'] = time.strftime("%Y-%m-%d", time.localtime(endtime)) - - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__ == tableName: - data = m.getbetweenparams( - m, - m, - columnName, - params - ) - - msg['count'] = len(data) - break - return JsonResponse(msg) - - -def schemaName_tablename_remind_columnname_type(request, tableName, columnName, type): - ''' - 后台提醒接口,判断authSeparate和authTable的权限 - ''' - if request.method in ["POST", "GET"]: - print("schemaName_tablename_remind_columnname_type==============>") - msg = {"code": normal_code, 'data': []} - - req_dict = request.session.get("req_dict") - remindstart = int(req_dict.get('remindstart')) if req_dict.get('remindstart')!=None else None - remindend = int(req_dict.get('remindend')) if req_dict.get('remindend')!=None else None - print("req_dict===================>",req_dict) - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__ == tableName: - tableModel=m - break - # 获取全部列名 - columns = tableModel.getallcolumn(tableModel, tableModel) - - # 当前登录用户所在表 - tablename = request.session.get("tablename") - # 当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的 - try: - __authTables__ =tableModel.__authTables__ - except: - __authTables__ = {} - - if __authTables__ != {}: - - for authColumn, authTable in __authTables__.items(): - if authTable == tablename: - params = request.session.get("params") - req_dict[authColumn] = params.get(authColumn) - break - - - '''__authSeparate__此属性为真,params添加userid,后台只查询个人数据''' - try: - __authSeparate__ =tableModel.__authSeparate__ - except: - __authSeparate__ = None - - if __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 - - # 组合查询参数 - if int(type) == 1: # 数字 - if remindstart == None and remindend != None: - req_dict['remindstart'] = 0 - elif remindstart != None and remindend == None: - req_dict['remindend'] = 999999 - elif remindstart == None and remindend == None: - req_dict['remindstart'] = 0 - req_dict['remindend'] = 999999 - elif int(type) == 2: # 日期 - current_time = int(time.time()) - if remindstart == None and remindend != None: - starttime = current_time - 60 * 60 * 24 * 365 * 2 - req_dict['remindstart'] = time.strftime("%Y-%m-%d", time.localtime(starttime)) - endtime = current_time + 60 * 60 * 24 * remindend - req_dict['remindend'] = time.strftime("%Y-%m-%d", time.localtime(endtime)) - - elif remindstart != None and remindend == None: - starttime = current_time - 60 * 60 * 24 * remindstart - req_dict['remindstart'] = time.strftime("%Y-%m-%d", time.localtime(starttime)) - endtime = current_time + 60 * 60 * 24 * 365 * 2 - req_dict['remindend'] = time.strftime("%Y-%m-%d", time.localtime(endtime)) - elif remindstart == None and remindend == None: - starttime = current_time - 60 * 60 * 24 * 365 * 2 - req_dict['remindstart'] = time.strftime("%Y-%m-%d", time.localtime(starttime)) - endtime = current_time + 60 * 60 * 24 * 365 * 2 - req_dict['remindend'] = time.strftime("%Y-%m-%d", time.localtime(endtime)) - else: - starttime = current_time - 60 * 60 * 24 * remindstart - req_dict['remindstart'] = time.strftime("%Y-%m-%d", time.localtime(starttime)) - endtime = current_time + 60 * 60 * 24 * remindend - req_dict['remindend'] = time.strftime("%Y-%m-%d", time.localtime(endtime)) - print("req_dict==============>",req_dict) - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__ == tableName: - data = m.getbetweenparams( - m, - m, - columnName, - req_dict - ) - - msg['count'] = len(data) - break - return JsonResponse(msg) - -def schemaName_sh(request, tableName): - ''' - 根据主键id修改table表的sfsh状态接口 - ''' - if request.method in ["POST", "GET"]: - print('tableName=========>', tableName) - msg = {"code": normal_code, "msg": "成功", "data": {}} - req_dict = request.session.get("req_dict") - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__ == tableName: - - # 查询结果 - data1 = m.getbyid( - m, - m, - req_dict.get('id') - ) - if data1[0].get("sfsh") == '是': - req_dict['sfsh'] = '否' - else: - req_dict['sfsh'] = '否' - - # 更新 - res = m.updatebyparams( - m, - m, - req_dict - ) - # logging.warning("schemaName_sh.res=====>{}".format(res)) - if res!=None: - msg["code"]=crud_error_code - msg["code"]=mes.crud_error_code - break - return JsonResponse(msg) - - -def schemaName_upload(request, fileName): - ''' - ''' - if request.method in ["POST", "GET"]: - return HttpResponseRedirect ("/{}/front/{}".format(schemaName,fileName)) - - -def schemaName_group_quyu(request, tableName, columnName): - ''' - { - "code": 0, - "data": [ - { - "total": 2, - "shangpinleibie": "水果" - }, - { - "total": 1, - "shangpinleibie": "蔬菜" - } - ] - } - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": "成功", "data": {}} - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__ == tableName: - msg['data'] = m.groupbycolumnname( - m, - m, - columnName - ) - break - - return JsonResponse(msg) - - -def schemaName_value_quyu(request, tableName, xColumnName, yColumnName): - ''' - 按值统计接口, - { - "code": 0, - "data": [ - { - "total": 10.0, - "shangpinleibie": "aa" - }, - { - "total": 20.0, - "shangpinleibie": "bb" - }, - { - "total": 15.0, - "shangpinleibie": "cc" - } - ] -} - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": "成功", "data": {}} - allModels = apps.get_app_config('main').get_models() - for m in allModels: - if m.__tablename__ == tableName: - msg['data'] = m.getvaluebyxycolumnname( - m, - m, - xColumnName, - yColumnName - ) - break - - return JsonResponse(msg) diff --git a/src/main/tests.py b/src/main/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/src/main/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/src/main/urls.py b/src/main/urls.py deleted file mode 100644 index 0129f92..0000000 --- a/src/main/urls.py +++ /dev/null @@ -1,148 +0,0 @@ -# coding:utf-8 -__author__ = "ila" - -import os -from django.urls import path -from main import users_v, config_v, schema_v - -# from dj2.settings import dbName as schemaName - -# url规则列表 -urlpatterns = [ - path(r'users/register', users_v.users_register), - path(r'users/login', users_v.users_login), - path(r'users/logout', users_v.users_logout), - path(r'users/session', users_v.users_session), - path(r'users/page', users_v.users_page), - path(r'users/save', users_v.users_save), - path(r'users/info/', users_v.users_info), - path(r'users/update', users_v.users_update), - path(r'users/delete', users_v.users_delete), - - path(r'config/page', config_v.config_page), - path(r'config/list', config_v.config_list), - path(r'config/save', config_v.config_save), - path(r'config/add', config_v.config_add), - path(r'config/info/', config_v.config_info), - path(r'config/detail/', config_v.config_detail), - path(r'config/update', config_v.config_update), - path(r'config/delete', config_v.config_delete), - -] -# main app的路径 -mainDir = os.path.join(os.getcwd(), "main") - -# 过滤文件的列表 -excludeList = [ - "schema_v.py", - "users_v.py", - "config_v.py", -] - -# 循环当前目录下的py文件 - -view_tuple = set() -for i in os.listdir(mainDir): - if i not in excludeList and i[-5:] == "_v.py": - viewName = i[:-3] # 去掉.py后缀字符串 - view_tuple.add("from main import {}".format(viewName)) - -# 组合成import字符串 -import_str = '\n'.join(view_tuple) -# print(import_str) -exec(import_str) - -for i in os.listdir(mainDir): - if i not in excludeList and i[-5:] == "_v.py": - tableName = i[:-5] - tableName = tableName.replace(" ", "").strip() - print("tableName============>", tableName, len(tableName)) - - urlpatterns.extend( - [ - path(r'{}/register'.format(tableName.lower()), - eval("{}_v.{}_register".format(tableName.capitalize(), tableName.lower()))), - path(r'{}/login'.format(tableName.lower()), - eval("{}_v.{}_login".format(tableName.capitalize(), tableName.lower()))), - path(r'{}/logout'.format(tableName.lower()), - eval("{}_v.{}_logout".format(tableName.capitalize(), tableName.lower()))), - path(r'{}/resetPass'.format(tableName.lower()), - eval("{}_v.{}_resetPass".format(tableName.capitalize(), tableName.lower()))), - path(r'{}/session'.format(tableName.lower()), - eval("{}_v.{}_session".format(tableName.capitalize(), tableName.lower()))), - path(r'{}/default'.format(tableName.lower()), - eval("{}_v.{}_default".format(tableName.capitalize(), tableName.lower()))), - path(r'{}/page'.format(tableName.lower()), - eval("{}_v.{}_page".format(tableName.capitalize(), tableName.lower()))), - path(r'{}/autoSort'.format(tableName.lower()), - eval("{}_v.{}_autoSort".format(tableName.capitalize(), tableName.lower()))), - - path(r'{}/save'.format(tableName.lower()), - eval("{}_v.{}_save".format(tableName.capitalize(), tableName.lower()))), - path(r'{}/add'.format(tableName.lower()), - eval("{}_v.{}_add".format(tableName.capitalize(), tableName.lower()))), - path(r'{}/thumbsup/'.format(tableName.lower()), - eval("{}_v.{}_thumbsup".format(tableName.capitalize(), tableName.lower()))), - path(r'{}/info/'.format(tableName.lower()), - eval("{}_v.{}_info".format(tableName.capitalize(), tableName.lower()))), - path(r'{}/detail/'.format(tableName.lower()), - eval("{}_v.{}_detail".format(tableName.capitalize(), tableName.lower()))), - path(r'{}/update'.format(tableName.lower()), - eval("{}_v.{}_update".format(tableName.capitalize(), tableName.lower()))), - path(r'{}/delete'.format(tableName.lower()), - eval("{}_v.{}_delete".format(tableName.capitalize(), tableName.lower()))), - path(r'{}/vote/'.format(tableName.lower()), - eval("{}_v.{}_vote".format(tableName.capitalize(), tableName.lower()))), - ] - ) - - # examrecord特定接口 - if tableName.lower() == "examrecord": - urlpatterns.extend( - [ - path(r'{}/groupby'.format(tableName.lower()), - eval("{}_v.{}_groupby".format(tableName.capitalize(), tableName.lower()))), - path(r'{}/deleteRecords'.format(tableName.lower()), - eval("{}_v.{}_deleterecords".format(tableName.capitalize(), tableName.lower()))), - ] - ) - - # forum特定接口 - if tableName.lower() == "forum": - urlpatterns.extend( - [ - path(r'{}/flist'.format(tableName.lower()), - eval("{}_v.{}_flist".format(tableName.capitalize(), tableName.lower()))), - path(r'{}/list/'.format(tableName.lower()), - eval("{}_v.{}_list_id".format(tableName.capitalize(), tableName.lower()))), - ] - ) - else: - urlpatterns.extend( - [ - path(r'{}/list'.format(tableName.lower()), - eval("{}_v.{}_list".format(tableName.capitalize(), tableName.lower()))), - ] - ) -urlpatterns.extend( - [ - path(r'cal//', schema_v.schemaName_cal), - path(r'file/download', schema_v.schemaName_file_download), - path(r'file/upload', schema_v.schemaName_file_upload), - path(r'follow////', schema_v.schemaName_follow_level), - path(r'follow//', schema_v.schemaName_follow), - path(r'location', schema_v.schemaName_location), - path(r'matchFace', schema_v.schemaName_matchface), - path(r'option//', schema_v.schemaName_option), - path(r'remind///', schema_v.schemaName_remind_tablename_columnname_type), - # 前台提醒接口(通用接口,不需要登陆) - path(r'/remind//', schema_v.schemaName_tablename_remind_columnname_type), - # 后台提醒接口 (每个表的单独接口,需登录) - path(r'sh/', schema_v.schemaName_sh), - path(r'upload/', schema_v.schemaName_upload), - path(r'group//', schema_v.schemaName_group_quyu), - path(r'value///', schema_v.schemaName_value_quyu), - ] -) - -# print(urlpatterns) diff --git a/src/main/users_model.py b/src/main/users_model.py deleted file mode 100644 index b19cd81..0000000 --- a/src/main/users_model.py +++ /dev/null @@ -1,22 +0,0 @@ -# coding:utf-8 -__author__ = "ila" - -from django.db import models - -from .model import BaseModel - - -class users(BaseModel): - # id=models.BigIntegerField(verbose_name="自增id") - username = models.CharField(max_length=100, verbose_name=u'账号') - password = models.CharField(max_length=100, verbose_name=u'密码') - role = models.CharField(max_length=100, verbose_name=u'角色') - addtime = models.DateTimeField(auto_now_add=False, verbose_name=u'创建时间') - __tablename__ = 'users' - - class Meta: - db_table = 'users' - verbose_name = verbose_name_plural = u'管理员表' - - # def __str__(self): - # return self.username diff --git a/src/main/users_v.py b/src/main/users_v.py deleted file mode 100644 index 85123df..0000000 --- a/src/main/users_v.py +++ /dev/null @@ -1,161 +0,0 @@ -# coding:utf-8 -__author__ = "ila" - -from django.http import JsonResponse - -from .users_model import users -from util.codes import * -from util.auth import Auth -import util.message as mes - - -def users_login(request): - if request.method in ["POST", "GET"]: - msg = {'code': normal_code, "msg": mes.normal_code} - req_dict = request.session.get("req_dict") - if req_dict.get('role')!=None: - del req_dict['role'] - datas = users.getbyparams(users, users, req_dict) - if not datas: - msg['code'] = password_error_code - msg['msg'] = mes.password_error_code - return JsonResponse(msg) - - req_dict['id'] = datas[0].get('id') - return Auth.authenticate(Auth, users, req_dict) - - -def users_register(request): - if request.method in ["POST", "GET"]: - msg = {'code': normal_code, "msg": mes.normal_code} - req_dict = request.session.get("req_dict") - - error = users.createbyreq(users, users, req_dict) - if error != None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def users_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'] = users.getbyparams(users, users, req_dict)[0] - - return JsonResponse(msg) - - -def users_logout(request): - if request.method in ["POST", "GET"]: - msg = { - "msg": "退出成功", - "code": 0 - } - - return JsonResponse(msg) - - -def users_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") - tablename = request.session.get("tablename") - try: - __hasMessage__ = users.__hasMessage__ - except: - __hasMessage__ = None - if __hasMessage__ and __hasMessage__ != "否": - - if tablename != "users": - req_dict["userid"] = request.session.get("params").get("id") - if tablename == "users": - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] = users.page(users, users, req_dict) - else: - msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ - msg['data']['pageSize'] = [],1,0,0,10 - - return JsonResponse(msg) - - -def users_info(request, id_): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - - data = users.getbyid(users, users, int(id_)) - if len(data) > 0: - msg['data'] = data[0] - # 浏览点击次数 - try: - __browseClick__ = users.__browseClick__ - except: - __browseClick__ = None - - if __browseClick__ and "clicknum" in users.getallcolumn(users, users): - click_dict = {"id": int(id_), "clicknum": str(int(data[0].get("clicknum", 0)) + 1)} - ret = users.updatebyparams(users, users, click_dict) - if ret != None: - msg['code'] = crud_error_code - msg['msg'] = ret - return JsonResponse(msg) - - -def users_save(request): - ''' - ''' - if request.method in ["POST", "GET"]: - msg = {"code": normal_code, "msg": mes.normal_code, "data": {}} - req_dict = request.session.get("req_dict") - error = users.createbyreq(users, users, req_dict) - if error != None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def users_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 req_dict.get("password"): - if "mima" not in users.getallcolumn(users,users): - del req_dict["mima"] - if "password" not in users.getallcolumn(users,users): - del req_dict["password"] - try: - del req_dict["clicknum"] - except: - pass - error = users.updatebyparams(users, users, req_dict) - if error != None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) - - -def users_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 = users.deletes(users, - users, - req_dict.get("ids") - ) - if error != None: - msg['code'] = crud_error_code - msg['msg'] = error - return JsonResponse(msg) diff --git a/src/main/views.py b/src/main/views.py deleted file mode 100644 index 91ea44a..0000000 --- a/src/main/views.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here.