import os from quart import jsonify, request,flash,redirect,url_for,session from . import api from web.common.utils import login_required from core.DBManager import mDBM from core.Upload_file import allowed_file,check_file,update_system from myutils.ConfigManager import myCongif from myutils.ReManager import mReM from myutils.IPManager import IPM from werkzeug.utils import secure_filename @api.route('/system/info',methods=['GET']) @login_required async def system_info(): #获取系统信息 strsql = "select * from device;" data = mDBM.do_select(strsql,1) strRet = "" if data: #获取wifilist wifilist = IPM.get_wifi_list() connected_wifi = IPM.get_connected_wifi() print(connected_wifi) strRet = {"ID":data[0],"version":data[1],"wired_type":data[2],"wired_ip":data[3],"wired_mask":data[4], "wired_gateway":data[5],"wired_dns":data[6],"wireless_type":data[7],"wireless_ip":data[8],"wireless_mask":data[9], "wireless_gateway":data[10],"wireless_dns":data[11],"service_ip":data[12],"service_port":data[13], "ssid":connected_wifi,"wifi_passwd":data[15],"wifi_list":wifilist} return jsonify(strRet) #它将Python对象转换为JSON格式的字符串,并将其作为HTTP响应的主体返回给客户端, # 同时设置正确的Content-Type响应头,表明响应主体是JSON格式的数据。 @api.route('/system/area',methods=['GET']) @login_required async def area_info(): #获取系统信息 strsql = "select * from area;" datas = mDBM.do_select(strsql) strRet = "" if datas: strRet = [{'ID':data[0],'area_name':data[1]} for data in datas] return jsonify(strRet) @api.route('/system/upload',methods=['POST']) @login_required async def system_upload(): #上传系统升级文件 form = await request.form files = await request.files if 'file' not in files: flash('参数错误') return redirect(request.url) file = files['file'] if file.filename == '': flash('没有选择文件') return redirect(request.url) if file and allowed_file(file.filename): filename = secure_filename(file.filename) file_path = os.path.join(myCongif.get_data('UPLOAD_FOLDER'), filename) await file.save(file_path) if check_file(file_path,1): session['file'] = file_path flash('升级包上传成功') else: flash('升级包不合法,请重新上传') #return redirect(url_for('main.get_html', html='系统管理.html')) return redirect(request.url) else: flash('只允许上传zip文件') return redirect(request.url) @api.route('/system/upgrade',methods=['POST']) @login_required async def system_upgrade(): #系统升级 if 'file' not in session: reStatus = 0 reMsg = "请先上传升级包文件" else: filepath = session['file'] if update_system(filepath): reStatus = 1 reMsg = "系统升级成功" else: reStatus = 0 reMsg = "系统升级失败" return jsonify({'status': reStatus, 'msg': reMsg}) @api.route('/system/netinfo',methods=['GET']) #获取系统信息 时已经获取,不再处理 @login_required async def system_net_info(): #获取网络信息 return jsonify(1) @api.route('/system/changenet',methods=['POST']) @login_required async def system_net_change(): #修改网络信息 ip = (await request.form)['ip'] mask = (await request.form)['mask'] gateway = (await request.form)['gateway'] #对ip,mask.geteway的合法性进行判断 if mReM.is_valid_ip(ip) and mReM.is_valid_ip(gateway) and mReM.is_valid_subnet_mask(mask): strsql = f"update device set dev_ip='{ip}',dev_mask='{mask}',dev_gateway='{gateway}'" if mDBM.do_sql(strsql): reStatus = 1 reMsg = '修改成功,请确认无误后,重启设备!' else: reStatus = 0 reMsg = '修改失败,请联系技术支持!' else: reStatus = 0 reMsg= '输入的参数不合法,请检查!' return jsonify({'status':reStatus,'msg':reMsg}) @api.route('/system/changeserver',methods=['POST']) @login_required async def system_server_change(): #修改服务器信息 ip = (await request.form)['ip'] port = (await request.form)['port'] # 对ip,mask.geteway的合法性进行判断 if mReM.is_valid_ip(ip) and mReM.is_valid_port(port): strsql = f"update device set service_ip='{ip}',service_port='{port}';" if mDBM.do_sql(strsql): reStatus = 1 reMsg = '修改成功,请确认无误后,重启设备!' else: reStatus = 0 reMsg = '修改失败,请联系技术支持!' else: reStatus = 0 reMsg = '输入的参数不合法,请检查!' return jsonify({'status': reStatus, 'msg': reMsg})