import tornado.web from chefserver.tool.dbpool import DbOperate from chefserver.tool import applog from chefserver.tool.asynchttp import async_http_response from chefserver.sms.buildaliyunmediaurl import AliyunMediaAdapter from chefserver.webhandler.basehandler import BaseHandler, check_login from chefserver.tool.tooltime import curDatetime from chefserver.config import VOD_APP_ID, VOD_WORKFLOW_ID, VOD_EVENT_CALLBACK_URL from chefserver.config import VOD_CALLBACK_AUTH_KEY, VOD_VIDEO_CATEID from chefserver.tool.async_redis_pool import RedisOperate from tornado.escape import json_decode, json_encode from chefserver.tool.function import MD5encrypt import urllib.parse import time log = applog.get_log('webhandler.video') cblog = applog.get_log('webhandler.vodcallback') dbins = DbOperate.instance() redisins = RedisOperate().instance() video_temple_str = 'cache.video.{}.{}' async def handle_video_upload_finish(postbody): ''' 视频上传结束后,处理函数 ''' vid = postbody.get('VideoId')
import tornado.web from chefserver.tool.dbpool import DbOperate from chefserver.tool import applog from chefserver.webhandler.basehandler import BaseHandler, check_login from chefserver.webhandler.cacheoperate import CacheUserinfo, cache_up_follow, cache_up_fans, cache_up_caipu, cache_up_dongtai from chefserver.webhandler.common_action import is_block from chefserver.tool.tooltime import curDatetime import time log = applog.get_log('webhandler.myspace') db_ins = DbOperate.instance() class MyspaceIndexHandler(BaseHandler): ''' 个人空间首页 ''' @check_login async def post(self): userid = self.get_session().get('id', 0) success, code, message, result = await myspace_index(userid) # 更新草稿箱数量 temp_num = await get_caipu_temp_num(userid) result.setdefault('tempnum', temp_num) # 更新采购清单数量 qingdan_num = await get_caipu_qingdan_num(userid) result.setdefault('qingdannum', qingdan_num) # 更新积分 point_num = await get_use_point_num(userid) result.setdefault('pointnum', point_num) return self.send_message(success, code, message, result) async def get_use_point_num(userid):
import tornado.web import urllib.parse import tornado.options import time from tornado.escape import json_decode from chefserver.tool import applog, function from chefserver.tool.async_redis_pool import RedisOperate from chefserver.config import SENSTIVE_WORD, API_SECURITY_CHECK_OPEN, API_SECURITY_SECONDS, API_SECURITY_SECRET log = applog.get_log('webhandler.basehandler') log.setLevel('INFO') redisdb = RedisOperate().instance() class BaseHandler(tornado.web.RequestHandler): def options(self): # no body self.set_status(204) self.finish() def get_current_user(self): ''' 验证用户是否登录 ''' user = self.get_secure_cookie("cmsadmincookie") if user: return self.send_cms_msg(0, 'ok', user) else: return self.send_cms_msg(1, 'fail', None) # return self.get_secure_cookie("cmsadmincookie") def send_cms_msg(self, code, msg='ok', result=None):
from random import randint from chefserver.tool.asynchttp import async_http_response from chefserver.tool import applog from chefserver.sms.buildsmsurl import AliyunSMSAdapter log = applog.get_log('sms.aliyunsms') async def send_aliyun_send_sms(phone, t_code): # 发送短信 verifi_code = randint(100000, 999999) sms = AliyunSMSAdapter() url = sms.get_signature_url(phone, t_code, {"code": verifi_code}) success, result = await async_http_response(url, datatype='json') if success: if result.get('Code') == 'OK': log.debug("url:{}\nresponse:{}".format(url, result)) return True, result.get('RequestId'), verifi_code else: log.error("url:{},errorcode:{},RequestId:{}".format( url, result.get('Code'), result.get('RequestId'))) return False, result.get('RequestId'), result.get('Code') else: from tornado.escape import json_decode result = json_decode(result) log.error("url:{},errorcode:{},RequestId:{}".format( url, result.get('Code'), result.get('RequestId'))) return False, result.get('RequestId'), result.get('Code') # { # "Message":"OK", # "RequestId":"2184201F-BFB3-446B-B1F2-C746B7BF0657",
from peewee_async import transaction, savepoint from playhouse.shortcuts import JOIN, model_to_dict from chefserver.config import PAGE_SIZE, DATABASE from chefserver.models.point import User, User_Point, User_PointBill, BILL_TYPE_DICT, Product_Point_Detail, \ Product_Point, My_Exchange_Info, My_History_Address, My_Express_Info, Area, My_Address, Point_Info, Point_Setting from chefserver.tool.function import verify_num from chefserver.webhandler.basehandler import BaseHandler, check_login from chefserver.tool.tooltime import curDatetime from chefserver.tool.dbpool import DbOperate from chefserver.tool import applog import tornado.web from chefserver.webhandler.cacheoperate import CacheUserPointinfo log = applog.get_log('webhandler.point') dbins = DbOperate.instance() class MyPointHandler(BaseHandler): ''' 我的积分 ''' @check_login async def post(self, *args, **kwargs): result = {} userid = self.get_session().get('id', 0) try: user_point_obj = await self.application.objects.get(User_Point, user_id=userid) except User_Point.DoesNotExist: user_point_obj = await self.application.objects.create( User_Point, user_id=userid)
import tornado.web from chefserver.tool.dbpool import DbOperate from chefserver.tool.async_redis_pool import RedisOperate from chefserver.sms.aliyunsms import send_aliyun_send_sms from chefserver.webhandler.basehandler import BaseHandler, check_login from chefserver.tool import applog, function from chefserver.config import TOKEN_TIME, SMS_VERIFY_TIME, SMS_TEMPLATE_DICT from chefserver.webhandler.cacheoperate import CacheUserinfo import time log = applog.get_log('webhandler.user') # 用户密码及验证码登录 class LoginHandler(BaseHandler): async def get(self): # print('query:', self.request.query) # print('body:', self.request.body) # print(dir(self.request)) # print(self.request.query_arguments) self.write('login') async def post(self): login_type = self.get_body_argument('type') phone = self.get_body_argument('phone') # print('body_arguments', self.request.body) # b'phone=13950126971&password=123123&type=1' if 0 < len(phone) >= 20: return self.send_message(False, 1001, '手机参数错误') if login_type == '1': # 账号密码登录
from chefserver.tool.dbpool import DbOperate from chefserver.tool import applog from chefserver.tool.tooltime import curDatetime from chefserver.config import TOKEN_TIME from chefserver.tool.async_redis_pool import RedisOperate from chefserver.webhandler.basehandler import BaseHandler, check_login from chefserver.webhandler.cacheoperate import CacheUserinfo from chefserver.webhandler.publish import delete_dongtai, delete_recipe, update_all_point from chefserver.webhandler.common_action import is_my_id import time log = applog.get_log('webhandler.action') dbins = DbOperate.instance() class TimeStampHandler(BaseHandler): ''' 返回时间戳 ''' def post(self): self.send_message(True, 0, '', int(time.time())) class HeartBeatHandler(BaseHandler): ''' 心跳, 保持token的生命时间 ''' async def post(self): user_session = await self.get_login() if user_session is False: # 未登录 return self.send_message(False, 0, '没有心跳') token = self.request.headers.get('token') key = "token:{}".format(token) # token_exists = await RedisOperate().instance().exists(key)
import tornado.web from chefserver.tool.dbpool import DbOperate from chefserver.tool import applog from chefserver.webhandler.basehandler import BaseHandler, check_login from chefserver.webhandler.cacheoperate import CacheUserinfo, cache_up_follow, cache_up_fans, cache_up_caipu, cache_up_dongtai from chefserver.webhandler.myspace import get_relationship_status from chefserver.webhandler.common_action import visit_plus_one, is_liked, is_collectioned, is_addpurcha, is_my_id log = applog.get_log('webhandler.detail') dbins = DbOperate.instance() class DongtaiDetailHandler(BaseHandler): ''' 获取动态详情 ''' # @check_login async def post(self): did = self.verify_arg_legal(self.get_body_argument('did'), '动态ID', False, is_num=True) # 判断用户与自己的状态: relationship = 0 # 0 未关注 1 已关注 2 互相关注 user_session = await self.get_login() if user_session is False: # 未登录 myid = 0 else: myid = user_session.get('id', 0) success, code, message, result = await get_dongtai_detail(did, myid) return self.send_message(success, code, message, result)
""" import tornado.web from chefserver.tool.dbpool import DbOperate from chefserver.tool import applog from chefserver.webhandler.basehandler import BaseHandler, check_login from chefserver.tool.asynchttp import async_http_response # from chefserver.webhandler.common_action import is_my_id from chefserver.tool.tooltime import curDatetime, curTimeStamp from chefserver.tool.function import get_uuid from chefserver.tool.async_redis_pool import RedisOperate from chefserver.webhandler.cacheoperate import CacheUserinfo from chefserver.config import APPLE_PUBLIC_KEY_PEM, APPLE_GUANFAN_CLIEND_ID import random # import jwt import python_jwt as jwt log = applog.get_log('webhandler.authverify') dbins = DbOperate.instance() class AuthVerifyHandler(BaseHandler): ''' 第三方验证以及登录 ''' async def post(self): openid = self.verify_arg_legal(self.get_body_argument('openid'), '第三方用户ID', False, is_len=True, olen=200) platform = self.verify_arg_legal(self.get_body_argument('platform'), '平台', False, uchecklist=True,
import tornado.web from chefserver.tool.dbpool import DbOperate from chefserver.tool import applog from chefserver.webhandler.basehandler import BaseHandler, check_login from chefserver.webhandler.cacheoperate import CachePapeHotDongtai, CacheRecommedDongtai from chefserver.tool.async_redis_pool import RedisOperate from chefserver.webhandler.common_action import get_all_blocks log = applog.get_log('webhandler.dongtaiplaza') dbins = DbOperate.instance() cachins = RedisOperate.instance() class DtPlazaHandler(BaseHandler): ''' 动态广场! 最新,最热列表 ''' async def post(self): userblock = None user_session = await self.get_login() if user_session is False: # 未登录 relationship = 0 myid=0 else: # 获取关注状态 myid = user_session.get('id',0) userblock = await get_all_blocks(myid) plazatype = self.verify_arg_legal(self.get_body_argument('plazatype'), '动态广场列表类型', False, uchecklist=True, user_check_list=['1','2']) page = self.verify_arg_legal(self.get_body_argument('page'), '页数', False, is_num=True) hotdtpage = CachePapeHotDongtai() argkey = plazatype + page if await hotdtpage.exists(argkey):
import tornado.web from chefserver.config import DATABASE from chefserver.models.point import Express_Info, Point_Info, Point_Setting, User_Point, User_PointBill from chefserver.tool.dbpool import DbOperate from chefserver.tool import applog from chefserver.top.api.TbkSpreadGetRequest import TbkSpreadGetRequest from chefserver.top.api.TbkTpwdCreateRequest import TbkTpwdCreateRequest from chefserver.webhandler.basehandler import BaseHandler, check_login from chefserver.webhandler.cacheoperate import CacheUserinfo, CacheUserPointinfo from chefserver.webhandler.myspace import get_relationship_status from chefserver.webhandler.search import get_similar_recipe_tagkey from chefserver.webhandler.campaign.campaignjoin import recipe_campaign_join, moment_campaign_join from chefserver.webhandler.taobaoke import check_tbk_promote from chefserver.webhandler.video.aliyunmediaapi import get_video_history, update_video_history log = applog.get_log('webhandler.publish') dbins = DbOperate.instance() async def update_sp_point(self,userid,point_type,bill_type): ''' 处理发布食谱积分联动''' try: point_info_obj = await self.application.objects.get(Point_Info, point_type=point_type, status=True) # 发布动态获取的积分数 grade_no = point_info_obj.grade_no point_setting_obj = await self.application.objects.get(Point_Setting, pointinfo=point_info_obj.id) # 获取设置的类型 options_type 1, 'every_day 每天N次' 3, 'no_limit 没有限制' if point_setting_obj.options_type == 1: # redis cacheojb = CacheUserPointinfo(userid) cres = await cacheojb.createCache()
from playhouse.shortcuts import model_to_dict from chefserver.config import TAO_APP_KEY, TAO_APP_SECRET, TAO_APP_KEY_ANDROID, TAO_APP_SECRET_ANDROID, PAGE_SIZE from chefserver.models.tbk import Tao_Promote_Info, Tao_Collect_Info, Tao_Banner_Info from chefserver.top.api.TbkCouponGetRequest import TbkCouponGetRequest from chefserver.top.api.TbkDgMaterialOptionalRequest import TbkDgMaterialOptionalRequest from chefserver.top.api.TbkDgOptimusMaterialRequest import TbkDgOptimusMaterialRequest from chefserver.top.api.TbkItemInfoGetRequest import TbkItemInfoGetRequest from chefserver.top.api.TbkSpreadGetRequest import TbkSpreadGetRequest from chefserver.webhandler.basehandler import BaseHandler, check_login from chefserver.tool.tooltime import curDatetime from chefserver.tool.dbpool import DbOperate from chefserver.tool import applog log = applog.get_log('webhandler.taobaoke') dbins = DbOperate.instance() class TaoIndexSearchHandler(BaseHandler): ''' 淘宝客搜索 ''' # @check_login async def post(self, *args, **kwargs): ''' 最新: 销量:"total_sales_des","total_sales_asc" 价格:"price_des","price_asc", 返利:"tk_rate_des","tk_rate_asc" ''' q = self.verify_arg_legal(self.get_body_argument('q'), '查询词',
from chefserver.webhandler.basehandler import BaseHandler from chefserver.tool.dbpool import DbOperate from chefserver.tool import applog log = applog.get_log('webhandler.food_channel') dbins = DbOperate.instance() class ChannelListHandler(BaseHandler): ''' 美食列表详情页 ''' async def post(self): id = self.verify_arg_legal(self.get_body_argument('id'), '频道列表id', False, is_num=True) page = self.verify_arg_legal(self.get_body_argument('page'), '页数', False, is_num=True) result = await search_food_channel(id, int(page)) return self.send_message(True, 0, 'success', result) async def search_food_channel(id, pagenum, epage=10): ''' 美食详情 ''' page = 0 if pagenum - 1 <= 0 else pagenum - 1 page = page * epage channel_base_sql = ''' SELECT id as channel_id, title, faceImg, IFNULL(mainInfoUrl,'') as mainImg, visitCount FROM channel_info WHERE
''' dbpool 数据库操作类 ''' import aiomysql from chefserver.tool import applog from chefserver.config import CONFIG_MYSQL log = applog.get_log('tool.dbpool') class DbOperate(object): def __init__(self): self.__pool = None @classmethod def instance(cls, *args, **kwargs): if not hasattr(DbOperate, "_instance"): DbOperate._instance = DbOperate(*args, **kwargs) return DbOperate._instance async def create_db_pool(self): log.info('create database connection pool...') if isinstance(self.__pool,aiomysql.pool.Pool): return self.__pool try: obj_pool = await aiomysql.create_pool( host = CONFIG_MYSQL.get('host','127.0.0.1'), port = CONFIG_MYSQL.get('port', 3306), user = CONFIG_MYSQL['user'], password = CONFIG_MYSQL['password'], db = CONFIG_MYSQL['db'],
import tornado.web from chefserver.webhandler.basehandler import BaseHandler, check_login from chefserver.tool import applog, tooltime from chefserver.sms import aliyun_sts from chefserver.tool.async_redis_pool import RedisOperate from tornado.escape import json_decode, json_encode log = applog.get_log('webhandler.getsts') class UploadPhotoHandler(BaseHandler): @check_login async def post(self): sts_type = self.get_body_argument('type') userid = self.get_session().get('id', 0) # sessionname = "uid.{}".format(userid) sessionname = userid if sts_type == '1': # 上传菜谱图片 success, code, message, result = await get_caipu_sts( userid, sessionname) # print(success, code, message, result) # return self.send_message(success, code, message, result) elif sts_type == '2': # 上传动态图片 success, code, message, result = await get_dongtai_sts( userid, sessionname) # return self.send_message(success, code, message, result) elif sts_type == '3': # 上传个人头像
from tornado.escape import json_encode, json_decode from chefserver.tool import applog from chefserver.config import CONFIG_REDIS_URI, CONFIG_REDIS_MAXCONNECT, CONFIG_REDIS_MINCONNECT import aioredis log = applog.get_log('tool.async_redis_pool') class RedisOperate(object): def __init__(self): self.obj_pool = None @classmethod def instance(cls, *args, **kwargs): if not hasattr(RedisOperate, "_instance"): RedisOperate._instance = RedisOperate(*args, **kwargs) return RedisOperate._instance async def create_redis_pool(self): log.info('create redis connection pool...') self.obj_pool = await aioredis.create_pool( CONFIG_REDIS_URI, minsize=CONFIG_REDIS_MINCONNECT, maxsize=CONFIG_REDIS_MAXCONNECT) async def execute(self, *arg): # 总的执行方法 if self.obj_pool is None: await self.create_redis_pool() try: return await self.obj_pool.execute(*arg)
# 黑名单模块 # 黑名单列表, # 添加黑名单, # 删除黑名单, # 返回黑名单ID列表, # 是否在黑名单中, """ import tornado.web from chefserver.tool.dbpool import DbOperate from chefserver.tool import applog from chefserver.webhandler.basehandler import BaseHandler, check_login from chefserver.webhandler.cacheoperate import CacheUserinfo from chefserver.webhandler.myspace import myspace_unfollow log = applog.get_log('webhandler.block') dbins = DbOperate.instance() class BlocklistHandler(BaseHandler): ''' 黑名单列表 ''' @check_login async def post(self): myid = self.get_session().get('id', 0) page = self.verify_arg_legal(self.get_body_argument('page'), '页数', False, is_num=True) success, code, message, result = await get_block_list(myid, int(page)) return self.send_message(success, code, message, result)
from playhouse.shortcuts import model_to_dict from chefserver.models.point import User from chefserver.webhandler.basehandler import BaseHandler, check_login from chefserver.tool.tooltime import curDatetime from chefserver.tool.dbpool import DbOperate from chefserver.tool import applog import tornado.web from chefserver.webhandler.cacheoperate import CacheUserPointinfo, CacheUserinfo from chefserver.webhandler.myspace import get_relationship_status log = applog.get_log('webhandler.index') dbins = DbOperate.instance() class IndexBannerHandler(BaseHandler): ''' 首页海报 ''' async def post(self): # myid = 0 # user_session = await self.get_login() # if user_session is False: # # 未登录 # myid = 0 # else: # myid = user_session.get('id',0) channel = self.verify_arg_legal(self.get_body_argument('channel'), '频道名称', False, uchecklist=True, user_check_list=['0', '1'])
''' # 缓存操作模块, 之后所有的缓存相关的业务操作都在这里进行 ''' from chefserver.tool.async_redis_pool import RedisOperate from chefserver.tool.dbpool import DbOperate from tornado.escape import json_decode, json_encode from chefserver.tool import applog from chefserver.tool.tooltime import rest_of_day log = applog.get_log('webhandler.cache') class CacheBase(object): """ 缓存操作基类 """ def __init__(self): super(CacheBase, self).__init__() self.redis = RedisOperate.instance() # self.dbmysql = DbOperate.instance() class CachePapeHotDongtai(CacheBase): ''' 动态广场热门缓存 ''' def __init__(self): super(CachePapeHotDongtai, self).__init__() self.basekey = "hotdongtai:" async def exists(self, argkey): ''' key是否存在,argkey=广场类型+页数 ''' result = await self.redis.exists(self.basekey + argkey) return result == 1
import tornado.web from chefserver.tool.dbpool import DbOperate from chefserver.tool import applog from chefserver.webhandler.basehandler import BaseHandler, check_login from chefserver.webhandler.cacheoperate import CacheUserinfo, cache_up_follow, cache_up_fans, cache_up_caipu, cache_up_dongtai from chefserver.webhandler.myspace import get_relationship_status from chefserver.webhandler.common_action import visit_plus_one, is_collectioned log = applog.get_log('webhandler.subject') dbins = DbOperate.instance() class SubjectListHandler(BaseHandler): ''' 主题列表 ''' async def post(self): order_type = self.verify_arg_legal(self.get_body_argument('topictype'), '主题列表类型', False, uchecklist=True, user_check_list=['1', '2']) page = self.verify_arg_legal(self.get_body_argument('page'), '页数', False, is_num=True) success, code, message, result = await get_subjectlist( order_type, int(page)) return self.send_message(success, code, message, result) class SubjectDetailHandler(BaseHandler): ''' 主题详情 '''
""" # 活动模块 # 参加活动,参与列表 """ import tornado.web from chefserver.tool.dbpool import DbOperate from chefserver.tool import applog from chefserver.webhandler.basehandler import BaseHandler, check_login from chefserver.webhandler.common_action import is_my_id from chefserver.tool.tooltime import curDatetimeObj, curDatetime, curDate log = applog.get_log('webhandler.campaign') dbins = DbOperate.instance() class CampaignJoinPKHandler(BaseHandler): ''' 活动PK参与 ''' @check_login async def post(self): myid = self.get_session().get('id', 0) campaignid = self.verify_arg_legal( self.get_body_argument('campaignid'), '活动ID', False, is_num=True) pkside = self.verify_arg_legal(self.get_body_argument('pkside'), 'pk站边', False, is_num=True, uchecklist=True, user_check_list=['0', '1']) success, code, message, result = await campaign_join_pk( myid, campaignid, int(pkside))
import tornado.web from chefserver.webhandler.basehandler import BaseHandler, check_login from chefserver.tool.tooltime import curDatetime from chefserver.tool.dbpool import DbOperate from chefserver.tool import applog log = applog.get_log('webhandler.search') dbins = DbOperate.instance() class SearchHandler(BaseHandler): ''' 搜索菜谱 ''' async def post(self): myid = 0 # 0 未关注 1 已关注 2 互相关注 user_session = await self.get_login() if user_session is False: # 未登录 myid = 0 else: myid = user_session.get('id', 0) keyword = self.verify_arg_legal(self.get_body_argument('key'), '食谱名', True, s_len=True, olen=80, is_not_null=True) sort = self.verify_arg_legal(self.get_body_argument('sort'), '排序类型', False, is_num=True,