views.py 62 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962
  1. # coding=utf-8
  2. from __future__ import unicode_literals
  3. import requests
  4. import random,datetime,time
  5. import json
  6. import uuid
  7. from django.contrib import auth
  8. from django.core.cache import cache
  9. from django.conf import settings
  10. from django.http import FileResponse,HttpResponse
  11. from wsgiref.util import FileWrapper
  12. import common.error_info as ce
  13. from common import core_views as cv
  14. import common.common_control as ccc
  15. import common.common_functions as ccf
  16. import manage.control_auth as ca
  17. import manage.controls as ctl
  18. import common.models as cm
  19. class UploadFileView(cv.AdminView):
  20. def post(self, request):
  21. """
  22. #文件上传(平台管理后台)
  23. @file:"",文件对象
  24. @type:"",前端自定义参数
  25. """
  26. try:
  27. rst = ccc.upload_file(request)
  28. return cv.to_suc(rst)
  29. except Exception as e:
  30. cv.tracefail()
  31. return cv.to_fail(e)
  32. class UserInfoListView(cv.AdminView):
  33. def get(self, request):
  34. """#用户列表(平台管理后台)
  35. @username:"用户名"
  36. @usercode:"用户代码"
  37. @page:1
  38. @page_size:20
  39. """
  40. qdata = request.json
  41. try:
  42. total,rst = ctl.get_list_info(self,**qdata)
  43. return cv.to_suc({"total":total,"list":rst})
  44. except Exception as e:
  45. cv.tracefail()
  46. return cv.to_fail(e)
  47. class UserInfoView(cv.AdminView):
  48. def get(self, request):
  49. """#用户详情(平台管理后台)
  50. @id:1
  51. """
  52. qdata = request.json
  53. need_params = ["id"]
  54. mse = ccf.check_params(*need_params,**qdata)
  55. if mse:
  56. raise ce.TipException(mse)
  57. try:
  58. vals = ccf.get_need_params(*need_params,**qdata)
  59. rst = ctl.get_detail_info(self,**vals)
  60. return cv.to_suc(rst)
  61. except Exception as e:
  62. cv.tracefail()
  63. return cv.to_fail(e)
  64. def gen_code(self):
  65. """
  66. """
  67. code = ""
  68. while True:
  69. code = "".join([str(random.choice([0,1,2,3,5,6,7,8,9])) for x in range(0,6)])
  70. if cm.UserInfo.objects.filter(usercode=code).exists():
  71. time.sleep(0.1)
  72. continue
  73. break
  74. return code
  75. def post(self,request):
  76. """#新增用户(平台管理后台)
  77. @username:"用户名"
  78. @usercode:"用户代码(非必填限制6位数字)"
  79. """
  80. return cv.to_suc({})
  81. qdata = request.json
  82. need_params = ["username"]
  83. mse = ccf.check_params(*need_params,**qdata)
  84. if mse:
  85. raise ce.TipException(mse)
  86. try:
  87. need_params.extend(["usercode","badge","zq","cw","df","avatar","player_type","phone","intro"])
  88. vals = ccf.get_need_params(*need_params,**qdata)
  89. if not vals.get("usercode"):
  90. vals["usercode"] = self.gen_code()
  91. rst = ctl.add_model(self,**vals)
  92. return cv.to_suc(rst)
  93. except Exception as e:
  94. cv.tracefail()
  95. return cv.to_fail(e)
  96. def put(self,request):
  97. """#修改账号(平台管理后台)
  98. @id:"1"
  99. @username:"用户名"
  100. @usercode:"用户代码(非必填限制6位数字)"
  101. @is_bind:"是否绑定",0/1
  102. """
  103. qdata = request.json
  104. need_params = ["id","username","usercode"]
  105. mse = ccf.check_params(*need_params,**qdata)
  106. if mse:
  107. raise ce.TipException(mse)
  108. try:
  109. need_params.extend(["is_bind","badge","zq","cw","df","avatar","player_type","phone","intro"])
  110. vals = ccf.get_need_params(*need_params,**qdata)
  111. rst = ctl.update_model(self,**vals)
  112. return cv.to_suc(rst)
  113. except Exception as e:
  114. cv.tracefail()
  115. return cv.to_fail(e)
  116. def delete(self,request):
  117. """#删除用户(平台管理后台)
  118. @id:"1",多个逗号分隔
  119. """
  120. qdata = request.json
  121. need_params = ["id"]
  122. mse = ccf.check_params(*need_params,**qdata)
  123. if mse:
  124. raise ce.TipException(mse)
  125. try:
  126. vals = ccf.get_need_params(*need_params,**qdata)
  127. rst = ctl.delete_model(self,**vals)
  128. return cv.to_suc(rst)
  129. except Exception as e:
  130. cv.tracefail()
  131. return cv.to_fail(e)
  132. class PlayerListView(cv.AdminView):
  133. def get(self, request):
  134. """#选手列表(平台管理后台)
  135. @user_id:""
  136. @match_id:""
  137. @match_group:""
  138. @page:1
  139. @page_size:20
  140. """
  141. qdata = request.json
  142. try:
  143. total,rst = ctl.get_list_info(self,**qdata)
  144. return cv.to_suc({"total":total,"list":rst})
  145. except Exception as e:
  146. cv.tracefail()
  147. return cv.to_fail(e)
  148. class PlayerView(cv.AdminView):
  149. def get(self, request):
  150. """#选手详情(平台管理后台)
  151. @id:1
  152. """
  153. qdata = request.json
  154. need_params = ["id"]
  155. mse = ccf.check_params(*need_params,**qdata)
  156. if mse:
  157. raise ce.TipException(mse)
  158. try:
  159. vals = ccf.get_need_params(*need_params,**qdata)
  160. rst = ctl.get_detail_info(self,**vals)
  161. return cv.to_suc(rst)
  162. except Exception as e:
  163. cv.tracefail()
  164. return cv.to_fail(e)
  165. def post(self,request):
  166. """#新增选手(平台管理后台)
  167. @user_id:"用户id"
  168. @fund:"资金"
  169. @match_id:"比赛id"
  170. @match_group:"比赛分组"
  171. """
  172. qdata = request.json
  173. need_params = ["user_id","match_id","match_group"]
  174. mse = ccf.check_params(*need_params,**qdata)
  175. if mse:
  176. raise ce.TipException(mse)
  177. try:
  178. need_params.extend(["match_status","fund"])
  179. vals = ccf.get_need_params(*need_params,**qdata)
  180. vals["fund"] = round(float(vals.get("fund",0)),4)
  181. rst = ctl.add_model(self,**vals)
  182. return cv.to_suc(rst)
  183. except Exception as e:
  184. cv.tracefail()
  185. return cv.to_fail(e)
  186. def put(self,request):
  187. """#修改选手(平台管理后台)
  188. @id:"1"
  189. @fund:"资金"
  190. @match_id:"比赛id"
  191. @match_group:"比赛分组"
  192. """
  193. qdata = request.json
  194. need_params = ["id","user_id","match_id","match_group"]
  195. mse = ccf.check_params(*need_params,**qdata)
  196. if mse:
  197. raise ce.TipException(mse)
  198. try:
  199. need_params.extend(["match_status","fund","username"])
  200. vals = ccf.get_need_params(*need_params,**qdata)
  201. vals["fund"] = round(float(vals.get("fund",0)),4)
  202. rst = ctl.update_model(self,**vals)
  203. return cv.to_suc(rst)
  204. except Exception as e:
  205. cv.tracefail()
  206. return cv.to_fail(e)
  207. def delete(self,request):
  208. """#删除选手(平台管理后台)
  209. @id:"1",多个逗号分隔
  210. """
  211. qdata = request.json
  212. need_params = ["id"]
  213. mse = ccf.check_params(*need_params,**qdata)
  214. if mse:
  215. raise ce.TipException(mse)
  216. try:
  217. vals = ccf.get_need_params(*need_params,**qdata)
  218. rst = ctl.delete_model(self,**vals)
  219. return cv.to_suc(rst)
  220. except Exception as e:
  221. cv.tracefail()
  222. return cv.to_fail(e)
  223. class MatchListView(cv.AdminView):
  224. def get(self, request):
  225. """#赛事列表(平台管理后台)
  226. @name:""
  227. @page:1
  228. @page_size:20
  229. """
  230. qdata = request.json
  231. try:
  232. total,rst = ctl.get_list_info(self,**qdata)
  233. return cv.to_suc({"total":total,"list":rst})
  234. except Exception as e:
  235. cv.tracefail()
  236. return cv.to_fail(e)
  237. class MatchView(cv.AdminView):
  238. def get(self, request):
  239. """#赛事详情(平台管理后台)
  240. @id:1
  241. """
  242. qdata = request.json
  243. need_params = ["id"]
  244. mse = ccf.check_params(*need_params,**qdata)
  245. if mse:
  246. raise ce.TipException(mse)
  247. try:
  248. vals = ccf.get_need_params(*need_params,**qdata)
  249. rst = ctl.get_detail_info(self,**vals)
  250. return cv.to_suc(rst)
  251. except Exception as e:
  252. cv.tracefail()
  253. return cv.to_fail(e)
  254. def post(self,request):
  255. """#新增赛事(平台管理后台)
  256. @name:"赛事名称"
  257. @start_time:"开始时间"
  258. @end_time:"结束时间"
  259. """
  260. qdata = request.json
  261. need_params = ["name","start_time","end_time"]
  262. mse = ccf.check_params(*need_params,**qdata)
  263. if mse:
  264. raise ce.TipException(mse)
  265. try:
  266. need_params.extend(["calendar","valid_dates","player_price","viewer_price",
  267. "match_status","signup_start_time","signup_end_time","post_start_time","awards_content"])
  268. vals = ccf.get_need_params(*need_params,**qdata)
  269. vals["valid_dates"] = json.dumps(vals["valid_dates"])
  270. rst = ctl.add_model(self,**vals)
  271. match_id = rst
  272. from tools.split_table import create_table
  273. create_table(match_id)
  274. return cv.to_suc(rst)
  275. except Exception as e:
  276. cv.tracefail()
  277. return cv.to_fail(e)
  278. def put(self,request):
  279. """#修改赛事(平台管理后台)
  280. @id:"1"
  281. @name:"赛事名称"
  282. @start_time:"开始时间"
  283. @end_time:"结束时间"
  284. """
  285. qdata = request.json
  286. need_params = ["id","name","start_time","end_time","player_price","viewer_price"]
  287. mse = ccf.check_params(*need_params,**qdata)
  288. if mse:
  289. raise ce.TipException(mse)
  290. try:
  291. need_params.extend(["calendar","valid_dates","signup_start_time","signup_end_time",
  292. "match_status","post_start_time","awards_content"])
  293. vals = ccf.get_need_params(*need_params,**qdata)
  294. vals["valid_dates"] = json.dumps(vals["valid_dates"])
  295. rst = ctl.update_model(self,**vals)
  296. return cv.to_suc(rst)
  297. except Exception as e:
  298. cv.tracefail()
  299. return cv.to_fail(e)
  300. def delete(self,request):
  301. """#删除赛事(平台管理后台)
  302. @id:"1",多个逗号分隔
  303. """
  304. qdata = request.json
  305. need_params = ["id"]
  306. mse = ccf.check_params(*need_params,**qdata)
  307. if mse:
  308. raise ce.TipException(mse)
  309. try:
  310. vals = ccf.get_need_params(*need_params,**qdata)
  311. rst = ctl.delete_model(self,**vals)
  312. return cv.to_suc(rst)
  313. except Exception as e:
  314. cv.tracefail()
  315. return cv.to_fail(e)
  316. class MatchGroupListView(cv.AdminView):
  317. def get(self, request):
  318. """#分组列表(平台管理后台)
  319. @name:""
  320. @page:1
  321. @page_size:20
  322. """
  323. qdata = request.json
  324. try:
  325. total,rst = ctl.get_list_info(self,**qdata)
  326. return cv.to_suc({"total":total,"list":rst})
  327. except Exception as e:
  328. cv.tracefail()
  329. return cv.to_fail(e)
  330. class MatchGroupView(cv.AdminView):
  331. def get(self, request):
  332. """#分组详情(平台管理后台)
  333. @id:1
  334. """
  335. qdata = request.json
  336. need_params = ["id"]
  337. mse = ccf.check_params(*need_params,**qdata)
  338. if mse:
  339. raise ce.TipException(mse)
  340. try:
  341. vals = ccf.get_need_params(*need_params,**qdata)
  342. rst = ctl.get_detail_info(self,**vals)
  343. return cv.to_suc(rst)
  344. except Exception as e:
  345. cv.tracefail()
  346. return cv.to_fail(e)
  347. def post(self,request):
  348. """#新增分组(平台管理后台)
  349. @match_id:"赛事id"
  350. @name:"分组名称"
  351. """
  352. qdata = request.json
  353. need_params = ["match_id","name"]
  354. mse = ccf.check_params(*need_params,**qdata)
  355. if mse:
  356. raise ce.TipException(mse)
  357. try:
  358. need_params.extend(["is_active"])
  359. vals = ccf.get_need_params(*need_params,**qdata)
  360. rst = ctl.add_model(self,**vals)
  361. return cv.to_suc(rst)
  362. except Exception as e:
  363. cv.tracefail()
  364. return cv.to_fail(e)
  365. def put(self,request):
  366. """#修改赛事(平台管理后台)
  367. @id:"1"
  368. @match_id:"赛事id"
  369. @name:"分组名称"
  370. """
  371. qdata = request.json
  372. need_params = ["id","match_id","name"]
  373. mse = ccf.check_params(*need_params,**qdata)
  374. if mse:
  375. raise ce.TipException(mse)
  376. try:
  377. need_params.extend(["is_active","order"])
  378. vals = ccf.get_need_params(*need_params,**qdata)
  379. rst = ctl.update_model(self,**vals)
  380. return cv.to_suc(rst)
  381. except Exception as e:
  382. cv.tracefail()
  383. return cv.to_fail(e)
  384. def delete(self,request):
  385. """#删除分组(平台管理后台)
  386. @id:"1",多个逗号分隔
  387. """
  388. qdata = request.json
  389. need_params = ["id"]
  390. mse = ccf.check_params(*need_params,**qdata)
  391. if mse:
  392. raise ce.TipException(mse)
  393. try:
  394. vals = ccf.get_need_params(*need_params,**qdata)
  395. rst = ctl.delete_model(self,**vals)
  396. return cv.to_suc(rst)
  397. except Exception as e:
  398. cv.tracefail()
  399. return cv.to_fail(e)
  400. class PlayerRecordListView(cv.AdminView):
  401. def get(self, request):
  402. """#数据列表(平台管理后台)
  403. @name:""
  404. @page:1
  405. @page_size:20
  406. """
  407. qdata = request.json
  408. try:
  409. total,rst = ctl.get_list_info(self,**qdata)
  410. return cv.to_suc({"total":total,"list":rst})
  411. except Exception as e:
  412. cv.tracefail()
  413. return cv.to_fail(e)
  414. class PlayerRecordView(cv.AdminView):
  415. def get(self, request):
  416. """#数据详情(平台管理后台)
  417. @id:1
  418. """
  419. qdata = request.json
  420. need_params = ["id","match_id"]
  421. mse = ccf.check_params(*need_params,**qdata)
  422. if mse:
  423. raise ce.TipException(mse)
  424. try:
  425. vals = ccf.get_need_params(*need_params,**qdata)
  426. rst = ctl.get_detail_info(self,**vals)
  427. return cv.to_suc(rst)
  428. except Exception as e:
  429. cv.tracefail()
  430. return cv.to_fail(e)
  431. def post(self,request):
  432. """#新增数据(平台管理后台)
  433. @player_id:"选手id"
  434. @match_id:"赛事id"
  435. @stock_date:"持股日期"
  436. @today_fund:"今日净资产"
  437. @today_stock:"今日持股"
  438. @today_stock_img:"今日持股截图"
  439. """
  440. qdata = request.json
  441. need_params = ["player_id","match_id","today_fund"]
  442. mse = ccf.check_params(*need_params,**qdata)
  443. if mse:
  444. raise ce.TipException(mse)
  445. try:
  446. need_params.extend(["stock_date","is_markt","today_stock","today_stock_img"])
  447. vals = ccf.get_need_params(*need_params,**qdata)
  448. vals["today_fund"] = round(float(vals["today_fund"]),4)
  449. rst = ctl.add_model(self,**vals)
  450. return cv.to_suc(rst)
  451. except Exception as e:
  452. cv.tracefail()
  453. return cv.to_fail(e)
  454. def put(self,request):
  455. """#修改数据(平台管理后台)
  456. @id:"1"
  457. @match_id:"赛事id"
  458. @name:"分组名称"
  459. """
  460. qdata = request.json
  461. need_params = ["id","user_id","match_id","today_fund"]
  462. mse = ccf.check_params(*need_params,**qdata)
  463. if mse:
  464. raise ce.TipException(mse)
  465. try:
  466. need_params.extend(["stock_date","is_markt","today_stock","today_stock_img","yesterday_fund","init_fund","experience"])
  467. vals = ccf.get_need_params(*need_params,**qdata)
  468. vals["today_fund"] = round(float(vals["today_fund"]),4)
  469. vals["yesterday_fund"] = round(float(vals["yesterday_fund"]),4)
  470. vals["init_fund"] = round(float(vals["init_fund"]),4)
  471. rst = ctl.update_model(self,**vals)
  472. return cv.to_suc(rst)
  473. except Exception as e:
  474. cv.tracefail()
  475. return cv.to_fail(e)
  476. def delete(self,request):
  477. """#删除数据(平台管理后台)
  478. @id:"1",多个逗号分隔
  479. """
  480. qdata = request.json
  481. need_params = ["id","match_id"]
  482. mse = ccf.check_params(*need_params,**qdata)
  483. if mse:
  484. raise ce.TipException(mse)
  485. try:
  486. vals = ccf.get_need_params(*need_params,**qdata)
  487. rst = ctl.delete_model(self,**vals)
  488. return cv.to_suc(rst)
  489. except Exception as e:
  490. cv.tracefail()
  491. return cv.to_fail(e)
  492. class MatchSearchView(cv.AdminView):
  493. def get(self, request):
  494. """#比赛搜索列表(管理后台)
  495. @name:赛事名称
  496. """
  497. try:
  498. qdata = request.json
  499. rst = ctl.get_search_list(self,**qdata)
  500. return cv.to_suc(rst)
  501. except Exception as e:
  502. cv.tracefail()
  503. return cv.to_fail(e)
  504. class MatchGroupSearchView(cv.AdminView):
  505. def get(self, request):
  506. """#分组搜索列表(管理后台)
  507. @match_id:赛事id
  508. @name:分组名称
  509. """
  510. try:
  511. qdata = request.json
  512. rst = ctl.get_search_list(self,**qdata)
  513. return cv.to_suc(rst)
  514. except Exception as e:
  515. cv.tracefail()
  516. return cv.to_fail(e)
  517. class PlayerSearchView(cv.AdminView):
  518. def get(self, request):
  519. """#选手搜索列表(管理后台)
  520. @match_id:赛事id
  521. @username:选手名称
  522. """
  523. try:
  524. qdata = request.json
  525. rst = ctl.get_search_list(self,**qdata)
  526. return cv.to_suc(rst)
  527. except Exception as e:
  528. cv.tracefail()
  529. return cv.to_fail(e)
  530. class StockSearchView(cv.AdminView):
  531. def get(self, request):
  532. """#股票搜索列表(管理后台)
  533. @name:选手名称
  534. """
  535. try:
  536. qdata = request.json
  537. rst = ctl.get_search_list(self,**qdata)
  538. return cv.to_suc(rst)
  539. except Exception as e:
  540. cv.tracefail()
  541. return cv.to_fail(e)
  542. class UserInfoSearchView(cv.AdminView):
  543. def get(self, request):
  544. """#用户搜索列表(管理后台)
  545. @name:选手名称
  546. """
  547. try:
  548. qdata = request.json
  549. rst = ctl.get_search_list(self,**qdata)
  550. return cv.to_suc(rst)
  551. except Exception as e:
  552. cv.tracefail()
  553. return cv.to_fail(e)
  554. class PlayerRecordDownloadView(cv.AdminView):
  555. def get(self, request):
  556. """#数据详情(平台管理后台)
  557. @id:1
  558. """
  559. try:
  560. xlsdata = ctl.download_records(request)
  561. filename = u"%s参数数据.xls" % datetime.datetime.now().strftime("%Y-%m-%d")
  562. return cv.stream_file(xlsdata,"application/vnd.ms-excel",filename)
  563. except Exception as e:
  564. cv.tracefail()
  565. return cv.to_fail(e)
  566. class PlayerRecordDownloadImageView(cv.BaseView):
  567. def get(self, request):
  568. """download player record as image
  569. """
  570. try:
  571. zipfile = ctl.download_records_image(request)
  572. wrapper = FileWrapper(zipfile)
  573. response = HttpResponse(wrapper, content_type='application/zip')
  574. response['Content-Disposition'] = 'attachment;filename={}'\
  575. .format(ccf.datetime_to_str(datetime.datetime.now(),"%Y%m%d%H%M%S")+".zip")
  576. return response
  577. except Exception as e:
  578. cv.tracefail()
  579. return cv.to_fail(e)
  580. class PlayerFastSaveView(cv.AdminView):
  581. def gen_code(self):
  582. """
  583. """
  584. code = ""
  585. while True:
  586. code = "".join([str(random.choice([0,1,2,3,5,6,7,8,9])) for x in range(0,6)])
  587. if cm.UserInfo.objects.filter(usercode=code).exists():
  588. time.sleep(0.1)
  589. continue
  590. break
  591. return code
  592. def post(self,request):
  593. """#快速创建用户与选手(平台管理后台)
  594. @username:"用户名"
  595. @usercode:"用户代码"
  596. @fund:"资金"
  597. @match_id:"比赛id"
  598. @match_group:"比赛分组"
  599. @match_status:"比赛状态"
  600. """
  601. qdata = request.json
  602. need_params = ["username","match_id","match_group"]
  603. mse = ccf.check_params(*need_params,**qdata)
  604. if mse:
  605. raise ce.TipException(mse)
  606. try:
  607. need_params.extend(["usercode","match_status","fund"])
  608. vals = ccf.get_need_params(*need_params,**qdata)
  609. if not vals.get("usercode"):
  610. vals["usercode"] = self.gen_code()
  611. if vals.get("fund"):
  612. vals["fund"] = round(float(vals["fund"]),4)
  613. rst = ctl.fast_save_player(**vals)
  614. return cv.to_suc(rst)
  615. except Exception as e:
  616. cv.tracefail()
  617. return cv.to_fail(e)
  618. class PlayerAutoRecordView(cv.AdminView):
  619. def post(self,request):
  620. """#自动补全数据(平台管理后台)
  621. """
  622. return cv.to_suc()
  623. qdata = request.json
  624. stock_date = qdata.get("stock_date")
  625. from tools.autocomplete_record import auto_gen_record
  626. auto_gen_record(stock_date)
  627. return cv.to_suc()
  628. class ArticleView(cv.AdminView):
  629. def get(self, request):
  630. """#赛事详情(平台管理后台)
  631. @id:1
  632. """
  633. qdata = request.json
  634. need_params = ["id"]
  635. mse = ccf.check_params(*need_params,**qdata)
  636. if mse:
  637. raise ce.TipException(mse)
  638. try:
  639. vals = ccf.get_need_params(*need_params,**qdata)
  640. rst = ctl.get_detail_info(self,**vals)
  641. return cv.to_suc(rst)
  642. except Exception as e:
  643. cv.tracefail()
  644. return cv.to_fail(e)
  645. def post(self,request):
  646. """#新增赛事(平台管理后台)
  647. @name:"赛事名称"
  648. @content:"详情"
  649. """
  650. qdata = request.json
  651. need_params = ["name","content","status"]
  652. mse = ccf.check_params(*need_params,**qdata)
  653. if mse:
  654. raise ce.TipException(mse)
  655. try:
  656. need_params.extend(["type","img","category","isbanner","ishot"])
  657. vals = ccf.get_need_params(*need_params,**qdata)
  658. rst = ctl.add_model(self,**vals)
  659. return cv.to_suc(rst)
  660. except Exception as e:
  661. cv.tracefail()
  662. return cv.to_fail(e)
  663. def put(self,request):
  664. """#修改赛事(平台管理后台)
  665. @id:"1"
  666. @name:"名称"
  667. @content:"详情"
  668. """
  669. qdata = request.json
  670. need_params = ["id","name","content","status"]
  671. mse = ccf.check_params(*need_params,**qdata)
  672. if mse:
  673. raise ce.TipException(mse)
  674. try:
  675. need_params.extend(["type","img","category","isbanner","ishot"])
  676. vals = ccf.get_need_params(*need_params,**qdata)
  677. rst = ctl.update_model(self,**vals)
  678. return cv.to_suc(rst)
  679. except Exception as e:
  680. cv.tracefail()
  681. return cv.to_fail(e)
  682. def delete(self,request):
  683. """#删除赛事(平台管理后台)
  684. @id:"1",多个逗号分隔
  685. """
  686. qdata = request.json
  687. need_params = ["id"]
  688. mse = ccf.check_params(*need_params,**qdata)
  689. if mse:
  690. raise ce.TipException(mse)
  691. try:
  692. vals = ccf.get_need_params(*need_params,**qdata)
  693. rst = ctl.delete_model(self,**vals)
  694. return cv.to_suc(rst)
  695. except Exception as e:
  696. cv.tracefail()
  697. return cv.to_fail(e)
  698. class ArticleListView(cv.AdminView):
  699. def get(self, request):
  700. """#文章列表(平台管理后台)
  701. @name:""
  702. @page:1
  703. @page_size:20
  704. """
  705. qdata = request.json
  706. try:
  707. total,rst = ctl.get_list_info(self,**qdata)
  708. return cv.to_suc({"total":total,"list":rst})
  709. except Exception as e:
  710. cv.tracefail()
  711. return cv.to_fail(e)
  712. class ArticleSpiderView(cv.BaseView):
  713. def get(self, request):
  714. """#文章抓取(平台管理后台)
  715. """
  716. qdata = request.json
  717. try:
  718. data = ctl.spider_article(**qdata)
  719. return cv.to_suc(data)
  720. except Exception as e:
  721. cv.tracefail()
  722. return cv.to_fail(e)
  723. class FlushRankView(cv.AdminView):
  724. def get(self, request):
  725. """#更新排名(平台管理后台)
  726. @name:""
  727. @page:1
  728. @page_size:20
  729. """
  730. qdata = request.json
  731. need_params = ["stock_date","match_id","groupId"]
  732. mse = ccf.check_params(*need_params,**qdata)
  733. if mse:
  734. raise ce.TipException(mse)
  735. try:
  736. stock_date = qdata.get("stock_date")
  737. match_id = qdata.get("match_id")
  738. groupId = qdata.get("groupId")
  739. ctl.update_group_rank(stock_date,match_id,groupId)
  740. return cv.to_suc()
  741. except Exception as e:
  742. cv.tracefail()
  743. return cv.to_fail(e)
  744. class StockView(cv.AdminView):
  745. def get(self, request):
  746. """#赛事详情(平台管理后台)
  747. @id:1
  748. """
  749. qdata = request.json
  750. need_params = ["id"]
  751. mse = ccf.check_params(*need_params,**qdata)
  752. if mse:
  753. raise ce.TipException(mse)
  754. try:
  755. vals = ccf.get_need_params(*need_params,**qdata)
  756. rst = ctl.get_detail_info(self,**vals)
  757. return cv.to_suc(rst)
  758. except Exception as e:
  759. cv.tracefail()
  760. return cv.to_fail(e)
  761. def post(self,request):
  762. """#新增股票(平台管理后台)
  763. @name:"赛事名称"
  764. @content:"详情"
  765. """
  766. qdata = request.json
  767. need_params = ["name","code"]
  768. mse = ccf.check_params(*need_params,**qdata)
  769. if mse:
  770. raise ce.TipException(mse)
  771. try:
  772. need_params.extend(["desc","img"])
  773. vals = ccf.get_need_params(*need_params,**qdata)
  774. rst = ctl.add_model(self,**vals)
  775. return cv.to_suc(rst)
  776. except Exception as e:
  777. cv.tracefail()
  778. return cv.to_fail(e)
  779. def put(self,request):
  780. """#修改股票(平台管理后台)
  781. @id:"1"
  782. @name:"名称"
  783. @content:"详情"
  784. """
  785. qdata = request.json
  786. need_params = ["id","name","code"]
  787. mse = ccf.check_params(*need_params,**qdata)
  788. if mse:
  789. raise ce.TipException(mse)
  790. try:
  791. need_params.extend(["desc","img"])
  792. vals = ccf.get_need_params(*need_params,**qdata)
  793. rst = ctl.update_model(self,**vals)
  794. return cv.to_suc(rst)
  795. except Exception as e:
  796. cv.tracefail()
  797. return cv.to_fail(e)
  798. def delete(self,request):
  799. """#删除股票(平台管理后台)
  800. @id:"1",多个逗号分隔
  801. """
  802. qdata = request.json
  803. need_params = ["id"]
  804. mse = ccf.check_params(*need_params,**qdata)
  805. if mse:
  806. raise ce.TipException(mse)
  807. try:
  808. vals = ccf.get_need_params(*need_params,**qdata)
  809. rst = ctl.delete_model(self,**vals)
  810. return cv.to_suc(rst)
  811. except Exception as e:
  812. cv.tracefail()
  813. return cv.to_fail(e)
  814. class PlayerRecordCommentView(cv.AdminView):
  815. def put(self,request):
  816. """#顽主点评(平台管理后台)
  817. @id:"1"
  818. @wanzhu_comment:"顽主点评"
  819. """
  820. qdata = request.json
  821. need_params = ["id","wanzhu_comment","match_id"]
  822. mse = ccf.check_params(*need_params,**qdata)
  823. if mse:
  824. raise ce.TipException(mse)
  825. try:
  826. vals = ccf.get_need_params(*need_params,**qdata)
  827. rst = ctl.update_comment(**vals)
  828. return cv.to_suc(rst)
  829. except Exception as e:
  830. cv.tracefail()
  831. return cv.to_fail(e)
  832. class StockListView(cv.AdminView):
  833. def get(self, request):
  834. """#股票仓库列表(平台管理后台)
  835. @name:"用户名"
  836. @page:1
  837. @page_size:20
  838. """
  839. qdata = request.json
  840. try:
  841. total,rst = ctl.get_list_info(self,**qdata)
  842. return cv.to_suc({"total":total,"list":rst})
  843. except Exception as e:
  844. cv.tracefail()
  845. return cv.to_fail(e)
  846. class ResetInitFundView(cv.AdminView):
  847. def post(self,request):
  848. """#重置初始资金(平台管理后台)
  849. @match_id:"1"
  850. """
  851. qdata = request.json
  852. need_params = ["match_id"]
  853. mse = ccf.check_params(*need_params,**qdata)
  854. if mse:
  855. raise ce.TipException(mse)
  856. try:
  857. vals = ccf.get_need_params(*need_params,**qdata)
  858. rst = ctl.reset_initfund(**vals)
  859. return cv.to_suc(rst)
  860. except Exception as e:
  861. cv.tracefail()
  862. return cv.to_fail(e)
  863. class SignupOrderListView(cv.AdminView):
  864. def get(self, request):
  865. """#订单列表(平台管理后台)
  866. @name:"用户名"
  867. @page:1
  868. @page_size:20
  869. """
  870. qdata = request.json
  871. try:
  872. total,rst = ctl.get_list_info(self,**qdata)
  873. return cv.to_suc({"total":total,"list":rst})
  874. except Exception as e:
  875. cv.tracefail()
  876. return cv.to_fail(e)
  877. class StockCommentsListView(cv.AdminView):
  878. def get(self, request):
  879. """#股票评论列表(平台管理后台)
  880. @name:"股票名称"
  881. @page:1
  882. @page_size:20
  883. """
  884. qdata = request.json
  885. try:
  886. total,rst = ctl.get_stock_comments_list(**qdata)
  887. return cv.to_suc({"total":total,"list":rst})
  888. except Exception as e:
  889. cv.tracefail()
  890. return cv.to_fail(e)
  891. class RecordCommentsListView(cv.AdminView):
  892. def get(self, request):
  893. """#作业评论列表(平台管理后台)
  894. @name:"股票名称"
  895. @page:1
  896. @page_size:20
  897. """
  898. qdata = request.json
  899. try:
  900. total,rst = ctl.get_record_comments_list(**qdata)
  901. return cv.to_suc({"total":total,"list":rst})
  902. except Exception as e:
  903. cv.tracefail()
  904. return cv.to_fail(e)
  905. class ConsultListView(cv.AdminView):
  906. def get(self, request):
  907. """#顽主咨询列表(平台管理后台)
  908. @name:"股票名称"
  909. @page:1
  910. @page_size:20
  911. """
  912. qdata = request.json
  913. try:
  914. total,rst = ctl.get_wanzhu_consult_list(**qdata)
  915. return cv.to_suc({"total":total,"list":rst})
  916. except Exception as e:
  917. cv.tracefail()
  918. return cv.to_fail(e)
  919. class WanzhuConsultView(cv.AdminView):
  920. def get(self, request):
  921. """#顽主咨询详情(平台管理后台)
  922. @id:1
  923. """
  924. qdata = request.json
  925. need_params = ["id"]
  926. mse = ccf.check_params(*need_params,**qdata)
  927. if mse:
  928. raise ce.TipException(mse)
  929. try:
  930. vals = ccf.get_need_params(*need_params,**qdata)
  931. rst = ctl.get_detail_info(self,**vals)
  932. return cv.to_suc(rst)
  933. except Exception as e:
  934. cv.tracefail()
  935. return cv.to_fail(e)
  936. def delete(self,request):
  937. """#删除咨询(平台管理后台)
  938. @id:"1",多个逗号分隔
  939. """
  940. qdata = request.json
  941. need_params = ["id"]
  942. mse = ccf.check_params(*need_params,**qdata)
  943. if mse:
  944. raise ce.TipException(mse)
  945. try:
  946. vals = ccf.get_need_params(*need_params,**qdata)
  947. rst = ctl.delete_consult(**vals)
  948. return cv.to_suc(rst)
  949. except Exception as e:
  950. cv.tracefail()
  951. return cv.to_fail(e)
  952. class WanzhuConsultReplyView(cv.AdminView):
  953. def post(self, request):
  954. """#顽主咨询回复(平台管理后台)
  955. @id:1
  956. """
  957. qdata = request.json
  958. need_params = ["reply_content","user_id"]
  959. mse = ccf.check_params(*need_params,**qdata)
  960. if mse:
  961. raise ce.TipException(mse)
  962. try:
  963. need_params.extend(["pid","action"])
  964. vals = ccf.get_need_params(*need_params,**qdata)
  965. rst = ctl.reply_wanzhu_consult(**vals)
  966. return cv.to_suc(rst)
  967. except Exception as e:
  968. cv.tracefail()
  969. return cv.to_fail(e)
  970. class SignupOrderView(cv.AdminView):
  971. def get(self, request):
  972. """#订单详情(平台管理后台)
  973. @id:1
  974. """
  975. qdata = request.json
  976. need_params = ["id"]
  977. mse = ccf.check_params(*need_params,**qdata)
  978. if mse:
  979. raise ce.TipException(mse)
  980. try:
  981. vals = ccf.get_need_params(*need_params,**qdata)
  982. rst = ctl.get_detail_info(self,**vals)
  983. return cv.to_suc(rst)
  984. except Exception as e:
  985. cv.tracefail()
  986. return cv.to_fail(e)
  987. def delete(self,request):
  988. """#删除订单(平台管理后台)
  989. @id:"1",多个逗号分隔
  990. """
  991. qdata = request.json
  992. need_params = ["id"]
  993. mse = ccf.check_params(*need_params,**qdata)
  994. if mse:
  995. raise ce.TipException(mse)
  996. try:
  997. vals = ccf.get_need_params(*need_params,**qdata)
  998. rst = ctl.delete_model(self,**vals)
  999. return cv.to_suc(rst)
  1000. except Exception as e:
  1001. cv.tracefail()
  1002. return cv.to_fail(e)
  1003. def put(self,request):
  1004. """#修改订单(平台管理后台)
  1005. @id:"1"
  1006. @order_status:0/1/-1
  1007. @remark:""
  1008. """
  1009. qdata = request.json
  1010. need_params = ["id"]
  1011. mse = ccf.check_params(*need_params,**qdata)
  1012. if mse:
  1013. raise ce.TipException(mse)
  1014. try:
  1015. need_params.extend(["order_status","remark"])
  1016. vals = ccf.get_need_params(*need_params,**qdata)
  1017. rst = ctl.update_model(self,**vals)
  1018. return cv.to_suc(rst)
  1019. except Exception as e:
  1020. cv.tracefail()
  1021. return cv.to_fail(e)
  1022. class PlayerTypeView(cv.AdminView):
  1023. def put(self,request):
  1024. """#修改选手类型(平台管理后台)
  1025. @player_id:"1"
  1026. @player_type:0/1/2/3
  1027. @phone:"",手机号
  1028. """
  1029. qdata = request.json
  1030. need_params = ["player_id"]
  1031. mse = ccf.check_params(*need_params,**qdata)
  1032. if mse:
  1033. raise ce.TipException(mse)
  1034. try:
  1035. need_params.extend(["player_type","phone","user_id"])
  1036. vals = ccf.get_need_params(*need_params,**qdata)
  1037. rst = ctl.update_player_type(**vals)
  1038. return cv.to_suc(rst)
  1039. except Exception as e:
  1040. cv.tracefail()
  1041. return cv.to_fail(e)
  1042. class CommentsTopView(cv.AdminView):
  1043. def put(self,request):
  1044. """#置顶与取消置顶(平台管理后台)
  1045. @id:"1"
  1046. """
  1047. qdata = request.json
  1048. need_params = ["id"]
  1049. mse = ccf.check_params(*need_params,**qdata)
  1050. if mse:
  1051. raise ce.TipException(mse)
  1052. try:
  1053. vals = ccf.get_need_params(*need_params,**qdata)
  1054. rst = ctl.comments_top(**vals)
  1055. return cv.to_suc(rst)
  1056. except Exception as e:
  1057. cv.tracefail()
  1058. return cv.to_fail(e)
  1059. class CommentsBlackView(cv.AdminView):
  1060. def put(self,request):
  1061. """#拉黑评论(平台管理后台)
  1062. @id:"1"
  1063. """
  1064. qdata = request.json
  1065. need_params = ["id"]
  1066. mse = ccf.check_params(*need_params,**qdata)
  1067. if mse:
  1068. raise ce.TipException(mse)
  1069. try:
  1070. vals = ccf.get_need_params(*need_params,**qdata)
  1071. rst = ctl.comments_black(**vals)
  1072. return cv.to_suc(rst)
  1073. except Exception as e:
  1074. cv.tracefail()
  1075. return cv.to_fail(e)
  1076. class CommentsView(cv.AdminView):
  1077. def delete(self,request):
  1078. """#删除用户(平台管理后台)
  1079. @id:"1",多个逗号分隔
  1080. """
  1081. qdata = request.json
  1082. need_params = ["id"]
  1083. mse = ccf.check_params(*need_params,**qdata)
  1084. if mse:
  1085. raise ce.TipException(mse)
  1086. try:
  1087. vals = ccf.get_need_params(*need_params,**qdata)
  1088. rst = ctl.delete_model(self,**vals)
  1089. return cv.to_suc(rst)
  1090. except Exception as e:
  1091. cv.tracefail()
  1092. return cv.to_fail(e)
  1093. class UeditorUploadView(cv.BaseView):
  1094. def get(self, request):
  1095. """#ueditor(管理后台)
  1096. @name:名称
  1097. """
  1098. try:
  1099. rst = '{"videoMaxSize":102400000,"videoActionName":"uploadvideo","fileActionName":"uploadfile","fileManagerListPath":"/ueditor/jsp/upload/file/","imageCompressBorder":1600,"imageManagerAllowFiles":[".png",".jpg",".jpeg",".gif",".bmp"],"imageManagerListPath":"/ueditor/jsp/upload/image/","fileMaxSize":51200000,"fileManagerAllowFiles":[".png",".jpg",".jpeg",".gif",".bmp",".flv",".swf",".mkv",".avi",".rm",".rmvb",".mpeg",".mpg",".ogg",".ogv",".mov",".wmv",".mp4",".webm",".mp3",".wav",".mid",".rar",".zip",".tar",".gz",".7z",".bz2",".cab",".iso",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".pdf",".txt",".md",".xml"],"fileManagerActionName":"listfile","snapscreenInsertAlign":"none","scrawlActionName":"uploadscrawl","videoFieldName":"upfile","imageCompressEnable":true,"videoUrlPrefix":"","fileManagerUrlPrefix":"","catcherAllowFiles":[".png",".jpg",".jpeg",".gif",".bmp"],"imageManagerActionName":"listimage","snapscreenPathFormat":"/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}","scrawlPathFormat":"/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}","scrawlMaxSize":2048000,"imageInsertAlign":"none","catcherPathFormat":"/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}","catcherMaxSize":2048000,"snapscreenUrlPrefix":"","imagePathFormat":"/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}","imageManagerUrlPrefix":"","scrawlUrlPrefix":"http://192.168.101.81:8001","scrawlFieldName":"upfile","imageMaxSize":2048000,"imageAllowFiles":[".png",".jpg",".jpeg",".gif",".bmp"],"snapscreenActionName":"uploadimage","catcherActionName":"catchimage","fileFieldName":"upfile","fileUrlPrefix":"","imageManagerInsertAlign":"none","catcherLocalDomain":["127.0.0.1","localhost","img.baidu.com"],"filePathFormat":"/ueditor/jsp/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}","videoPathFormat":"/ueditor/jsp/upload/video/{yyyy}{mm}{dd}/{time}{rand:6}","fileManagerListSize":20,"imageActionName":"uploadimage","imageFieldName":"upfile","imageUrlPrefix":"","scrawlInsertAlign":"none","fileAllowFiles":[".png",".jpg",".jpeg",".gif",".bmp",".flv",".swf",".mkv",".avi",".rm",".rmvb",".mpeg",".mpg",".ogg",".ogv",".mov",".wmv",".mp4",".webm",".mp3",".wav",".mid",".rar",".zip",".tar",".gz",".7z",".bz2",".cab",".iso",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".pdf",".txt",".md",".xml"],"catcherUrlPrefix":"","imageManagerListSize":20,"catcherFieldName":"source","videoAllowFiles":[".flv",".swf",".mkv",".avi",".rm",".rmvb",".mpeg",".mpg",".ogg",".ogv",".mov",".wmv",".mp4",".webm",".mp3",".wav",".mid"]}'
  1100. return cv.to_response(rst)
  1101. except Exception as e:
  1102. cv.tracefail()
  1103. return cv.to_fail(e)
  1104. def post(self, request):
  1105. """
  1106. #文件上传(平台管理后台)
  1107. @file:"",文件对象
  1108. @type:"",前端自定义参数
  1109. """
  1110. try:
  1111. url = ccc.ueditor_to_oss(request)
  1112. data = {
  1113. "original":"base.jpg",
  1114. "state":"SUCCESS",
  1115. "title":"base.jpg",
  1116. "url":url
  1117. }
  1118. return cv.to_response(json.dumps(data))
  1119. except Exception as e:
  1120. cv.tracefail()
  1121. return cv.to_fail(e)
  1122. class PlayerRoleView(cv.AdminView):
  1123. def put(self,request):
  1124. """#修改选手角色(平台管理后台)
  1125. @player_id:"1"
  1126. @player_type:0/1/2/3
  1127. @phone:"",手机号
  1128. """
  1129. qdata = request.json
  1130. need_params = ["player_id"]
  1131. mse = ccf.check_params(*need_params,**qdata)
  1132. if mse:
  1133. raise ce.TipException(mse)
  1134. try:
  1135. need_params.extend(["role"])
  1136. vals = ccf.get_need_params(*need_params,**qdata)
  1137. rst = ctl.update_player_role(**vals)
  1138. return cv.to_suc(rst)
  1139. except Exception as e:
  1140. cv.tracefail()
  1141. return cv.to_fail(e)
  1142. class RelationOldView(cv.AdminView):
  1143. def put(self,request):
  1144. """#修改选手角色(平台管理后台)
  1145. @player_id:"1"
  1146. @player_type:0/1/2/3
  1147. @phone:"",手机号
  1148. """
  1149. qdata = request.json
  1150. need_params = ["user_id","old_user_id"]
  1151. mse = ccf.check_params(*need_params,**qdata)
  1152. if mse:
  1153. raise ce.TipException(mse)
  1154. try:
  1155. vals = ccf.get_need_params(*need_params,**qdata)
  1156. rst = ctl.relation_old_user(**vals)
  1157. return cv.to_suc(rst)
  1158. except Exception as e:
  1159. cv.tracefail()
  1160. return cv.to_fail(e)
  1161. class OpenidMissView(cv.AdminView):
  1162. def get(self, request):
  1163. """#用户列表(平台管理后台)
  1164. @username:"用户名"
  1165. @usercode:"用户代码"
  1166. @page:1
  1167. @page_size:20
  1168. """
  1169. qdata = request.json
  1170. try:
  1171. rst = ctl.get_openid_miss(**qdata)
  1172. return cv.to_suc(rst)
  1173. except Exception as e:
  1174. cv.tracefail()
  1175. return cv.to_fail(e)
  1176. class SignupOldUserView(cv.AdminView):
  1177. def put(self,request):
  1178. """#老用户处理(平台管理后台)
  1179. @id:"1"
  1180. @match_group:1
  1181. @player_type:""
  1182. @role_type:""
  1183. """
  1184. qdata = request.json
  1185. need_params = ["id","signup_type","match_group"]
  1186. mse = ccf.check_params(*need_params,**qdata)
  1187. if mse:
  1188. raise ce.TipException(mse)
  1189. try:
  1190. need_params.extend(["player_type","role_type","match_id"])
  1191. vals = ccf.get_need_params(*need_params,**qdata)
  1192. rst = ctl.signup_old_user(**vals)
  1193. return cv.to_suc(rst)
  1194. except Exception as e:
  1195. cv.tracefail()
  1196. return cv.to_fail(e)
  1197. class FundInOutView(cv.AdminView):
  1198. def get(self, request):
  1199. """#资金出入详情(平台管理后台)
  1200. @id:1
  1201. """
  1202. qdata = request.json
  1203. need_params = ["id"]
  1204. mse = ccf.check_params(*need_params,**qdata)
  1205. if mse:
  1206. raise ce.TipException(mse)
  1207. try:
  1208. vals = ccf.get_need_params(*need_params,**qdata)
  1209. rst = ctl.get_detail_info(self,**vals)
  1210. return cv.to_suc(rst)
  1211. except Exception as e:
  1212. cv.tracefail()
  1213. return cv.to_fail(e)
  1214. def delete(self,request):
  1215. """#删除资金出入(平台管理后台)
  1216. @id:"1",多个逗号分隔
  1217. """
  1218. qdata = request.json
  1219. need_params = ["id"]
  1220. mse = ccf.check_params(*need_params,**qdata)
  1221. if mse:
  1222. raise ce.TipException(mse)
  1223. try:
  1224. vals = ccf.get_need_params(*need_params,**qdata)
  1225. rst = ctl.delete_model(self,**vals)
  1226. return cv.to_suc(rst)
  1227. except Exception as e:
  1228. cv.tracefail()
  1229. return cv.to_fail(e)
  1230. class FundInOutListView(cv.AdminView):
  1231. def get(self, request):
  1232. """#资金出入列表(平台管理后台)
  1233. @name:""
  1234. @page:1
  1235. @page_size:20
  1236. """
  1237. qdata = request.json
  1238. try:
  1239. total,rst = ctl.get_list_info(self,**qdata)
  1240. return cv.to_suc({"total":total,"list":rst})
  1241. except Exception as e:
  1242. cv.tracefail()
  1243. return cv.to_fail(e)
  1244. class FundInOutCaculateView(cv.AdminView):
  1245. def get(self, request):
  1246. """#资金出入计算(平台管理后台)
  1247. """
  1248. qdata = request.json
  1249. try:
  1250. rst = ctl.caculate_inout(**qdata)
  1251. return cv.to_suc(rst)
  1252. except Exception as e:
  1253. cv.tracefail()
  1254. return cv.to_fail(e)
  1255. class UserConsultDetailView(cv.AdminView):
  1256. def get(self, request):
  1257. """#咨询详情(平台管理后台)
  1258. @user_id:1
  1259. """
  1260. qdata = request.json
  1261. try:
  1262. rst = ctl.get_consult_detail(**qdata)
  1263. return cv.to_suc(rst)
  1264. except Exception as e:
  1265. cv.tracefail()
  1266. return cv.to_fail(e)
  1267. class BaikeCategoryListView(cv.AdminView):
  1268. def get(self, request):
  1269. """#百科词条分类列表(平台管理后台)
  1270. @name:"股票名称"
  1271. @page:1
  1272. @page_size:20
  1273. """
  1274. qdata = request.json
  1275. try:
  1276. rst = ctl.get_baike_category_tree(**qdata)
  1277. return cv.to_suc(rst)
  1278. except Exception as e:
  1279. cv.tracefail()
  1280. return cv.to_fail(e)
  1281. class BaikeDetailView(cv.AdminView):
  1282. def get(self, request):
  1283. """#词条详情(平台管理后台)
  1284. @id:1
  1285. """
  1286. qdata = request.json
  1287. need_params = ["id"]
  1288. mse = ccf.check_params(*need_params,**qdata)
  1289. if mse:
  1290. raise ce.TipException(mse)
  1291. try:
  1292. vals = ccf.get_need_params(*need_params,**qdata)
  1293. rst = ctl.get_detail_info(self,**vals)
  1294. return cv.to_suc(rst)
  1295. except Exception as e:
  1296. cv.tracefail()
  1297. return cv.to_fail(e)
  1298. def post(self,request):
  1299. """#新增词条(平台管理后台)
  1300. @user_id:"用户id"
  1301. @fund:"资金"
  1302. @match_id:"比赛id"
  1303. @match_group:"比赛分组"
  1304. """
  1305. qdata = request.json
  1306. need_params = ["name","content","category_id","category_name"]
  1307. mse = ccf.check_params(*need_params,**qdata)
  1308. if mse:
  1309. raise ce.TipException(mse)
  1310. try:
  1311. need_params.extend(["editor","intro","img"])
  1312. vals = ccf.get_need_params(*need_params,**qdata)
  1313. vals["cid"] = 0
  1314. vals["cname"] = u"系统管理员"
  1315. if qdata.get("action") == "publish":
  1316. vals["status"] = 1
  1317. rst = ctl.add_model(self,**vals)
  1318. return cv.to_suc(rst)
  1319. except Exception as e:
  1320. cv.tracefail()
  1321. return cv.to_fail(e)
  1322. def put(self,request):
  1323. """#修改词条(平台管理后台)
  1324. @id:"1"
  1325. @fund:"资金"
  1326. @match_id:"比赛id"
  1327. @match_group:"比赛分组"
  1328. """
  1329. qdata = request.json
  1330. need_params = ["id","name","content","category_id","category_name"]
  1331. mse = ccf.check_params(*need_params,**qdata)
  1332. if mse:
  1333. raise ce.TipException(mse)
  1334. try:
  1335. need_params.extend(["editor","intro","img"])
  1336. vals = ccf.get_need_params(*need_params,**qdata)
  1337. if qdata.get("action") == "publish":
  1338. vals["status"] = 1
  1339. rst = ctl.update_model(self,**vals)
  1340. return cv.to_suc(rst)
  1341. except Exception as e:
  1342. cv.tracefail()
  1343. return cv.to_fail(e)
  1344. def delete(self,request):
  1345. """#删除词条(平台管理后台)
  1346. @id:"1",多个逗号分隔
  1347. """
  1348. qdata = request.json
  1349. need_params = ["id"]
  1350. mse = ccf.check_params(*need_params,**qdata)
  1351. if mse:
  1352. raise ce.TipException(mse)
  1353. try:
  1354. vals = ccf.get_need_params(*need_params,**qdata)
  1355. rst = ctl.delete_model(self,**vals)
  1356. return cv.to_suc(rst)
  1357. except Exception as e:
  1358. cv.tracefail()
  1359. return cv.to_fail(e)
  1360. class BaikeDetailListView(cv.AdminView):
  1361. def get(self, request):
  1362. """#百科词条列表(平台管理后台)
  1363. @name:""
  1364. @page:1
  1365. @page_size:20
  1366. """
  1367. qdata = request.json
  1368. try:
  1369. total,rst = ctl.get_list_info(self,**qdata)
  1370. return cv.to_suc({"total":total,"list":rst})
  1371. except Exception as e:
  1372. cv.tracefail()
  1373. return cv.to_fail(e)
  1374. class BaikeCategoryView(cv.AdminView):
  1375. def get(self, request):
  1376. """#词条分类详情(平台管理后台)
  1377. @id:1
  1378. """
  1379. qdata = request.json
  1380. need_params = ["id"]
  1381. mse = ccf.check_params(*need_params,**qdata)
  1382. if mse:
  1383. raise ce.TipException(mse)
  1384. try:
  1385. vals = ccf.get_need_params(*need_params,**qdata)
  1386. rst = ctl.get_detail_info(self,**vals)
  1387. return cv.to_suc(rst)
  1388. except Exception as e:
  1389. cv.tracefail()
  1390. return cv.to_fail(e)
  1391. def post(self,request):
  1392. """#新增词条分类(平台管理后台)
  1393. @user_id:"用户id"
  1394. @fund:"资金"
  1395. @match_id:"比赛id"
  1396. @match_group:"比赛分组"
  1397. """
  1398. qdata = request.json
  1399. need_params = ["name"]
  1400. mse = ccf.check_params(*need_params,**qdata)
  1401. if mse:
  1402. raise ce.TipException(mse)
  1403. try:
  1404. need_params.extend(["parent_id","parent_name"])
  1405. vals = ccf.get_need_params(*need_params,**qdata)
  1406. rst = ctl.add_model(self,**vals)
  1407. return cv.to_suc(rst)
  1408. except Exception as e:
  1409. cv.tracefail()
  1410. return cv.to_fail(e)
  1411. def put(self,request):
  1412. """#修改词条分类(平台管理后台)
  1413. @id:"1"
  1414. @fund:"资金"
  1415. @match_id:"比赛id"
  1416. @match_group:"比赛分组"
  1417. """
  1418. qdata = request.json
  1419. need_params = ["id","name"]
  1420. mse = ccf.check_params(*need_params,**qdata)
  1421. if mse:
  1422. raise ce.TipException(mse)
  1423. try:
  1424. need_params.extend(["parent_id","parent_name"])
  1425. vals = ccf.get_need_params(*need_params,**qdata)
  1426. rst = ctl.update_model(self,**vals)
  1427. return cv.to_suc(rst)
  1428. except Exception as e:
  1429. cv.tracefail()
  1430. return cv.to_fail(e)
  1431. def delete(self,request):
  1432. """#删除词条分类(平台管理后台)
  1433. @id:"1",多个逗号分隔
  1434. """
  1435. qdata = request.json
  1436. need_params = ["id"]
  1437. mse = ccf.check_params(*need_params,**qdata)
  1438. if mse:
  1439. raise ce.TipException(mse)
  1440. try:
  1441. vals = ccf.get_need_params(*need_params,**qdata)
  1442. rst = ctl.delete_model(self,**vals)
  1443. return cv.to_suc(rst)
  1444. except Exception as e:
  1445. cv.tracefail()
  1446. return cv.to_fail(e)
  1447. class PushArticleView(cv.AdminView):
  1448. def post(self,request):
  1449. """#新增词条分类(平台管理后台)
  1450. @id:"文章id"
  1451. """
  1452. qdata = request.json
  1453. need_params = ["id"]
  1454. mse = ccf.check_params(*need_params,**qdata)
  1455. if mse:
  1456. raise ce.TipException(mse)
  1457. try:
  1458. vals = ccf.get_need_params(*need_params,**qdata)
  1459. rst = ctl.push_article(**vals)
  1460. return cv.to_suc(rst)
  1461. except Exception as e:
  1462. cv.tracefail()
  1463. return cv.to_fail(e)
  1464. class ImportArticleView(cv.BaseView):
  1465. def post(self,request):
  1466. """#新增赛事(平台管理后台)
  1467. @name:"赛事名称"
  1468. @content:"详情"
  1469. @status:"详情"
  1470. """
  1471. qdata = request.json
  1472. need_params = ["name","content","status"]
  1473. mse = ccf.check_params(*need_params,**qdata)
  1474. if mse:
  1475. raise ce.TipException(mse)
  1476. try:
  1477. need_params.extend(["type","img","category","isbanner"])
  1478. vals = ccf.get_need_params(*need_params,**qdata)
  1479. rst = ctl.import_article(**vals)
  1480. return cv.to_suc(rst)
  1481. except Exception as e:
  1482. cv.tracefail()
  1483. return cv.to_fail(e)
  1484. class APPVersionView(cv.AdminView):
  1485. def get(self, request):
  1486. """#赛事详情(平台管理后台)
  1487. @id:1
  1488. """
  1489. qdata = request.json
  1490. need_params = ["id"]
  1491. mse = ccf.check_params(*need_params,**qdata)
  1492. if mse:
  1493. raise ce.TipException(mse)
  1494. try:
  1495. vals = ccf.get_need_params(*need_params,**qdata)
  1496. rst = ctl.get_detail_info(self,**vals)
  1497. return cv.to_suc(rst)
  1498. except Exception as e:
  1499. cv.tracefail()
  1500. return cv.to_fail(e)
  1501. def post(self,request):
  1502. """#新增赛事(平台管理后台)
  1503. @name:"赛事名称"
  1504. @content:"详情"
  1505. """
  1506. qdata = request.json
  1507. need_params = ["version","android_version","android_url"]
  1508. mse = ccf.check_params(*need_params,**qdata)
  1509. if mse:
  1510. raise ce.TipException(mse)
  1511. try:
  1512. need_params.extend(["name","ios_url","force"])
  1513. vals = ccf.get_need_params(*need_params,**qdata)
  1514. rst = ctl.add_model(self,**vals)
  1515. return cv.to_suc(rst)
  1516. except Exception as e:
  1517. cv.tracefail()
  1518. return cv.to_fail(e)
  1519. def put(self,request):
  1520. """#修改赛事(平台管理后台)
  1521. @id:"1"
  1522. @name:"名称"
  1523. @content:"详情"
  1524. """
  1525. qdata = request.json
  1526. need_params = ["id","version","android_version","android_url"]
  1527. mse = ccf.check_params(*need_params,**qdata)
  1528. if mse:
  1529. raise ce.TipException(mse)
  1530. try:
  1531. need_params.extend(["name","ios_url","force"])
  1532. vals = ccf.get_need_params(*need_params,**qdata)
  1533. rst = ctl.update_model(self,**vals)
  1534. return cv.to_suc(rst)
  1535. except Exception as e:
  1536. cv.tracefail()
  1537. return cv.to_fail(e)
  1538. def delete(self,request):
  1539. """#删除赛事(平台管理后台)
  1540. @id:"1",多个逗号分隔
  1541. """
  1542. qdata = request.json
  1543. need_params = ["id"]
  1544. mse = ccf.check_params(*need_params,**qdata)
  1545. if mse:
  1546. raise ce.TipException(mse)
  1547. try:
  1548. vals = ccf.get_need_params(*need_params,**qdata)
  1549. rst = ctl.delete_model(self,**vals)
  1550. return cv.to_suc(rst)
  1551. except Exception as e:
  1552. cv.tracefail()
  1553. return cv.to_fail(e)
  1554. class APPVersionListView(cv.AdminView):
  1555. def get(self, request):
  1556. """#文章列表(平台管理后台)
  1557. @name:""
  1558. @page:1
  1559. @page_size:20
  1560. """
  1561. qdata = request.json
  1562. try:
  1563. total,rst = ctl.get_list_info(self,**qdata)
  1564. return cv.to_suc({"total":total,"list":rst})
  1565. except Exception as e:
  1566. cv.tracefail()
  1567. return cv.to_fail(e)
  1568. class WXPayRefundView(cv.AdminView):
  1569. def post(self,request):
  1570. """#微信退款(平台管理后台)
  1571. @id:"订单id"
  1572. """
  1573. qdata = request.json
  1574. need_params = ["id"]
  1575. mse = ccf.check_params(*need_params,**qdata)
  1576. if mse:
  1577. raise ce.TipException(mse)
  1578. try:
  1579. vals = ccf.get_need_params(*need_params,**qdata)
  1580. rst = ctl.refund_out_trade_order(**vals)
  1581. return cv.to_suc(rst)
  1582. except Exception as e:
  1583. cv.tracefail()
  1584. return cv.to_fail(e)
  1585. class StockCommentsListView(cv.AdminView):
  1586. def get(self, request):
  1587. """#用户列表(平台管理后台)
  1588. @username:"用户名"
  1589. @usercode:"用户代码"
  1590. @page:1
  1591. @page_size:20
  1592. """
  1593. qdata = request.json
  1594. try:
  1595. total,rst = ctl.get_list_info(self,**qdata)
  1596. return cv.to_suc({"total":total,"list":rst})
  1597. except Exception as e:
  1598. cv.tracefail()
  1599. return cv.to_fail(e)
  1600. class StockCommentsView(cv.AdminView):
  1601. def get(self, request):
  1602. """#赛事详情(平台管理后台)
  1603. @id:1
  1604. """
  1605. qdata = request.json
  1606. need_params = ["id"]
  1607. mse = ccf.check_params(*need_params,**qdata)
  1608. if mse:
  1609. raise ce.TipException(mse)
  1610. try:
  1611. vals = ccf.get_need_params(*need_params,**qdata)
  1612. rst = ctl.get_detail_info(self,**vals)
  1613. return cv.to_suc(rst)
  1614. except Exception as e:
  1615. cv.tracefail()
  1616. return cv.to_fail(e)
  1617. def post(self,request):
  1618. """#新增赛事(平台管理后台)
  1619. @name:"赛事名称"
  1620. @content:"详情"
  1621. """
  1622. qdata = request.json
  1623. need_params = ["stock_id","stock_name","stock_code","content","img"]
  1624. mse = ccf.check_params(*need_params,**qdata)
  1625. if mse:
  1626. raise ce.TipException(mse)
  1627. try:
  1628. vals = ccf.get_need_params(*need_params,**qdata)
  1629. rst = ctl.add_model(self,**vals)
  1630. return cv.to_suc(rst)
  1631. except Exception as e:
  1632. cv.tracefail()
  1633. return cv.to_fail(e)
  1634. def put(self,request):
  1635. """#修改赛事(平台管理后台)
  1636. @id:"1"
  1637. @name:"名称"
  1638. @content:"详情"
  1639. """
  1640. qdata = request.json
  1641. need_params = ["id","stock_id","stock_name","stock_code","content","img"]
  1642. mse = ccf.check_params(*need_params,**qdata)
  1643. if mse:
  1644. raise ce.TipException(mse)
  1645. try:
  1646. vals = ccf.get_need_params(*need_params,**qdata)
  1647. rst = ctl.update_model(self,**vals)
  1648. return cv.to_suc(rst)
  1649. except Exception as e:
  1650. cv.tracefail()
  1651. return cv.to_fail(e)
  1652. def delete(self,request):
  1653. """#删除赛事(平台管理后台)
  1654. @id:"1",多个逗号分隔
  1655. """
  1656. qdata = request.json
  1657. need_params = ["id"]
  1658. mse = ccf.check_params(*need_params,**qdata)
  1659. if mse:
  1660. raise ce.TipException(mse)
  1661. try:
  1662. vals = ccf.get_need_params(*need_params,**qdata)
  1663. rst = ctl.delete_model(self,**vals)
  1664. return cv.to_suc(rst)
  1665. except Exception as e:
  1666. cv.tracefail()
  1667. return cv.to_fail(e)
  1668. class UserArticleRelationListView(cv.AdminView):
  1669. def get(self, request):
  1670. """#用户列表(平台管理后台)
  1671. @username:"用户名"
  1672. @usercode:"用户代码"
  1673. @page:1
  1674. @page_size:20
  1675. """
  1676. qdata = request.json
  1677. try:
  1678. total,rst = ctl.get_list_info(self,**qdata)
  1679. return cv.to_suc({"total":total,"list":rst})
  1680. except Exception as e:
  1681. cv.tracefail()
  1682. return cv.to_fail(e)
  1683. class UserArticleRelationView(cv.AdminView):
  1684. def get(self, request):
  1685. """#赛事详情(平台管理后台)
  1686. @id:1
  1687. """
  1688. qdata = request.json
  1689. need_params = ["id"]
  1690. mse = ccf.check_params(*need_params,**qdata)
  1691. if mse:
  1692. raise ce.TipException(mse)
  1693. try:
  1694. vals = ccf.get_need_params(*need_params,**qdata)
  1695. rst = ctl.get_detail_info(self,**vals)
  1696. return cv.to_suc(rst)
  1697. except Exception as e:
  1698. cv.tracefail()
  1699. return cv.to_fail(e)
  1700. def post(self,request):
  1701. """#新增赛事(平台管理后台)
  1702. @name:"赛事名称"
  1703. @content:"详情"
  1704. """
  1705. qdata = request.json
  1706. need_params = ["user_id","user_name","user_avatar","content","article_ids"]
  1707. mse = ccf.check_params(*need_params,**qdata)
  1708. if mse:
  1709. raise ce.TipException(mse)
  1710. try:
  1711. vals = ccf.get_need_params(*need_params,**qdata)
  1712. rst = ctl.add_model(self,**vals)
  1713. return cv.to_suc(rst)
  1714. except Exception as e:
  1715. cv.tracefail()
  1716. return cv.to_fail(e)
  1717. def put(self,request):
  1718. """#修改赛事(平台管理后台)
  1719. @id:"1"
  1720. @name:"名称"
  1721. @content:"详情"
  1722. """
  1723. qdata = request.json
  1724. need_params = ["id","user_id","user_name","user_avatar","content","article_ids"]
  1725. mse = ccf.check_params(*need_params,**qdata)
  1726. if mse:
  1727. raise ce.TipException(mse)
  1728. try:
  1729. vals = ccf.get_need_params(*need_params,**qdata)
  1730. rst = ctl.update_model(self,**vals)
  1731. return cv.to_suc(rst)
  1732. except Exception as e:
  1733. cv.tracefail()
  1734. return cv.to_fail(e)
  1735. def delete(self,request):
  1736. """#删除赛事(平台管理后台)
  1737. @id:"1",多个逗号分隔
  1738. """
  1739. qdata = request.json
  1740. need_params = ["id"]
  1741. mse = ccf.check_params(*need_params,**qdata)
  1742. if mse:
  1743. raise ce.TipException(mse)
  1744. try:
  1745. vals = ccf.get_need_params(*need_params,**qdata)
  1746. rst = ctl.delete_model(self,**vals)
  1747. return cv.to_suc(rst)
  1748. except Exception as e:
  1749. cv.tracefail()
  1750. return cv.to_fail(e)
  1751. class ArticleSearchView(cv.AdminView):
  1752. def get(self, request):
  1753. """#比赛搜索列表(管理后台)
  1754. @name:赛事名称
  1755. """
  1756. try:
  1757. qdata = request.json
  1758. rst = ctl.get_search_list(self,**qdata)
  1759. return cv.to_suc(rst)
  1760. except Exception as e:
  1761. cv.tracefail()
  1762. return cv.to_fail(e)
  1763. class BaikeDetailTopView(cv.AdminView):
  1764. def put(self,request):
  1765. """#修改词条(平台管理后台)
  1766. @id:"1"
  1767. @action:"top/cancel",置顶/取消置顶
  1768. """
  1769. qdata = request.json
  1770. need_params = ["id","action"]
  1771. mse = ccf.check_params(*need_params,**qdata)
  1772. if mse:
  1773. raise ce.TipException(mse)
  1774. try:
  1775. vals = ccf.get_need_params(*need_params,**qdata)
  1776. rst = ctl.baike_detail_top(**vals)
  1777. return cv.to_suc(rst)
  1778. except Exception as e:
  1779. cv.tracefail()
  1780. return cv.to_fail(e)
  1781. class DownloadTop3ImageView(cv.BaseView):
  1782. def get(self, request):
  1783. """download player record as image
  1784. """
  1785. try:
  1786. zipfile = ctl.download_top3_imgs(request)
  1787. #return cv.to_suc(zipfile)
  1788. wrapper = FileWrapper(zipfile)
  1789. response = HttpResponse(wrapper, content_type='application/zip')
  1790. response['Content-Disposition'] = 'attachment;filename={}'\
  1791. .format(ccf.datetime_to_str(datetime.datetime.now(),"%Y%m%d%H%M%S")+".zip")
  1792. return response
  1793. except Exception as e:
  1794. cv.tracefail()
  1795. return cv.to_fail(e)