Пример #1
0
 async def parse_data(request):
     if request.method == 'POST':
         if request.content_type.startswitch('application/json'):
             request.__data__ = await request.json()
             logger.debug('request json:{}'.format(request.__data__))
         elif request.content_type.startswith(
                 'application/x-www-form-urlencode'):
             request.__data__ = await request.post()
             logger.debug('request post:{}'.format(request.__data__))
     return (await handler(request))
Пример #2
0
async def wechat_message_handle(data):
    """ 消息处理 """
    logger.info("[wechat] route, message info: {} ".format(data))
    try:
        msg_handle = MsgHandle(data)
        reply = msg_handle.run()
        return reply if reply else 'success'
    except Exception as e:
        logger.debug('[wechat] route: error. %s ' % str(e))
        return 'success'
Пример #3
0
def access_token_cache():
    """ access token 缓存 """
    try:
        postUrl = CONF['url']['access_token_url']
        urlResp = request.urlopen(postUrl)
        urlResp = json.loads(urlResp.read())
        logger.debug("[wechat] access_token: {} {}".format(urlResp, postUrl))
        return urlResp['access_token']
    except Exception:
        logger.warning("[wechat] access_token error: {} {}".format(
            urlResp, postUrl))
        return ''
Пример #4
0
 async def auth(request):
     logger.debug("check user: {0} {1}".format(request.method, request.path))
     request.__user__ = None
     cookie_str = request.cookies.get(Glo._COOKIE_NAME)
     if cookie_str:
         user = await Glo.cookie2user(cookie_str)
         if user:
             logger.debug('set current user: {0}'.format(user.email)) 
             request.__user__ = user
     if (request.path.startswith('/manage/') and
             (request.__user__ is None or not request.__user__.admin)):
         return web.HTTPFound('/signin')
     return (await handler(request))
Пример #5
0
    async def response(request):
        logger.debug('Response handler...')
        r = await handler(request)
        if isinstance(r, web.StreamResponse):
            return r
        if isinstance(r, bytes):
            resp = web.Response(body=r)
            resp.content_type = 'application/octet-stream'
            return resp
        if isinstance(r, str):
            if r.startswith('redirect:'):
                """ 重定向链接 """
                return web.HTTPFound(r[9:])
            # 字符串还可用直接返回,用于wx验证
            resp = web.Response(body=r.encode('utf-8'))
            logger.debug("r=%s" % r)
            resp.content_type = 'text/html;charset=utf-8'
            return resp

        if isinstance(r, dict):
            template = r.get('__template__')
            if template is None:
                resp = web.Response(
                        body=json.dumps(
                            r,
                            ensure_ascii=False,
                            default=lambda o: o.__dict__).encode('utf-8')
                    )
                resp.content_type = 'application/json;charset=utf-8'
                return resp
            else:
                r['__user__'] = request.__user__
                resp = web.Response(body=app['__templating__'].get_template(template).render(**r).encode('utf-8'))
                resp.content_type = 'text/html;charset=utf-8'
                return resp
        if isinstance(r, int) and (100 <= r < 600):
            return web.Response(r)
        if isinstance(r, tuple) and len(r) == 2:
            t, m = r
            if isinstance(t, int) and (100 <= r < 600):
                return web.Response(t, str(m))
        # default
        resp = web.Response(body=str(r).encode('utf-8'))
        resp.content_type = 'text/plain;charset=utf-8'
        return resp
Пример #6
0
def init_jinja2(app, **kw):
    logger.debug('init jinja2...')
    options = dict(
        autoescape=kw.get('autoescape', True),
        block_start_string=kw.get('block_start_string', '{%'),
        block_end_string=kw.get('block_end_string', '%}'),
        variable_start_string=kw.get('variable_start_string', '{{'),
        variable_end_string=kw.get('variable_end_string', '}}'),
        auto_reload=kw.get('auto_reload', True)
    )
    path = kw.get('path', None)
    if path is None:
        path = os.path.join(os.path.dirname(
            os.path.abspath(__file__)),
            'templates')
    logger.debug('set jinja2 template path: {}'.format(path))
    env = Environment(loader=FileSystemLoader(path), **options)
    filters = kw.get('filters', None)
    if filters is not None:
        for name, f in filters.items():
            env.filters[name] = f
    app['__templating__'] = env
Пример #7
0
 async def loggerx(request):
     logger.debug('Request:{} {}'.format(request.method, request.path))
     return (await handler(request))