예제 #1
0
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')
예제 #2
0
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):
예제 #3
0
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):
예제 #4
0
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",
예제 #5
0
파일: point.py 프로젝트: whisnos/guanfan
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)
예제 #6
0
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':
            # 账号密码登录
예제 #7
0
파일: action.py 프로젝트: whisnos/guanfan
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)
예제 #8
0
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)
예제 #9
0
파일: authbind.py 프로젝트: whisnos/guanfan
"""
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,
예제 #10
0
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):
예제 #11
0
파일: publish.py 프로젝트: whisnos/guanfan
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()
예제 #12
0
파일: taobaoke.py 프로젝트: whisnos/guanfan
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'),
                                  '查询词',
예제 #13
0
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
예제 #14
0
파일: dbpool.py 프로젝트: whisnos/guanfan
'''
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'],
예제 #15
0
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':
            # 上传个人头像
예제 #16
0
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)
예제 #17
0
# 黑名单模块
# 黑名单列表, 
# 添加黑名单,
# 删除黑名单,
# 返回黑名单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)
예제 #18
0
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'])
예제 #19
0
'''
# 缓存操作模块, 之后所有的缓存相关的业务操作都在这里进行

'''
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
예제 #20
0
파일: subject.py 프로젝트: whisnos/guanfan
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):
    ''' 主题详情 '''
예제 #21
0
"""
# 活动模块
# 参加活动,参与列表

"""
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))
예제 #22
0
파일: search.py 프로젝트: whisnos/guanfan
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,