# coding=utf-8 from __future__ import unicode_literals import requests import random,datetime import json import uuid from django.contrib import auth from django.core.cache import cache from django.conf import settings import common.error_info as ce from common import core_views as cv import common.common_control as ccc import common.common_functions as ccf import weixin.control_auth as ca import weixin.controls as ctl import weixin.wzhifuSDK as wzf from utils.upload_to_oss import hnoss from utils.baiduai import baidu_ai_detect_image,baidu_ai_detect_txt from utils.ocr import BaiduOcrForm from utils.ocrmanage import OcrManage class OpenidView(cv.BaseView): def get(self,request): """ #获取openid(小程序) @code:1212 """ code = request.json.get("code") open_id = cache.get(code) if open_id: return cv.to_suc({"openid":open_id}) else: 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) res = requests.get(get_token_url).json() print res if res.has_key('openid'): open_id = res['openid'] unionid = res['unionid'] cache.set(code,open_id,24*3600) else: open_id = '' unionid = '' if open_id: ccc.cache.set(open_id,1) return cv.to_suc({"openid":open_id,"unionid":unionid}) else: return cv.to_fail(u"获取用户信息出错!") class UploadFileView(cv.BaseView): def post(self, request): """ #文件上传(小程序) @file:"",文件对象 """ import time upload_file = request.FILES['file'] ts = str(int(time.time())) dest = settings.STATIC_ROOT + "/upload/"+ ts + upload_file.name content = upload_file.read() ossfile = ts + upload_file.name url = hnoss.upload_from_str(content,ossfile) return cv.to_suc({"url":url}) class UploadAvatarView(cv.BaseView): def post(self, request): """ #文件上传(小程序) @file:"",文件对象 """ import time upload_file = request.FILES['file'] ts = str(int(time.time())) dest = settings.STATIC_ROOT + "/upload/"+ ts + upload_file.name content = upload_file.read() ossfile = ts + upload_file.name url = hnoss.upload_from_str(content,ossfile,None) return cv.to_suc({"url":url}) class TopicUploadFileView(cv.BaseView): def post(self, request): """ #文件上传(WEB端) @file:"",文件对象 """ import time upload_file = request.FILES['file'] dest = settings.STATIC_ROOT + "/upload/"+str(int(time.time())) + upload_file.name with open(dest,"wb+") as f: for chunk in upload_file.chunks(): f.write(chunk) f.close() url = dest.replace(settings.STATIC_ROOT,settings.HOST) return cv.to_suc({"url":url}) class AuthView(cv.BaseView): def post(self, request): """#保存微信授权信息(小程序) @nickname:"新",昵称 @avatar:"",头像 @openid:"",openid """ try: rst = ca.add_wxauth_info(request) return cv.to_suc({"uid":rst.id}) except Exception as e: cv.tracefail() return cv.to_fail(e) class AuthinfoView(cv.AuthView): def get(self,request): """#获取用户信息(小程序) """ try: rst = ca.get_wxauth_info(request) return cv.to_suc(rst) except Exception as e: cv.tracefail() return cv.to_fail(e) def put(self, request): """#修改个人信息(小程序) """ try: rst = ca.update_wxauth_info(request) return cv.to_suc() except Exception as e: cv.tracefail() return cv.to_fail(e) class LoginView(cv.BaseView): def post(self, request): """#小程序登录(小程序) @usercode:"用户代号" @nickanme:"微信昵称" @avatar:"微信头像" @openid:"openid" """ try: #rst = ca.login_user(request) rst = {} return cv.to_suc(rst) except Exception as e: return cv.to_fail(e) class IndexView(cv.AuthView): def get(self, request): """#首页数据(小程序) """ try: rst = ctl.get_index_data(request) return cv.to_suc(rst) except Exception as e: cv.tracefail() return cv.to_fail(e) class PlayerRecordView(cv.AuthView): def get(self, request): """#每日数据详情(小程序) @id:1 """ qdata = request.json need_params = ["id"] mse = ccf.check_params(*need_params,**qdata) if mse: raise ce.TipException(mse) try: vals = ccf.get_need_params(*need_params,**qdata) rcid = vals.get("id") #rst = ctl.get_detail_info(self,**vals) rst = ctl.get_record_info(rcid) return cv.to_suc(rst) except Exception as e: cv.tracefail() return cv.to_fail(e) def post(self, request): """#新增每日数据(小程序) @stock_date:"2021-07-30" @today_fund:100 @today_stock:[{name:"江苏国泰",code:121221}] @today_stock_img:["http://test.png"] """ qdata = request.json now = datetime.datetime.now() need_params = ["stock_date","today_fund"] mse = ccf.check_params(*need_params,**qdata) if mse: raise ce.TipException(mse) try: need_params.extend(["is_markt","today_stock","today_stock_img","experience","id"]) vals = ccf.get_need_params(*need_params,**qdata) vals["user_id"] = request.user.get("id",0) vals["match_id"] = ccc.get_cur_match().id vals["today_fund"] = round(float(vals["today_fund"]),4) rst = ctl.add_model(self,**vals) return cv.to_suc(rst) except Exception as e: cv.tracefail() return cv.to_fail(e) class PlayerMatchListView(cv.AuthView): def get(self, request): """#选手参赛列表(小程序) """ try: rst = ctl.get_player_match_list(request) return cv.to_suc(rst) except Exception as e: cv.tracefail() return cv.to_fail(e) class PlayerMatchView(cv.AuthView): def get(self, request): """#选手参赛详情(小程序) """ try: rst = ctl.get_player_match_detail(request) return cv.to_suc(rst) except Exception as e: cv.tracefail() return cv.to_fail(e) class PlayerMatchRecordListView(cv.AuthView): def get(self, request): """#选手参赛每日持股(小程序) @id:1,赛事id @page:1 @page_size:20 """ try: total,rst = ctl.get_player_match_records(request) return cv.to_suc({"total":total,"list":rst}) except Exception as e: cv.tracefail() return cv.to_fail(e) class StockSearchView(cv.AuthView): def get(self, request): """#股票搜索列表(小程序) @name:名称 """ try: qdata = request.json rst = ctl.get_search_list(self,**qdata) #rst = ctl.get_stock_search(**qdata) #if qdata.get("name"): # rst = filter(lambda x:qdata.get("name") in x["name"],rst) #print(rst) return cv.to_suc(rst) except Exception as e: cv.tracefail() return cv.to_fail(e) class GroupRankListView(cv.BaseView): def get(self, request): """#排名列表(小程序) """ try: rst = ctl.get_rank_list(request) return cv.to_suc(rst) except Exception as e: cv.tracefail() return cv.to_fail(e) class GroupRankView(cv.BaseView): def get(self, request): """#分组排名(小程序) """ try: rst = ctl.get_group_rank_list(request) return cv.to_suc(rst) except Exception as e: cv.tracefail() return cv.to_fail(e) class PlayerRecordSingleView(cv.BaseView): def post(self, request): """#新增每日数据(WEB端) @usercode:"选手code" @match_id:"赛事id" @stock_date:"持股日期" @today_fund:"今日净资产" @today_stock:"今日持股" @today_stock_img:"今日持股截图" """ qdata = request.json now = datetime.datetime.now() #if not now.isoweekday() in [1,2,3,4,5] or not "09:30"