views.py 56 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449
  1. # coding=utf-8
  2. from __future__ import unicode_literals
  3. import requests
  4. import random,datetime
  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. import common.error_info as ce
  11. from common import core_views as cv
  12. import common.common_control as ccc
  13. import common.common_functions as ccf
  14. import weixin.control_auth as ca
  15. import weixin.controls as ctl
  16. import weixin.wzhifuSDK as wzf
  17. from utils.upload_to_oss import hnoss
  18. class OpenidView(cv.BaseView):
  19. def get(self,request):
  20. """
  21. #获取openid(小程序)
  22. @code:1212
  23. """
  24. code = request.json.get("code")
  25. open_id = cache.get(code)
  26. if open_id:
  27. return cv.to_suc({"openid":open_id})
  28. else:
  29. get_token_url = 'https://api.weixin.qq.com/sns/jscode2session?appid={}&secret={}&js_code={}&grant_type=authorization_code' .format(wzf.WxPayConf_pub.APPID,wzf.WxPayConf_pub.APPSECRET,code)
  30. res = requests.get(get_token_url).json()
  31. print res
  32. if res.has_key('openid'):
  33. open_id = res['openid']
  34. unionid = res['unionid']
  35. cache.set(code,open_id,24*3600)
  36. else:
  37. open_id = ''
  38. unionid = ''
  39. if open_id:
  40. ccc.cache.set(open_id,1)
  41. return cv.to_suc({"openid":open_id,"unionid":unionid})
  42. else:
  43. return cv.to_fail(u"获取用户信息出错!")
  44. class UploadFileView(cv.BaseView):
  45. def post(self, request):
  46. """
  47. #文件上传(小程序)
  48. @file:"",文件对象
  49. """
  50. import time
  51. upload_file = request.FILES['file']
  52. ts = str(int(time.time()))
  53. dest = settings.STATIC_ROOT + "/upload/"+ ts + upload_file.name
  54. content = upload_file.read()
  55. ossfile = ts + upload_file.name
  56. url = hnoss.upload_from_str(content,ossfile)
  57. return cv.to_suc({"url":url})
  58. class UploadAvatarView(cv.BaseView):
  59. def post(self, request):
  60. """
  61. #文件上传(小程序)
  62. @file:"",文件对象
  63. """
  64. import time
  65. upload_file = request.FILES['file']
  66. ts = str(int(time.time()))
  67. dest = settings.STATIC_ROOT + "/upload/"+ ts + upload_file.name
  68. content = upload_file.read()
  69. ossfile = ts + upload_file.name
  70. url = hnoss.upload_from_str(content,ossfile,None)
  71. return cv.to_suc({"url":url})
  72. class TopicUploadFileView(cv.BaseView):
  73. def post(self, request):
  74. """
  75. #文件上传(WEB端)
  76. @file:"",文件对象
  77. """
  78. import time
  79. upload_file = request.FILES['file']
  80. dest = settings.STATIC_ROOT + "/upload/"+str(int(time.time())) + upload_file.name
  81. with open(dest,"wb+") as f:
  82. for chunk in upload_file.chunks():
  83. f.write(chunk)
  84. f.close()
  85. url = dest.replace(settings.STATIC_ROOT,settings.HOST)
  86. return cv.to_suc({"url":url})
  87. class AuthView(cv.BaseView):
  88. def post(self, request):
  89. """#保存微信授权信息(小程序)
  90. @nickname:"新",昵称
  91. @avatar:"",头像
  92. @openid:"",openid
  93. """
  94. try:
  95. rst = ca.add_wxauth_info(request)
  96. return cv.to_suc({"uid":rst.id})
  97. except Exception as e:
  98. cv.tracefail()
  99. return cv.to_fail(e)
  100. class AuthinfoView(cv.AuthView):
  101. def get(self,request):
  102. """#获取用户信息(小程序)
  103. """
  104. try:
  105. rst = ca.get_wxauth_info(request)
  106. return cv.to_suc(rst)
  107. except Exception as e:
  108. cv.tracefail()
  109. return cv.to_fail(e)
  110. def put(self, request):
  111. """#修改个人信息(小程序)
  112. """
  113. try:
  114. rst = ca.update_wxauth_info(request)
  115. return cv.to_suc()
  116. except Exception as e:
  117. cv.tracefail()
  118. return cv.to_fail(e)
  119. class LoginView(cv.BaseView):
  120. def post(self, request):
  121. """#小程序登录(小程序)
  122. @usercode:"用户代号"
  123. @nickanme:"微信昵称"
  124. @avatar:"微信头像"
  125. @openid:"openid"
  126. """
  127. try:
  128. #rst = ca.login_user(request)
  129. rst = {}
  130. return cv.to_suc(rst)
  131. except Exception as e:
  132. return cv.to_fail(e)
  133. class IndexView(cv.AuthView):
  134. def get(self, request):
  135. """#首页数据(小程序)
  136. """
  137. try:
  138. rst = ctl.get_index_data(request)
  139. return cv.to_suc(rst)
  140. except Exception as e:
  141. cv.tracefail()
  142. return cv.to_fail(e)
  143. class PlayerRecordView(cv.AuthView):
  144. def get(self, request):
  145. """#每日数据详情(小程序)
  146. @id:1
  147. """
  148. qdata = request.json
  149. need_params = ["id"]
  150. mse = ccf.check_params(*need_params,**qdata)
  151. if mse:
  152. raise ce.TipException(mse)
  153. try:
  154. vals = ccf.get_need_params(*need_params,**qdata)
  155. rcid = vals.get("id")
  156. #rst = ctl.get_detail_info(self,**vals)
  157. rst = ctl.get_record_info(rcid)
  158. return cv.to_suc(rst)
  159. except Exception as e:
  160. cv.tracefail()
  161. return cv.to_fail(e)
  162. def post(self, request):
  163. """#新增每日数据(小程序)
  164. @stock_date:"2021-07-30"
  165. @today_fund:100
  166. @today_stock:[{name:"江苏国泰",code:121221}]
  167. @today_stock_img:["http://test.png"]
  168. """
  169. qdata = request.json
  170. now = datetime.datetime.now()
  171. need_params = ["stock_date","today_fund"]
  172. mse = ccf.check_params(*need_params,**qdata)
  173. if mse:
  174. raise ce.TipException(mse)
  175. try:
  176. need_params.extend(["is_markt","today_stock","today_stock_img","experience","id"])
  177. vals = ccf.get_need_params(*need_params,**qdata)
  178. vals["user_id"] = request.user.get("id",0)
  179. vals["match_id"] = ccc.get_cur_match().id
  180. vals["today_fund"] = round(float(vals["today_fund"]),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. class PlayerMatchListView(cv.AuthView):
  187. def get(self, request):
  188. """#选手参赛列表(小程序)
  189. """
  190. try:
  191. rst = ctl.get_player_match_list(request)
  192. return cv.to_suc(rst)
  193. except Exception as e:
  194. cv.tracefail()
  195. return cv.to_fail(e)
  196. class PlayerMatchView(cv.AuthView):
  197. def get(self, request):
  198. """#选手参赛详情(小程序)
  199. """
  200. try:
  201. rst = ctl.get_player_match_detail(request)
  202. return cv.to_suc(rst)
  203. except Exception as e:
  204. cv.tracefail()
  205. return cv.to_fail(e)
  206. class PlayerMatchRecordListView(cv.AuthView):
  207. def get(self, request):
  208. """#选手参赛每日持股(小程序)
  209. @id:1,赛事id
  210. @page:1
  211. @page_size:20
  212. """
  213. try:
  214. total,rst = ctl.get_player_match_records(request)
  215. return cv.to_suc({"total":total,"list":rst})
  216. except Exception as e:
  217. cv.tracefail()
  218. return cv.to_fail(e)
  219. class StockSearchView(cv.AuthView):
  220. def get(self, request):
  221. """#股票搜索列表(小程序)
  222. @name:名称
  223. """
  224. try:
  225. qdata = request.json
  226. rst = ctl.get_search_list(self,**qdata)
  227. #rst = ctl.get_stock_search(**qdata)
  228. #if qdata.get("name"):
  229. # rst = filter(lambda x:qdata.get("name") in x["name"],rst)
  230. #print(rst)
  231. return cv.to_suc(rst)
  232. except Exception as e:
  233. cv.tracefail()
  234. return cv.to_fail(e)
  235. class GroupRankListView(cv.AuthView):
  236. def get(self, request):
  237. """#排名列表(小程序)
  238. """
  239. try:
  240. rst = ctl.get_rank_list(request)
  241. return cv.to_suc(rst)
  242. except Exception as e:
  243. cv.tracefail()
  244. return cv.to_fail(e)
  245. class GroupRankView(cv.AuthView):
  246. def get(self, request):
  247. """#分组排名(小程序)
  248. """
  249. try:
  250. rst = ctl.get_group_rank_list(request)
  251. return cv.to_suc(rst)
  252. except Exception as e:
  253. cv.tracefail()
  254. return cv.to_fail(e)
  255. class PlayerRecordSingleView(cv.BaseView):
  256. def post(self, request):
  257. """#新增每日数据(WEB端)
  258. @usercode:"选手code"
  259. @match_id:"赛事id"
  260. @stock_date:"持股日期"
  261. @today_fund:"今日净资产"
  262. @today_stock:"今日持股"
  263. @today_stock_img:"今日持股截图"
  264. """
  265. qdata = request.json
  266. now = datetime.datetime.now()
  267. #if not now.isoweekday() in [1,2,3,4,5] or not "09:30"<now.strftime("%H:%S")<"15:30":
  268. # raise ce.TipException(u"只有每周一至周五 9:30 - 15:30 之间才可以提交数据!")
  269. need_params = ["match_id","usercode","stock_date","today_fund","today_stock_img"]
  270. mse = ccf.check_params(*need_params,**qdata)
  271. if mse:
  272. raise ce.TipException(mse)
  273. try:
  274. need_params.extend(["is_markt","today_stock","experience"])
  275. vals = ccf.get_need_params(*need_params,**qdata)
  276. vals["today_fund"] = round(float(vals["today_fund"]),4)
  277. rst = ctl.add_player_record_single(**vals)
  278. return cv.to_suc(rst)
  279. except Exception as e:
  280. cv.tracefail()
  281. return cv.to_fail(e)
  282. class PlayerRecordSingleMatchView(cv.BaseView):
  283. def get(self, request):
  284. """#获取赛事数据(WEB端)
  285. @id:"赛事id"
  286. """
  287. qdata = request.json
  288. match_id = qdata.get("id")
  289. try:
  290. now_date,rst = ctl.get_single_match_info(match_id)
  291. return cv.to_suc({"stock_date":now_date,"match":rst})
  292. except Exception as e:
  293. cv.tracefail()
  294. return cv.to_fail(e)
  295. class PlayerCurRecordView(cv.AuthView):
  296. def get(self, request):
  297. """#当前数据(小程序)
  298. @id:1
  299. """
  300. qdata = request.json
  301. try:
  302. rst = ctl.get_cur_record(request)
  303. return cv.to_suc(rst)
  304. except Exception as e:
  305. cv.tracefail()
  306. return cv.to_fail(e)
  307. class ArticleView(cv.AuthView):
  308. def get(self, request):
  309. """#公告详情(小程序)
  310. @id:1
  311. """
  312. qdata = request.json
  313. need_params = ["id"]
  314. mse = ccf.check_params(*need_params,**qdata)
  315. if mse:
  316. raise ce.TipException(mse)
  317. try:
  318. vals = ccf.get_need_params(*need_params,**qdata)
  319. rst = ctl.get_detail_info(self,**vals)
  320. return cv.to_suc(rst)
  321. except Exception as e:
  322. cv.tracefail()
  323. return cv.to_fail(e)
  324. class FollowUserView(cv.AuthView):
  325. def post(self, request):
  326. """#关注选手(2.0小程序)
  327. @follow_id:1,被关注选手id
  328. @action:"cancel",取消关注
  329. """
  330. qdata = request.json
  331. need_params = ["follow_id"]
  332. mse = ccf.check_params(*need_params,**qdata)
  333. if mse:
  334. raise ce.TipException(mse)
  335. try:
  336. need_params.extend(["action"])
  337. vals = ccf.get_need_params(*need_params,**qdata)
  338. vals["user_id"] = request.user.get("id")
  339. rst = ctl.follow_player(**vals)
  340. return cv.to_suc(rst)
  341. except Exception as e:
  342. cv.tracefail()
  343. return cv.to_fail(e)
  344. class FollowUserListView(cv.AuthView):
  345. def get(self, request):
  346. """#我的关注(2.0小程序)
  347. """
  348. try:
  349. total,rst = ctl.get_user_follows(request)
  350. return cv.to_suc({"total":total,"list":rst})
  351. except Exception as e:
  352. cv.tracefail()
  353. return cv.to_fail(e)
  354. class FollowerUserListView(cv.AuthView):
  355. def get(self, request):
  356. """#我的粉丝(3.0小程序)
  357. """
  358. try:
  359. total,rst = ctl.get_user_follower(request)
  360. return cv.to_suc({"total":total,"list":rst})
  361. except Exception as e:
  362. cv.tracefail()
  363. return cv.to_fail(e)
  364. class HotStockListView(cv.AuthView):
  365. def get(self, request):
  366. """#热门股票(2.0小程序)
  367. @stock_date:"",持股日期
  368. """
  369. qdata = request.json
  370. need_params = ["stock_date"]
  371. mse = ccf.check_params(*need_params,**qdata)
  372. if mse:
  373. raise ce.TipException(mse)
  374. try:
  375. need_params.extend(["name"])
  376. vals = ccf.get_need_params(*need_params,**qdata)
  377. rst = ctl.get_hot_stock_rank(**vals)
  378. return cv.to_suc(rst)
  379. except Exception as e:
  380. cv.tracefail()
  381. return cv.to_fail(e)
  382. class HotFollowListView(cv.AuthView):
  383. def get(self, request):
  384. """#热门关注(2.0小程序)
  385. @stock_date:"",持股日期
  386. @page:1
  387. @page_size:20
  388. """
  389. qdata = request.json
  390. need_params = ["stock_date"]
  391. mse = ccf.check_params(*need_params,**qdata)
  392. if mse:
  393. raise ce.TipException(mse)
  394. try:
  395. need_params.extend(["name","page","page_size"])
  396. vals = ccf.get_need_params(*need_params,**qdata)
  397. total,rst = ctl.get_hot_follow(**vals)
  398. return cv.to_suc({"total":total,"list":rst})
  399. except Exception as e:
  400. cv.tracefail()
  401. return cv.to_fail(e)
  402. class HotStockBuyListView(cv.AuthView):
  403. def get(self, request):
  404. """#热门持仓股票(2.0小程序)
  405. @stock_date:"",持股日期
  406. @page:1
  407. @page_size:20
  408. """
  409. qdata = request.json
  410. need_params = ["stock_date"]
  411. mse = ccf.check_params(*need_params,**qdata)
  412. if mse:
  413. raise ce.TipException(mse)
  414. try:
  415. need_params.extend(["name","page","page_size"])
  416. vals = ccf.get_need_params(*need_params,**qdata)
  417. total,rst = ctl.get_hot_stock_buy(**vals)
  418. return cv.to_suc({"total":total,"list":rst})
  419. except Exception as e:
  420. cv.tracefail()
  421. return cv.to_fail(e)
  422. class HotStockSellListView(cv.AuthView):
  423. def get(self, request):
  424. """#热门清仓股票(2.0小程序)
  425. @stock_date:"",持股日期
  426. @page:1
  427. @page_size:20
  428. """
  429. qdata = request.json
  430. need_params = ["stock_date"]
  431. mse = ccf.check_params(*need_params,**qdata)
  432. if mse:
  433. raise ce.TipException(mse)
  434. try:
  435. need_params.extend(["name"])
  436. vals = ccf.get_need_params(*need_params,**qdata)
  437. total,rst = ctl.get_hot_stock_sell(**vals)
  438. return cv.to_suc({"total":total,"list":rst})
  439. except Exception as e:
  440. cv.tracefail()
  441. return cv.to_fail(e)
  442. class HotStockSellPlayersListView(cv.AuthView):
  443. def get(self, request):
  444. """#获取股票清仓选手列表(2.0小程序)
  445. @id:"",股票id
  446. @stock_date:"",持股日期
  447. @page:1
  448. @page_size:20
  449. """
  450. qdata = request.json
  451. need_params = ["stock_date","id"]
  452. mse = ccf.check_params(*need_params,**qdata)
  453. if mse:
  454. raise ce.TipException(mse)
  455. try:
  456. vals = ccf.get_need_params(*need_params,**qdata)
  457. _id = vals["id"]
  458. total,rst = ctl.get_hot_stock_sell_players(**vals)
  459. data = {"total":total,"list":rst}
  460. stock = ctl.get_stock_info(_id)
  461. data.update(stock)
  462. return cv.to_suc(data)
  463. except Exception as e:
  464. cv.tracefail()
  465. return cv.to_fail(e)
  466. class WinRateRankView(cv.AuthView):
  467. def get(self, request):
  468. """#胜率榜(2.0小程序)
  469. """
  470. try:
  471. total,rst = ctl.get_win_rate_rank(request)
  472. return cv.to_suc({"total":total,"list":rst})
  473. except Exception as e:
  474. cv.tracefail()
  475. return cv.to_fail(e)
  476. class DefendRankView(cv.AuthView):
  477. def get(self, request):
  478. """#防守榜(2.0小程序)
  479. """
  480. try:
  481. total,rst = ctl.get_defend_rank(request)
  482. return cv.to_suc({"total":total,"list":rst})
  483. except Exception as e:
  484. cv.tracefail()
  485. return cv.to_fail(e)
  486. class ChampionArticleListView(cv.AuthView):
  487. def get(self, request):
  488. """#冠军心得(2.0小程序)
  489. """
  490. try:
  491. total,rst = ctl.get_champion_articles_list(request)
  492. return cv.to_suc({"total":total,"list":rst})
  493. except Exception as e:
  494. cv.tracefail()
  495. return cv.to_fail(e)
  496. class WanzhuCommentListView(cv.AuthView):
  497. def get(self, request):
  498. """#顽主点评(2.0小程序)
  499. @group_id:1,分组id
  500. @page:1
  501. @page_size:20
  502. """
  503. qdata = request.json
  504. need_params = ["group_id","page","page_size"]
  505. mse = ccf.check_params(*need_params,**qdata)
  506. if mse:
  507. raise ce.TipException(mse)
  508. try:
  509. vals = ccf.get_need_params(*need_params,**qdata)
  510. vals["match_id"] = request.player.match_id
  511. total,rst = ctl.get_wanzhu_comment(**vals)
  512. return cv.to_suc({"total":total,"list":rst})
  513. except Exception as e:
  514. cv.tracefail()
  515. return cv.to_fail(e)
  516. class EnumListView(cv.AuthView):
  517. def get(self, request):
  518. """#枚举值(2.0小程序)
  519. """
  520. try:
  521. rst = ctl.get_enum_list(request)
  522. return cv.to_suc(rst)
  523. except Exception as e:
  524. cv.tracefail()
  525. return cv.to_fail(e)
  526. class PlayerListView(cv.AuthView):
  527. def get(self, request):
  528. """#选手列表搜索(2.0小程序)
  529. @name:"选手名"
  530. @zq:"短线",周期
  531. @cw:"分仓",仓位
  532. @df:"首板",打法
  533. @page:1
  534. @page_size:20
  535. """
  536. qdata = request.json
  537. need_params = ["page","page_size"]
  538. mse = ccf.check_params(*need_params,**qdata)
  539. if mse:
  540. raise ce.TipException(mse)
  541. try:
  542. need_params.extend(["name","zq","cw","df"])
  543. vals = ccf.get_need_params(*need_params,**qdata)
  544. vals["match_id"] = qdata.get("match_id")
  545. total,rst = ctl.get_player_list(**vals)
  546. return cv.to_suc({"total":total,"list":rst})
  547. except Exception as e:
  548. cv.tracefail()
  549. return cv.to_fail(e)
  550. class MineStyleView(cv.AuthView):
  551. def get(self, request):
  552. """#我的风格(2.0小程序)
  553. """
  554. try:
  555. rst = ctl.get_mine_style(request)
  556. return cv.to_suc(rst)
  557. except Exception as e:
  558. cv.tracefail()
  559. return cv.to_fail(e)
  560. def put(self, request):
  561. """#修改我的风格(小程序)
  562. @zq:"",周期
  563. @cw:"",仓位
  564. @df:"",打法
  565. @pz:"",品种
  566. @join_time:"",入市时间
  567. @init_fund:"",参数金额
  568. @account_img:"",账号截图
  569. """
  570. qdata = request.json
  571. need_params = ["zq","cw","df","pz","join_time"]
  572. mse = ccf.check_params(*need_params,**qdata)
  573. if mse:
  574. raise ce.TipException(mse)
  575. try:
  576. need_params.extend(["init_fund","account_img","username","avatar"])
  577. vals = ccf.get_need_params(*need_params,**qdata)
  578. vals["user_id"] = request.user["id"]
  579. #vals["player_id"] = request.player.id if request.player else None
  580. rst = ctl.update_user_style(**vals)
  581. return cv.to_suc(rst)
  582. except Exception as e:
  583. cv.tracefail()
  584. return cv.to_fail(e)
  585. class PlayerFundView(cv.AuthView):
  586. def put(self, request):
  587. """#修改初始资金(小程序)
  588. @init_fund:"",参数金额
  589. """
  590. qdata = request.json
  591. need_params = ["init_fund"]
  592. mse = ccf.check_params(*need_params,**qdata)
  593. if mse:
  594. raise ce.TipException(mse)
  595. try:
  596. vals = ccf.get_need_params(*need_params,**qdata)
  597. vals["user_id"] = request.user.id
  598. vals["player_id"] = request.player.id if request.player else None
  599. rst = ctl.update_user_fund(**vals)
  600. return cv.to_suc(rst)
  601. except Exception as e:
  602. cv.tracefail()
  603. return cv.to_fail(e)
  604. class StockView(cv.AuthView):
  605. def get(self, request):
  606. """#股票詳情(2.0小程序)
  607. @id:1
  608. @page:1
  609. @page_size:1
  610. """
  611. qdata = request.json
  612. need_params = ["id"]
  613. mse = ccf.check_params(*need_params,**qdata)
  614. if mse:
  615. raise ce.TipException(mse)
  616. try:
  617. need_params.extend(["page","page_size","stock_date"])
  618. vals = ccf.get_need_params(*need_params,**qdata)
  619. vals["user_id"] = request.user.get("id")
  620. #vals["player_id"] = request.player.id if request.player else None
  621. rst = ctl.get_detail_info(self,**vals)
  622. vals["stock_id"] = rst["id"]
  623. rst["list"] = ctl.get_stock_players(**vals)
  624. return cv.to_suc(rst)
  625. except Exception as e:
  626. cv.tracefail()
  627. return cv.to_fail(e)
  628. class DefaultDateView(cv.AuthView):
  629. def get(self, request):
  630. """#默认日期(2.0小程序)
  631. @id:1
  632. """
  633. try:
  634. qdata = request.json
  635. rst = ctl.get_default_date(**qdata)
  636. return cv.to_suc(rst)
  637. except Exception as e:
  638. cv.tracefail()
  639. return cv.to_fail(e)
  640. class NoticesListView(cv.AuthView):
  641. def get(self, request):
  642. """#公告列表(2.0小程序)
  643. @id:1
  644. """
  645. try:
  646. rst = ctl.get_notices()
  647. return cv.to_suc(rst)
  648. except Exception as e:
  649. cv.tracefail()
  650. return cv.to_fail(e)
  651. class PlayerMatchCalendarView(cv.AuthView):
  652. def get(self, request):
  653. """#获取日历收益(2.0小程序)
  654. @match_id:1
  655. @user_id:1
  656. @month:2021-12
  657. """
  658. qdata = request.json
  659. need_params = ["user_id","match_id","month"]
  660. mse = ccf.check_params(*need_params,**qdata)
  661. if mse:
  662. raise ce.TipException(mse)
  663. try:
  664. vals = ccf.get_need_params(*need_params,**qdata)
  665. rst = ctl.get_player_match_calendar(**vals)
  666. return cv.to_suc(rst)
  667. except Exception as e:
  668. cv.tracefail()
  669. return cv.to_fail(e)
  670. class MatchListView(cv.AuthView):
  671. def get(self, request):
  672. """#获取所有赛事(2.0小程序)
  673. """
  674. try:
  675. rst = ctl.get_all_match(request)
  676. return cv.to_suc(rst)
  677. except Exception as e:
  678. cv.tracefail()
  679. return cv.to_fail(e)
  680. class MineLatestView(cv.AuthView):
  681. def get(self, request):
  682. """#我的最新(2.0小程序)
  683. """
  684. try:
  685. rst = ctl.get_mine_latest(request)
  686. return cv.to_suc(rst)
  687. except Exception as e:
  688. cv.tracefail()
  689. return cv.to_fail(e)
  690. class MatchValidDatesView(cv.AuthView):
  691. def get(self, request):
  692. """#比赛时间(2.0小程序)
  693. """
  694. try:
  695. qdata = request.json
  696. match_id = qdata.get("match_id")
  697. rst = ctl.get_match_validdates(match_id)
  698. return cv.to_suc(rst)
  699. except Exception as e:
  700. cv.tracefail()
  701. return cv.to_fail(e)
  702. class V3LoginView(cv.BaseView):
  703. def post(self, request):
  704. """#小程序登录v3(3.0小程序)
  705. @nickanme:"微信昵称"
  706. @avatar:"微信头像"
  707. @openid:"openid"
  708. @phone:"15982456282"
  709. @phcode:"2345"
  710. """
  711. try:
  712. rst = ca.login_user_v3(request)
  713. return cv.to_suc(rst)
  714. except Exception as e:
  715. cv.tracefail()
  716. return cv.to_fail(e)
  717. class V3PhoneCodeView(cv.BaseView):
  718. def post(self, request):
  719. """#短信验证码接口v3(3.0小程序)
  720. @phone:"手机号"
  721. """
  722. try:
  723. rst = ctl.send_phcode(request)
  724. return cv.to_suc(rst)
  725. except Exception as e:
  726. return cv.to_fail(e)
  727. class V3PhoneBindView(cv.AuthView):
  728. def post(self, request):
  729. """#手机绑定接口v3(3.0小程序)
  730. @phone:"手机号"
  731. @phcode:"验证码"
  732. """
  733. try:
  734. rst = ca.bind_user_phone(request)
  735. return cv.to_suc(rst)
  736. except Exception as e:
  737. return cv.to_fail(e)
  738. class V3SignupInfoView(cv.BaseView):
  739. def get(self, request):
  740. """#报名信息v3(3.0小程序)
  741. """
  742. try:
  743. rst = ctl.get_signup_info(request)
  744. return cv.to_suc(rst)
  745. except Exception as e:
  746. return cv.to_fail(e)
  747. class V3SignupWXPayView(cv.AuthView):
  748. def post(self, request):
  749. """#微信支付v3(3.0小程序)
  750. @match_id:1,
  751. @match_name:"测试比赛",
  752. @signup_type:1,1/游客报名,2/选手报名,
  753. @total_fee:10,总价
  754. """
  755. try:
  756. rst = ctl.do_wx_pay(request)
  757. return cv.to_suc(rst)
  758. except Exception as e:
  759. cv.tracefail()
  760. return cv.to_fail(e)
  761. class V3SignupNotifyView(cv.BaseView):
  762. def post(self, request):
  763. """#微信支付回调v3(3.0小程序)
  764. @match_id:1,
  765. @match_name:"",
  766. @signup_type:1,1游客报名/2选手报名
  767. @total_fee:200,总价
  768. """
  769. try:
  770. rst = ctl.do_wxpay_notify(request)
  771. return cv.to_suc(rst)
  772. except Exception as e:
  773. return cv.to_fail(e)
  774. class V3CommentsListView(cv.AuthView):
  775. def get(self, request):
  776. """#获取评论列表v3(3.0小程序)
  777. @record_id:29411,作业id
  778. """
  779. try:
  780. total,rst = ctl.get_user_comments(request)
  781. return cv.to_suc({"total":total,"list":rst})
  782. except Exception as e:
  783. cv.tracefail()
  784. return cv.to_fail(e)
  785. class V3WanzhuConsultListView(cv.AuthView):
  786. def get(self, request):
  787. """#获取我的咨询列表v3(3.0小程序)
  788. """
  789. try:
  790. total,rst = ctl.get_user_consult_list(request)
  791. return cv.to_suc({"total":total,"list":rst})
  792. except Exception as e:
  793. cv.tracefail()
  794. return cv.to_fail(e)
  795. class V3ZanCountView(cv.AuthView):
  796. def get(self, request):
  797. """#获取点赞数v3(3.0小程序)
  798. @record_id:1,作业id
  799. """
  800. try:
  801. rst = ctl.get_user_zans(request)
  802. return cv.to_suc(rst)
  803. except Exception as e:
  804. cv.tracefail()
  805. return cv.to_fail(e)
  806. class V3CommentsCountView(cv.AuthView):
  807. def get(self, request):
  808. """#获取评论数v3(3.0小程序)
  809. @record_id:1,作业id
  810. @stock_id:1,股票id
  811. """
  812. try:
  813. rst = ctl.get_user_comments_count(request)
  814. return cv.to_suc(rst)
  815. except Exception as e:
  816. return cv.to_fail(e)
  817. class V3WanzhuConsultView(cv.AuthView):
  818. def post(self, request):
  819. """#顽主咨询v3(3.0小程序)
  820. @cotent:"咨询内容"
  821. @pid:1,评论id(相当于回复哪条评论)
  822. """
  823. try:
  824. rst = ctl.add_wanzhu_consult(request)
  825. return cv.to_suc(rst)
  826. except Exception as e:
  827. return cv.to_fail(e)
  828. class V3CommentsView(cv.AuthView):
  829. def post(self, request):
  830. """#评论v3(3.0小程序)
  831. @record_id:1,作业id
  832. @stock_id:1,股票id
  833. @cotent:"评论内容"
  834. @pid:1,评论id
  835. """
  836. try:
  837. rst = ctl.add_comments(request)
  838. return cv.to_suc(rst)
  839. except Exception as e:
  840. return cv.to_fail(e)
  841. def delete(self, request):
  842. """#删除评论v3(3.0小程序)
  843. @id:1,评论id
  844. """
  845. try:
  846. rst = ctl.delete_comments(request)
  847. return cv.to_suc(rst)
  848. except Exception as e:
  849. return cv.to_fail(e)
  850. class V3ZanView(cv.AuthView):
  851. def post(self, request):
  852. """#点赞v3(3.0小程序)
  853. @record_id:1,作业id
  854. """
  855. try:
  856. rst = ctl.add_zan(request)
  857. return cv.to_suc(rst)
  858. except Exception as e:
  859. cv.tracefail()
  860. return cv.to_fail(e)
  861. class V3ExperienceView(cv.AuthView):
  862. def get(self, request):
  863. """#今日反思列表v3(3.0小程序)
  864. """
  865. try:
  866. total,rst = ctl.get_experience_list(request)
  867. return cv.to_suc({"total":total,"list":rst})
  868. except Exception as e:
  869. cv.tracefail()
  870. return cv.to_fail(e)
  871. class V3UserFundModifyView(cv.AuthView):
  872. def put(self, request):
  873. """#修改初始资金v3(3.0小程序)
  874. @out_fund:10
  875. @in_fund:10
  876. @account_img:""
  877. """
  878. try:
  879. rst = ctl.modify_user_fund(request)
  880. return cv.to_suc(rst)
  881. except Exception as e:
  882. cv.tracefail()
  883. return cv.to_fail(e)
  884. class V3UserChoiceListView(cv.AuthView):
  885. def get(self, request):
  886. """#我的自选v3(3.0小程序)
  887. @stock_id:1
  888. """
  889. try:
  890. total,rst = ctl.get_user_choices(request)
  891. return cv.to_suc({"total":total,"list":rst})
  892. except Exception as e:
  893. cv.tracefail()
  894. return cv.to_fail(e)
  895. class V3UserChoiceView(cv.AuthView):
  896. def post(self, request):
  897. """#加入首选v3(3.0小程序)
  898. @stock_id:""
  899. """
  900. try:
  901. rst = ctl.add_choice(request)
  902. return cv.to_suc(rst)
  903. except Exception as e:
  904. return cv.to_fail(e)
  905. def delete(self,request):
  906. """#取消自选(3.0小程序)
  907. @id:"1",多个逗号分隔
  908. @stock_id:"1",股票id
  909. """
  910. qdata = request.json
  911. need_params = ["stock_id"]
  912. mse = ccf.check_params(*need_params,**qdata)
  913. if mse:
  914. raise ce.TipException(mse)
  915. try:
  916. vals = ccf.get_need_params(*need_params,**qdata)
  917. rst = ctl.delete_choice(request)
  918. return cv.to_suc(rst)
  919. except Exception as e:
  920. cv.tracefail()
  921. return cv.to_fail(e)
  922. class UserMatchListView(cv.AuthView):
  923. def get(self, request):
  924. """#用户参赛列表v3(3.0小程序)
  925. """
  926. try:
  927. total,rst = ctl.get_user_match_list(request)
  928. return cv.to_suc({"total":total,"list":rst})
  929. except Exception as e:
  930. cv.tracefail()
  931. return cv.to_fail(e)
  932. class UserInfoView(cv.AuthView):
  933. def get(self, request):
  934. """#用户信息(公共)
  935. """
  936. try:
  937. rst = ctl.get_format_user_info(request)
  938. return cv.to_suc(rst)
  939. except Exception as e:
  940. cv.tracefail()
  941. return cv.to_fail(e)
  942. class StockUserListView(cv.AuthView):
  943. def get(self, request):
  944. """#股票持仓选手数据(3.0小程序)
  945. """
  946. try:
  947. qdata = request.json
  948. total,rst = ctl.get_stock_players(**qdata)
  949. return cv.to_suc({"total":total,"list":rst})
  950. except Exception as e:
  951. cv.tracefail()
  952. return cv.to_fail(e)
  953. class UserInOutListView(cv.AuthView):
  954. def get(self, request):
  955. """#每日盈亏(3.0小程序)
  956. """
  957. try:
  958. total,rst = ctl.get_day_inout_rank_list(request)
  959. return cv.to_suc({"total":total,"list":rst})
  960. except Exception as e:
  961. cv.tracefail()
  962. return cv.to_fail(e)
  963. class V3FollowUserListView(cv.AuthView):
  964. def get(self, request):
  965. """#我的关注(2.0小程序)
  966. """
  967. try:
  968. total,rst = ctl.get_user_follows_v3(request)
  969. return cv.to_suc({"total":total,"list":rst})
  970. except Exception as e:
  971. cv.tracefail()
  972. return cv.to_fail(e)
  973. class V3LatestMatchView(cv.AuthView):
  974. def get(self, request):
  975. """#最新赛事与分组信息(3.0app)
  976. """
  977. try:
  978. rst = ctl.get_latest_match_info(request)
  979. return cv.to_suc(rst)
  980. except Exception as e:
  981. cv.tracefail()
  982. return cv.to_fail(e)
  983. class V3StockView(cv.AuthView):
  984. def get(self, request):
  985. """#股票詳情(3.0小程序)
  986. @id:1
  987. """
  988. qdata = request.json
  989. need_params = ["id"]
  990. mse = ccf.check_params(*need_params,**qdata)
  991. if mse:
  992. raise ce.TipException(mse)
  993. try:
  994. vals = ccf.get_need_params(*need_params,**qdata)
  995. #vals["user_id"] = request.user.get("id")
  996. stock_id = vals.get("id")
  997. rst = ctl.get_stock_info(stock_id)
  998. return cv.to_suc(rst)
  999. except Exception as e:
  1000. cv.tracefail()
  1001. return cv.to_fail(e)
  1002. class V3StockPlayersListView(cv.AuthView):
  1003. def get(self, request):
  1004. """#股票持仓列表(3.0小程序)
  1005. @id:1
  1006. @page:1
  1007. @page_size:1
  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(["page","page_size","stock_date"])
  1016. vals = ccf.get_need_params(*need_params,**qdata)
  1017. vals["user_id"] = request.user.get("id")
  1018. vals["stock_id"] = vals.get("id")
  1019. vals["v3"] = 1
  1020. total,rst = ctl.get_stock_players(**vals)
  1021. return cv.to_suc({"total":total,"list":rst})
  1022. #return cv.to_suc(rst)
  1023. except Exception as e:
  1024. cv.tracefail()
  1025. return cv.to_fail(e)
  1026. class V3ArticleDetailView(cv.BaseView):
  1027. def get(self, request):
  1028. """#文章详情(APP)
  1029. @id:1
  1030. """
  1031. qdata = request.json
  1032. need_params = ["id"]
  1033. mse = ccf.check_params(*need_params,**qdata)
  1034. if mse:
  1035. raise ce.TipException(mse)
  1036. try:
  1037. vals = ccf.get_need_params(*need_params,**qdata)
  1038. rst = ctl.get_article_info(**vals)
  1039. return cv.to_suc(rst)
  1040. except Exception as e:
  1041. cv.tracefail()
  1042. return cv.to_fail(e)
  1043. class ProfitRankListView(cv.BaseView):
  1044. def get(self, request):
  1045. """#盈亏列表(小程序)
  1046. @id:1
  1047. """
  1048. qdata = request.json
  1049. try:
  1050. total,rst = ctl.get_profit_list(**qdata)
  1051. return cv.to_suc({"total":total,"list":rst})
  1052. except Exception as e:
  1053. cv.tracefail()
  1054. return cv.to_fail(e)
  1055. class V3GroupRankView(cv.AuthView):
  1056. def get(self, request):
  1057. """#分组排名(小程序)
  1058. """
  1059. try:
  1060. total,rst = ctl.get_group_rank_list_v3(request)
  1061. return cv.to_suc({"total":total,"list":rst})
  1062. except Exception as e:
  1063. cv.tracefail()
  1064. return cv.to_fail(e)
  1065. class V3ArticleTypeListView(cv.BaseView):
  1066. def get(self, request):
  1067. """#盈亏列表(小程序)
  1068. @id:1
  1069. """
  1070. qdata = request.json
  1071. try:
  1072. rst = ctl.get_article_type_list(**qdata)
  1073. return cv.to_suc(rst)
  1074. except Exception as e:
  1075. cv.tracefail()
  1076. return cv.to_fail(e)
  1077. class ConsultListView(cv.AuthView):
  1078. def get(self, request):
  1079. """#顽主咨询列表(平台管理后台)
  1080. @name:"股票名称"
  1081. @page:1
  1082. @page_size:20
  1083. """
  1084. qdata = request.json
  1085. try:
  1086. total,rst = ctl.get_wanzhu_consult_list(**qdata)
  1087. return cv.to_suc({"total":total,"list":rst})
  1088. except Exception as e:
  1089. cv.tracefail()
  1090. return cv.to_fail(e)
  1091. class BaikeCategoryListView(cv.AuthView):
  1092. def get(self, request):
  1093. """#百科词条分类列表(平台管理后台)
  1094. @name:"股票名称"
  1095. @page:1
  1096. @page_size:20
  1097. """
  1098. qdata = request.json
  1099. try:
  1100. rst = ctl.get_baike_category_tree(**qdata)
  1101. return cv.to_suc(rst)
  1102. except Exception as e:
  1103. cv.tracefail()
  1104. return cv.to_fail(e)
  1105. class BaikeListView(cv.AuthView):
  1106. def get(self, request):
  1107. """#百科词条列表(平台管理后台)
  1108. @category_id:1,分类id
  1109. """
  1110. qdata = request.json
  1111. try:
  1112. rst = ctl.get_baike_list_by_category(**qdata)
  1113. return cv.to_suc(rst)
  1114. except Exception as e:
  1115. cv.tracefail()
  1116. return cv.to_fail(e)
  1117. class BaikeDetailView(cv.AuthView):
  1118. def get(self, request):
  1119. """#百科词条列表(平台管理后台)
  1120. @id:1,百科id
  1121. """
  1122. qdata = request.json
  1123. try:
  1124. rst = ctl.get_baike_detail(**qdata)
  1125. return cv.to_suc(rst)
  1126. except Exception as e:
  1127. cv.tracefail()
  1128. return cv.to_fail(e)
  1129. def post(self, request):
  1130. """#新增百科词条(3.0小程序)
  1131. """
  1132. qdata = request.json
  1133. now = datetime.datetime.now()
  1134. need_params = ["name","content"]
  1135. mse = ccf.check_params(*need_params,**qdata)
  1136. if mse:
  1137. raise ce.TipException(mse)
  1138. try:
  1139. need_params.extend(["editor"])
  1140. vals = ccf.get_need_params(*need_params,**qdata)
  1141. vals["cid"] = request.user.get("id",0)
  1142. vals["cname"] = request.user.get("username","")
  1143. rst = ctl.add_model(self,**vals)
  1144. return cv.to_suc(rst)
  1145. except Exception as e:
  1146. cv.tracefail()
  1147. return cv.to_fail(e)
  1148. class V3AuthinfoView(cv.BaseView):
  1149. def get(self,request):
  1150. """#获取用户信息(小程序)
  1151. """
  1152. try:
  1153. rst = ca.get_wxauth_info_v3(request)
  1154. return cv.to_suc(rst)
  1155. except Exception as e:
  1156. cv.tracefail()
  1157. return cv.to_fail(e)
  1158. class V3APPVersionView(cv.BaseView):
  1159. def get(self,request):
  1160. """#获取用户信息(小程序)
  1161. """
  1162. try:
  1163. rst = ctl.get_app_version(request)
  1164. return cv.to_suc(rst)
  1165. except Exception as e:
  1166. cv.tracefail()
  1167. return cv.to_fail(e)
  1168. class WanzhuConsultReplyView(cv.AuthView):
  1169. def post(self, request):
  1170. """#顽主咨询回复(平台管理后台)
  1171. @id:1
  1172. """
  1173. qdata = request.json
  1174. need_params = ["reply_content","user_id"]
  1175. mse = ccf.check_params(*need_params,**qdata)
  1176. if mse:
  1177. raise ce.TipException(mse)
  1178. try:
  1179. need_params.extend(["pid","action","width","height"])
  1180. vals = ccf.get_need_params(*need_params,**qdata)
  1181. rst = ctl.reply_wanzhu_consult(**vals)
  1182. return cv.to_suc(rst)
  1183. except Exception as e:
  1184. cv.tracefail()
  1185. return cv.to_fail(e)
  1186. class UserDeleteView(cv.AuthView):
  1187. def delete(self, request):
  1188. """#删除评论v3(3.0小程序)
  1189. @id:1,评论id
  1190. """
  1191. try:
  1192. rst = ctl.delete_user_info(request)
  1193. return cv.to_suc(rst)
  1194. except Exception as e:
  1195. return cv.to_fail(e)
  1196. class StockCommentsListView(cv.AuthView):
  1197. def get(self, request):
  1198. """#股票评论列表(平台管理后台)
  1199. @stock_id:""
  1200. @page:1
  1201. @page_size:20
  1202. """
  1203. qdata = request.json
  1204. try:
  1205. total,rst = ctl.get_list_info(self,**qdata)
  1206. return cv.to_suc({"total":total,"list":rst})
  1207. except Exception as e:
  1208. cv.tracefail()
  1209. return cv.to_fail(e)
  1210. class UserArticleRelationListView(cv.AuthView):
  1211. def get(self, request):
  1212. """#名人堂列表(平台管理后台)
  1213. @page:1
  1214. @page_size:20
  1215. """
  1216. qdata = request.json
  1217. try:
  1218. total,rst = ctl.get_list_info(self,**qdata)
  1219. return cv.to_suc({"total":total,"list":rst})
  1220. except Exception as e:
  1221. cv.tracefail()
  1222. return cv.to_fail(e)
  1223. class UserArticleRelationView(cv.AuthView):
  1224. def get(self, request):
  1225. """#名人堂详情(小程序)
  1226. @id:1
  1227. """
  1228. qdata = request.json
  1229. need_params = ["id"]
  1230. mse = ccf.check_params(*need_params,**qdata)
  1231. if mse:
  1232. raise ce.TipException(mse)
  1233. try:
  1234. vals = ccf.get_need_params(*need_params,**qdata)
  1235. rst = ctl.get_detail_info(self,**vals)
  1236. return cv.to_suc(rst)
  1237. except Exception as e:
  1238. cv.tracefail()
  1239. return cv.to_fail(e)
  1240. class BaikeRandomListView(cv.AuthView):
  1241. def get(self, request):
  1242. """#随机百科词条(小程序)
  1243. """
  1244. qdata = request.json
  1245. try:
  1246. rst = ctl.get_random_bake_list(**qdata)
  1247. return cv.to_suc(rst)
  1248. except Exception as e:
  1249. cv.tracefail()
  1250. return cv.to_fail(e)
  1251. class TypeArticleTop5ListView(cv.AuthView):
  1252. def get(self, request):
  1253. """#每个分类下最新5条数据(小程序)
  1254. """
  1255. qdata = request.json
  1256. try:
  1257. rst = ctl.articles_top5_by_type(**qdata)
  1258. return cv.to_suc(rst)
  1259. except Exception as e:
  1260. cv.tracefail()
  1261. return cv.to_fail(e)
  1262. class MatchWinlostTop5ListView(cv.AuthView):
  1263. def get(self, request):
  1264. """#每届比赛收益top5(小程序)
  1265. """
  1266. qdata = request.json
  1267. try:
  1268. rst = ctl.get_match_winlost_top5(**qdata)
  1269. return cv.to_suc(rst)
  1270. except Exception as e:
  1271. cv.tracefail()
  1272. return cv.to_fail(e)