views.py 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523
  1. # -*- coding: utf-8 -*-
  2. from django.shortcuts import render
  3. from django.http.response import HttpResponse,HttpResponseBadRequest
  4. from django.views.generic import ListView
  5. from django.core.exceptions import ObjectDoesNotExist
  6. import json
  7. from django.core import serializers
  8. import xlwt
  9. import requests
  10. from requests.auth import HTTPBasicAuth
  11. import json
  12. from io import BytesIO
  13. # from apps.EquipManage.views import CJSONEncoder
  14. from apps.AppInfoManage.models import MyUser,SCDstatus,CBDstatus,Equip,User_Log, Equip_SimInfo
  15. def get_siminfo(iccid):
  16. url = 'http://api.openluat.com/sim/iotcard/card'
  17. print('url:',url)
  18. appkey = "KDlhc9VY4rWSXkbM"
  19. appsecret = "DmwxcSB1b8dx7kLWqWMJNRLgyQhCvPJ7DHIfLdHIz9A18CifSHqJk3nWZ1vHv4cR"
  20. res = requests.post(url,json={'iccid':iccid},auth=HTTPBasicAuth(appkey,appsecret))
  21. return res
  22. def get_simsinfo(iccids):
  23. url = 'http://api.openluat.com/sim/iotcard/cards'
  24. print('url:',url)
  25. appkey = "KDlhc9VY4rWSXkbM"
  26. appsecret = "DmwxcSB1b8dx7kLWqWMJNRLgyQhCvPJ7DHIfLdHIz9A18CifSHqJk3nWZ1vHv4cR"
  27. res = requests.post(url,json={'iccids':iccids},auth=HTTPBasicAuth(appkey,appsecret))
  28. return res
  29. # Create your views here.
  30. # SIM卡列表:
  31. class SimInfo(ListView):
  32. def get(self, request):
  33. current_user = request.session.get('username')
  34. current_user = MyUser.objects.get(username=current_user)
  35. if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
  36. print("---用户")
  37. nums = SCDstatus.objects.filter(equip_id__equip_user=current_user).count()+CBDstatus.objects.filter(equip_id__equip_user=current_user).count()
  38. elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
  39. print("---代理商")
  40. nums = SCDstatus.objects.filter(equip_id__equip_agency=current_user.user_agency).count()+CBDstatus.objects.filter(
  41. equip_id__equip_agency=current_user.user_agency).count()
  42. else:
  43. print("---管理员")
  44. nums = SCDstatus.objects.all().count()+CBDstatus.objects.all().count()
  45. User_Log.objects.create(log_user=current_user,
  46. log_ip=request.META['REMOTE_ADDR'], log_desc='SIM卡信息')
  47. return render(request, 'siminfo/siminfo.html', context={"nums": nums})
  48. def post(self, request):
  49. req = request.POST.get('req')
  50. print("req:", req)
  51. simid = request.POST.get('simid')
  52. if simid:
  53. res = get_siminfo(simid)
  54. return HttpResponse(res.text)
  55. if req == "reqdat":
  56. page = int(request.POST.get('page'))
  57. print("page:", page)
  58. current_user = request.session.get('username')
  59. print("current_user:", current_user)
  60. current_user = MyUser.objects.get(username=current_user)
  61. if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
  62. sta1 = SCDstatus.objects.filter(equip_id__equip_user=current_user)
  63. sta2 = CBDstatus.objects.filter(equip_id__equip_user=current_user)
  64. elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
  65. sta1 = SCDstatus.objects.filter(equip_id__equip_agency=current_user.user_agency)
  66. sta2 = CBDstatus.objects.filter(equip_id__equip_agency=current_user.user_agency)
  67. else:
  68. sta1 = SCDstatus.objects.all()
  69. sta2 = CBDstatus.objects.all()
  70. # 获取设备列表中的SIM卡的iccid号码:
  71. iccids = []
  72. # 获取设备的id:
  73. equip_ids = []
  74. # 获取设备的名称:
  75. equip_names = []
  76. # 遍历查询流量信息:
  77. siminfos = []
  78. for i in sta1:
  79. try:
  80. iccid = eval(i.scd_status)['iccid']
  81. except:
  82. iccid = ""
  83. iccids.append(iccid)
  84. equip_ids.append(str(i.equip_id))
  85. equip_names.append(str(i.equip_id.equip_name))
  86. for i in sta2:
  87. try:
  88. iccid = eval(i.cbd_status)['iccid']
  89. except:
  90. iccid = ""
  91. iccids.append(iccid)
  92. equip_ids.append(str(i.equip_id))
  93. equip_names.append(str(i.equip_id.equip_name))
  94. # print('all iccids :',iccids)
  95. # print('all equip_ids :',equip_ids)
  96. # print('all equip_names :',equip_names)
  97. iccids=iccids[(10*(page-1)):(page*10)]
  98. equip_ids=equip_ids[(10*(page-1)):(page*10)]
  99. equip_names=equip_names[(10*(page-1)):(page*10)]
  100. # print('iccids :',iccids)
  101. # print('equip_ids :',equip_ids)
  102. # print('equip_names :',equip_names)
  103. # 调用api查到的iccid号:
  104. equip_iccids = []
  105. iccids_str = ",".join(iccids)
  106. print("iccids_str:",iccids_str)
  107. res = get_simsinfo(iccids_str).content
  108. print('res',res)
  109. siminfo_str=str(res, encoding = "utf-8")
  110. siminfo_dict=eval(siminfo_str)
  111. # 保存调用查询流量的api返回的数据;
  112. dat = []
  113. for j in list(range(0,siminfo_dict['data']['count'])):
  114. equip_iccids.append(siminfo_dict['data']['card_list'][j]['iccid'])
  115. # print('equip_iccids:',equip_iccids)
  116. for j in list(range(0,len(iccids))):
  117. siminfo_dict=eval(siminfo_str)
  118. if (iccids[j] in equip_iccids) == True:
  119. dat.append(siminfo_dict['data']['card_list'][equip_iccids.index(iccids[j])])
  120. else:
  121. dat.append({})
  122. dat[j]['equip_id']=equip_ids[j]
  123. dat[j]['equip_name']=equip_names[j]
  124. # print("dat[%d]=%s" %(j,dat[j]))
  125. iccids[j] = ""# 每次判断玩将该值清空,防止多个设备用一个SIM卡测试时显示异常;
  126. # print('----- iccids :',iccids)
  127. print("------------------------",dat)
  128. data = json.dumps(dat,indent=4)
  129. # print("data:",data)
  130. return HttpResponse(data)
  131. # 查询单个卡流量信息:
  132. class SingleSim(ListView):
  133. def get(self, request):
  134. iccid = request.GET.get('iccid')
  135. print('iccid:',iccid)
  136. print('type iccid:',type(iccid))
  137. re = get_siminfo(iccid)
  138. print('re:',re)
  139. return HttpResponse(re)
  140. def post(self, request):
  141. return HttpResponseBadRequest()
  142. # 查询多个卡流量信息:
  143. class MultiSim(ListView):
  144. def get(self, request):
  145. iccids = request.GET.get('iccids')
  146. print("iccids:", iccids)
  147. re = get_simsinfo(iccids)
  148. print('re:',re)
  149. return HttpResponse(re)
  150. def post(self, request):
  151. return HttpResponseBadRequest()
  152. from datetime import datetime, date
  153. class CJSONEncoder(json.JSONEncoder):
  154. def default(self, obj):
  155. if isinstance(obj, datetime):
  156. return obj.strftime('%Y-%m-%d %H:%M:%S')
  157. elif isinstance(obj, date):
  158. return obj.strftime('%Y-%m-%d')
  159. else:
  160. return json.JSONEncoder.default(self, obj)
  161. # 根据卡号查询设备
  162. class Reverse_Lookup(ListView):
  163. def get(self, request):
  164. pass
  165. def post(self, request):
  166. iccid = request.POST.get('simid')
  167. print(iccid)
  168. cbd_obj = CBDstatus.objects.all().values()
  169. scd_obj = SCDstatus.objects.all().values()
  170. dat = []
  171. for i in cbd_obj:
  172. try:
  173. if iccid == eval(i["cbd_status"])["iccid"]:
  174. print(eval(i["cbd_status"])["iccid"])
  175. print(i["off_time"])
  176. ic_eq = {"id":i["equip_id_id"],"lng":i["lng"],"lat":i["lat"],"offtime":i["off_time"]}
  177. dat.append(ic_eq)
  178. except Exception as e:
  179. # print("=====================================")
  180. # print(e)
  181. pass
  182. for x in scd_obj:
  183. try:
  184. # print(eval(x["scd_status"])["iccid"])
  185. # print(x["off_time"])
  186. if iccid == eval(x["scd_status"])["iccid"]:
  187. ic_eq = {"id":x["equip_id_id"],"lng":x["lng"],"lat":x["lat"],"offtime":x["off_time"]}
  188. dat.append(ic_eq)
  189. except Exception as e:
  190. # print("-----------------------------")
  191. # print(e)
  192. pass
  193. print(dat)
  194. data = json.dumps(dat, cls=CJSONEncoder)
  195. return HttpResponse(data)
  196. # 物联网卡查询套餐接口
  197. class Iccid_Select(ListView):
  198. def get(self,request):
  199. pass
  200. def post(self,request):
  201. iccid = request.POST.get("iccid")
  202. url = 'https://api.openluat.com/sim/iotcard/product/fetch'
  203. payload = {
  204. 'iccid': iccid
  205. }
  206. appkey = 'KDlhc9VY4rWSXkbM'
  207. appsecret = 'DmwxcSB1b8dx7kLWqWMJNRLgyQhCvPJ7DHIfLdHIz9A18CifSHqJk3nWZ1vHv4cR'
  208. #在 http://sim.openluat.com/apiinterface 查看自己的appkey,appsecret。
  209. auth = HTTPBasicAuth(appkey, appsecret)
  210. res = requests.post(url, json=payload, auth=auth)
  211. print(json.loads(res.text))
  212. return HttpResponse(res.text)
  213. # 物联网卡充值接口
  214. class Iccid_Pay(ListView):
  215. def get(self,request):
  216. pass
  217. def post(self,request):
  218. product_id = int(request.POST.get("product_id"))
  219. iccid = request.POST.get("iccid")
  220. num = int(request.POST.get("num"))
  221. extra_no = datetime.now().strftime("%Y%m%d%H%M%S")
  222. url = 'https://api.openluat.com/sim/iotcard/make_order'
  223. payload = {
  224. 'iccid': iccid,
  225. 'product_id': product_id,
  226. 'num': num,
  227. 'extra_no': extra_no,
  228. 'remark': '备注'
  229. }
  230. appkey = 'KDlhc9VY4rWSXkbM'
  231. appsecret = 'DmwxcSB1b8dx7kLWqWMJNRLgyQhCvPJ7DHIfLdHIz9A18CifSHqJk3nWZ1vHv4cR'
  232. #在 http://sim.openluat.com/apiinterface 查看自己的appkey,appsecret。
  233. auth = HTTPBasicAuth(appkey, appsecret)
  234. res = requests.post(url, json=payload, auth=auth)
  235. return HttpResponse(res.text)
  236. # Sim卡信息页面
  237. class SimInfo_View(ListView):
  238. def get(self,request):
  239. current_user = request.session.get('username')
  240. current_user = MyUser.objects.get(username=current_user)
  241. if current_user.is_superuser:
  242. role = "superuser"
  243. elif current_user.is_staff:
  244. role = "staff"
  245. elif current_user.is_agency:
  246. role = "agency"
  247. else:
  248. role = "user"
  249. return render(request, 'siminfo/siminfo.html', context={"role":role})
  250. def post(self,request):
  251. pass
  252. # Sim卡信息列表
  253. class SimInfo_List(ListView):
  254. def get(self,request):
  255. current_user = request.session.get('username')
  256. current_user = MyUser.objects.get(username=current_user)
  257. page = int(request.GET.get("page"))
  258. e_id = request.GET.get("e_id")
  259. iccid = request.GET.get("iccid")
  260. status = request.GET.get("status")
  261. if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
  262. print("---用户")
  263. if e_id:
  264. simlist = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user,equip_id__equip_id__contains=e_id)[(10*(page-1)):(page*10)]
  265. nums = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user,equip_id__equip_id__contains=e_id).count()
  266. elif iccid:
  267. simlist = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user,iccid__contains=iccid)[(10*(page-1)):(page*10)]
  268. nums = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user,iccid__contains=iccid).count()
  269. elif status:
  270. status = int(status)
  271. simlist = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user,account_status=status)[(10*(page-1)):(page*10)]
  272. nums = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user,account_status=status).count()
  273. else:
  274. simlist = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user)[(10*(page-1)):(page*10)]
  275. nums = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user).count()
  276. elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
  277. print("---代理商")
  278. if e_id:
  279. simlist = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency,equip_id__equip_id__contains=e_id)[(10*(page-1)):(page*10)]
  280. nums = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency,equip_id__equip_id__contains=e_id).count()
  281. elif iccid:
  282. simlist = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency,iccid__contains=iccid)[(10*(page-1)):(page*10)]
  283. nums = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency,iccid__contains=iccid).count()
  284. elif status:
  285. status = int(status)
  286. simlist = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency,account_status=status)[(10*(page-1)):(page*10)]
  287. nums = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency,account_status=status).count()
  288. else:
  289. simlist = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency)[(10*(page-1)):(page*10)]
  290. nums = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency).count()
  291. else:
  292. print("---管理员")
  293. if e_id:
  294. simlist = Equip_SimInfo.objects.filter(equip_id__equip_id__contains=e_id)[(10*(page-1)):(page*10)]
  295. nums = Equip_SimInfo.objects.filter(equip_id__equip_id__contains=e_id).count()
  296. elif iccid:
  297. simlist = Equip_SimInfo.objects.filter(iccid__contains=iccid)[(10*(page-1)):(page*10)]
  298. nums = Equip_SimInfo.objects.filter(iccid__contains=iccid).count()
  299. elif status:
  300. status = int(status)
  301. simlist = Equip_SimInfo.objects.filter(account_status=status)[(10*(page-1)):(page*10)]
  302. nums = Equip_SimInfo.objects.filter(account_status=status).count()
  303. else:
  304. simlist = Equip_SimInfo.objects.all()[(10*(page-1)):(page*10)]
  305. nums = Equip_SimInfo.objects.all().count()
  306. return render(request, 'siminfo/siminfoList.html', context={"simlist":simlist,"nums":nums})
  307. def post(self,request):
  308. pass
  309. # Sim卡信息列表
  310. class SimInfo_ListView(ListView):
  311. def get(self,request):
  312. current_user = request.session.get('username')
  313. current_user = MyUser.objects.get(username=current_user)
  314. page = int(request.GET.get("page"))
  315. e_type = request.GET.get("e_type")
  316. status = request.GET.get("status")
  317. if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
  318. print("---用户")
  319. if e_type != "" and status == "":
  320. simlist = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user,equip_type=e_type)[(10*(page-1)):(page*10)]
  321. nums = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user,equip_type=e_type).count()
  322. elif e_type == "" and status != "":
  323. status = int(status)
  324. simlist = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user,account_status=status)[(10*(page-1)):(page*10)]
  325. nums = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user,account_status=status).count()
  326. elif e_type != "" and status != "":
  327. status = int(status)
  328. simlist = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user,account_status=status,equip_type=e_type)[(10*(page-1)):(page*10)]
  329. nums = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user,account_status=status,equip_type=e_type).count()
  330. else:
  331. simlist = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user)[(10*(page-1)):(page*10)]
  332. nums = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user).count()
  333. elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
  334. print("---代理商")
  335. if e_type != "" and status == "":
  336. simlist = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency,equip_type=e_type)[(10*(page-1)):(page*10)]
  337. nums = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency,equip_type=e_type).count()
  338. elif e_type == "" and status != "":
  339. status = int(status)
  340. simlist = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency,account_status=status)[(10*(page-1)):(page*10)]
  341. nums = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency,account_status=status).count()
  342. elif e_type != "" and status != "":
  343. status = int(status)
  344. simlist = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency,account_status=status,equip_type=e_type)[(10*(page-1)):(page*10)]
  345. nums = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency,account_status=status,equip_type=e_type).count()
  346. else:
  347. simlist = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency)[(10*(page-1)):(page*10)]
  348. nums = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency).count()
  349. else:
  350. print("---管理员")
  351. if e_type != "" and status == "":
  352. simlist = Equip_SimInfo.objects.filter(equip_type=e_type)[(10*(page-1)):(page*10)]
  353. nums = Equip_SimInfo.objects.filter(equip_type=e_type).count()
  354. elif e_type == "" and status != "":
  355. status = int(status)
  356. simlist = Equip_SimInfo.objects.filter(account_status=status)[(10*(page-1)):(page*10)]
  357. nums = Equip_SimInfo.objects.filter(account_status=status).count()
  358. elif e_type != "" and status != "":
  359. status = int(status)
  360. simlist = Equip_SimInfo.objects.filter(account_status=status,equip_type=e_type)[(10*(page-1)):(page*10)]
  361. nums = Equip_SimInfo.objects.filter(account_status=status,equip_type=e_type).count()
  362. else:
  363. simlist = Equip_SimInfo.objects.all()[(10*(page-1)):(page*10)]
  364. nums = Equip_SimInfo.objects.all().count()
  365. return render(request, 'siminfo/siminfoList.html', context={"simlist":simlist,"nums":nums})
  366. def post(self,request):
  367. pass
  368. # Sim卡信息图表
  369. class SimInfo_Chart(ListView):
  370. def get(self,request):
  371. pass
  372. def post(self,request):
  373. e_type = request.POST.get("etype")
  374. current_user = request.session.get('username')
  375. current_user = MyUser.objects.get(username=current_user)
  376. if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
  377. print("---用户")
  378. sta = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user)
  379. if e_type:
  380. sta = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user,equip_type=e_type)
  381. elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
  382. print("---代理商")
  383. sta = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency)
  384. if e_type:
  385. sta = Equip_SimInfo.objects.filter(equip_type=e_type,equip_id__equip_agency=current_user.user_agency)
  386. else:
  387. print("---管理员")
  388. sta = Equip_SimInfo.objects.all()
  389. if e_type:
  390. sta = Equip_SimInfo.objects.filter(equip_type=e_type)
  391. dat = []
  392. for i in sta:
  393. dat.append(i.account_status)
  394. data = json.dumps(dat)
  395. return HttpResponse(data)
  396. # sim卡数据导出
  397. class SimInfo_Export(ListView):
  398. def get(self,request):
  399. current_user = request.session.get('username')
  400. current_user = MyUser.objects.get(username=current_user)
  401. status = request.GET.get("status")
  402. filename = request.GET.get("filename")
  403. if current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency != True:
  404. print("---用户")
  405. if status:
  406. status = int(status)
  407. simlist = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user,account_status=status)
  408. else:
  409. simlist = Equip_SimInfo.objects.filter(equip_id__equip_user=current_user)
  410. elif current_user.is_superuser != True and current_user.is_staff != True and current_user.is_agency == True:
  411. print("---代理商")
  412. if status:
  413. status = int(status)
  414. simlist = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency,account_status=status)
  415. else:
  416. simlist = Equip_SimInfo.objects.filter(equip_id__equip_agency=current_user.user_agency)
  417. else:
  418. print("---管理员")
  419. if status:
  420. status = int(status)
  421. simlist = Equip_SimInfo.objects.filter(account_status=status)
  422. else:
  423. simlist = Equip_SimInfo.objects.all()
  424. sta2 = []
  425. for xx in simlist:
  426. sta2.append({"equip_id":xx.equip_id_id,"equip_name":xx.equip_name,"equip_type":xx.equip_type,
  427. "iccid":xx.iccid,"active_date":xx.active_date,"account_status":xx.account_status,
  428. "data_plan":xx.data_plan,"expiry_date":xx.expiry_date})
  429. title = ["设备ID","设备名称","设备类型","ICCID","激活日期","SIM卡状态","套餐","到期时间"]
  430. book = xlwt.Workbook() # 创建一个excel对象
  431. sheet = book.add_sheet('Sheet1',cell_overwrite_ok=True) # 添加一个sheet页
  432. for i in range(len(title)): # 遍历列
  433. sheet.write(0,i,title[i]) # 将title数组中的字段写入到0行i列中
  434. for x in range(len(sta2)): # 遍历列表
  435. sheet.write(x+1,0,sta2[x]["equip_id"])
  436. sheet.write(x+1,1,sta2[x]["equip_name"])
  437. sheet.write(x+1,2,sta2[x]["equip_type"])
  438. sheet.write(x+1,3,sta2[x]["iccid"])
  439. sheet.write(x+1,4,sta2[x]["active_date"])
  440. sheet.write(x+1,5,sta2[x]["account_status"])
  441. sheet.write(x+1,6,sta2[x]["data_plan"])
  442. sheet.write(x+1,7,sta2[x]["expiry_date"])
  443. sheet.col(0).width = 256 * 18
  444. sheet.col(1).width = 256 * 18
  445. sheet.col(2).width = 256 * 18
  446. sheet.col(3).width = 256 * 18
  447. sheet.col(4).width = 256 * 18
  448. sheet.col(5).width = 256 * 18
  449. sheet.col(6).width = 256 * 18
  450. sheet.col(7).width = 256 * 18
  451. # 写出到IO
  452. output = BytesIO()
  453. book.save(output)
  454. # 重新定位到开始
  455. output.seek(0)
  456. response = HttpResponse(content_type='application/vnd.ms-excel')
  457. response['Content-Disposition'] = 'attachment;filename=%s.xls'%filename
  458. response.write(output.getvalue())
  459. return response
  460. def post(self,request):
  461. pass