Exemple #1
0
    def get_sql(self, query, vars=None):
        """获取编译后的sql语句"""
        # 记录程序执行开始时间
        start_time = time.clock()
        try:
            # 判断是否记录sql执行语句
            if self.is_output_sql:
                log_helper.info('sql:' + str(query))
            # 建立游标
            self.cursor = self.connect.cursor()
            # 执行SQL
            self.data = self.cursor.mogrify(query, vars)
        except Exception as e:
            # 将异常写入到日志中
            log_helper.error('sql生成失败:' + str(e.args) + ' query:' + str(query))
            self.data = '获取编译sql失败'
        finally:
            # 关闭游标
            self.cursor.close()
        # 记录程序执行结束时间
        end_time = time.clock()
        # 写入日志
        self.write_log(start_time, end_time, query)

        return self.data
Exemple #2
0
    def test(self):
        log_helper.info('记录代码执行的相关记录或信息')

        try:
            result = '0' / 10
        except Exception as e:
            log_helper.error('出现异常:' + str(e.args))
Exemple #3
0
def validate():
    """使用勾子处理接口访问事件"""
    # response.headers['Access-Control-Allow-Origin'] = '*'
    """
        钩子函数 ,处理请求路由之前需要做什么的事情
        :return:
        """
    """使用勾子处理页面或接口访问事件"""
    # 让bottle框架支持jquery ajax的RESTful风格的PUT和DELETE等请求

    # 获取当前访问的Url路径
    path_info = request.environ.get("PATH_INFO")
    # 过滤不用做任何操作的路由(即过滤不用进行判断是否登录和记录日志的url)
    if path_info in ['/favicon.ico', '/', '/api/verify/', "/api/visitHandle/"]:
        return
    ### 记录客户端提交的参数 ###
    # 获取当前访问url路径与ip
    request_log = 'url:' + path_info + ' ip:' + web_helper.get_ip()
    try:
        # 添加json方式提交的参数
        if request.json:
            request_log = request_log + ' params(json):' + urllib.parse.unquote(
                str(request.json))
    except:
        pass
    try:
        # 添加GET方式提交的参数
        if request.query_string:
            request_log = request_log + ' params(get):' + urllib.parse.unquote(
                str(request.query_string))
        # 添加POST方式提交的参数
        if request.method == 'POST':
            request_log = request_log + ' params(post):' + urllib.parse.unquote(
                str(request.params.__dict__))
        # 存储到日志文件中
        log_helper.info(request_log)
    except:
        pass

    # 处理ajax提交的put、delete等请求转换为对应的请求路由(由于AJAX不支持RESTful风格提交,所以需要在这里处理一下,对提交方式进行转换)
    if request.method == 'POST' and request.POST.get('_method'):
        request.environ['REQUEST_METHOD'] = request.POST.get('_method', '')

    # 过滤不用进行登录权限判断的路由(登录与退出登录不用检查是否已经登录)
    url_list = ["/apiPost/login/", "/apiPost/logout/"]
    if path_info in url_list:
        pass
    else:
        # 已经登录成功的用户session肯定有值,没有值的就是未登录
        session = web_helper.get_session()
        # 获取用户id
        manager_id = session.get('id', 0)
        login_name = session.get('login_name', 0)
        # 判断用户是否登录
        if not manager_id or not login_name:
            web_helper.return_raise(
                web_helper.return_msg(-404, "您的登录已失效,请重新登录"))
Exemple #4
0
def validate():
    """使用勾子处理接口访问事件"""
    r = request
    # 获取当前访问的Url路径
    path_info = request.environ.get("PATH_INFO")
    # 过滤不用做任何操作的路由(即过滤不用进行判断是否登录和记录日志的url)
    if path_info in ['/favicon.ico', '/', '/api/verify/'
                     ] or path_info.find('/upload/') > -1:
        return
    ### 记录客户端提交的参数 ###
    # 获取当前访问url路径与ip
    request_log = 'url:' + path_info + ' ip:' + web_helper.get_ip()
    try:
        # 添加json方式提交的参数
        if request.json:
            request_log = request_log + ' params(json):' + urllib.parse.unquote(
                str(request.json))
    except:
        pass
    try:
        # 添加GET方式提交的参数
        if request.query_string:
            request_log = request_log + ' params(get):' + urllib.parse.unquote(
                str(request.query_string))
        # 添加POST方式提交的参数
        if request.method == 'POST':
            request_log = request_log + ' params(post):' + urllib.parse.unquote(
                str(request.params.__dict__))
        # 存储到日志文件中
        log_helper.info(request_log)
    except:
        pass

    # 处理ajax提交的put、delete等请求转换为对应的请求路由(由于AJAX不支持RESTful风格提交,所以需要在这里处理一下,对提交方式进行转换)
    if request.method == 'POST' and request.POST.get('_method'):
        request.environ['REQUEST_METHOD'] = request.POST.get('_method', '')

    # 过滤不用进行登录权限判断的路由(登录与退出登录不用检查是否已经登录)
    url_list = [
        "/api/login/", "/api/logout/", "/api/about/", "/api/contact_us/",
        "/api/product_class/", "/api/product/"
    ]
    if path_info in url_list or (request.method == 'GET'
                                 and path_info.find('/api/product/') > -1):
        pass
    else:
        # 已经登录成功的用户session肯定有值,没有值的就是未登录
        session = web_helper.get_session()
        # 获取用户id
        manager_id = session.get('id', 0)
        login_name = session.get('login_name', 0)
        # 判断用户是否登录
        if not manager_id or not login_name:
            web_helper.return_raise(
                web_helper.return_msg(-404, "您的登录已失效,请重新登录"))
Exemple #5
0
def validate():
    """使用勾子处理接口访问事件"""
    r = request

    # 获取路径
    path_info = request.environ.get('PATH_INFO')
    # 记录参数
    # 图标等不用处理 直接返回
    if path_info in ['/favicon.ico', '/', '/api/verify/']:
        return
    request_log = 'url:' + path_info + ';ip:' + web_helper.get_ip()
    try:
        if request.json:
            request_log = request_log + ';params(json):' + urllib.parse.unquote(
                str(request.json))
    except:
        pass
    try:
        if request.query_string:
            request_log = request_log + ';params(get):' + request.query_string
        if request.method == 'POST':
            request_log = request_log + ';params(post):' + urllib.parse.unquote(
                str(request.params.__dict__))
        log_helper.info(request_log)
        print(request_log)
    except:
        pass

    # put等方法特殊处理
    if request.method == 'POST':
        _method = web_helper.get_form('_method', False)
        if _method:
            # if request.POST.get('_method'):
            request.environ[
                'REQUEST_METHOD'] = _method  #request.POST.get('_method', '')
            print('_method:' + _method + '|')
        # elif request.json.get()
    # 登录验证
    url_list = ["/api/login/", "/api/logout/"]
    if path_info in url_list:
        return
    else:
        s = str(api.__dict__)
        session = web_helper.get_session()
        # 获取用户id
        manager_id = session.get('id', 0)
        login_name = session.get('login_name', 0)
        print('manager_id:' + str(manager_id) + 'login_name:' +
              str(login_name))
        # 判断用户是否登录
        # if not manager_id or not login_name:
        #     web_helper.return_raise(web_helper.return_msg(-404, "您的登录已失效,请重新登录"))
        print(4)
def push(key, value):
    """
    添加数据到队列头部
    :param key: 缓存key,字符串,不区分大小写
    :param value: 要存储的值
    """
    # 将key转换为小写字母
    key = str(key).lower()
    try:
        r.lpush(key, value)
    except Exception as e:
        log_helper.info('写缓存失败:key(' + key + ')' + str(e.args))
        pass
def delete(key):
    """
    删除缓存
    :param key:缓存key,字符串,不区分大小写
    :return:
    """
    # 将key转换为小写字母
    key = str(key).lower()
    try:
        log_helper.info(str(r.delete(key)))
    except Exception as e:
        log_helper.info('Exception:' + str(e.args))
        pass
Exemple #8
0
def get_file_size(filePath):
    """
    读取文件大小
    :param filePath: 文件存储路径
    :return:
    """
    if not exists(filePath):
        return 0
    try:
        return os.path.getsize(filePath)
    except Exception as e:
        log_helper.info(str(e))
        return 0
def pop(key):
    """
    从缓存队列的后尾读取一条数据
    :param key: 缓存key,字符串,不区分大小写
    :return: 缓存数据
    """
    # 将key转换为小写字母
    key = str(key).lower()
    try:
        value = r.rpop(key)
    except Exception as e:
        log_helper.info('读取缓存队列失败:key(' + key + ')' + str(e.args))
        value = None

    return _str_to_json(value)
Exemple #10
0
def set(key, value, time=86400):
    """
    写缓存
    :param key: 缓存key,字符串,不区分大小写
    :param value: 要存储的值
    :param time: 缓存过期时间(单位:秒),0=永不过期
    :return:
    """
    # 将key转换为小写字母
    key = str(key).lower()
    try:
        r.set(key, value, time)
    except Exception as e:
        log_helper.info('写缓存失败:key(' + key + ')' + str(e.args))
        pass
Exemple #11
0
    def execute(self, query, vars=None):
        """执行sql语句查询,返回结果集或影响行数"""
        if not query:
            return None
        # 记录程序执行开始时间
        start_time = time.clock()
        try:
            # 判断是否记录sql执行语句
            if self.is_output_sql:
                log_helper.info('sql:' + str(query))
            # 建立游标
            self.cursor = self.connect.cursor()
            # 执行SQL
            result = self.cursor.execute(query, vars)
            print(str(result))
        except Exception as e:
            # 将异常写入到日志中
            log_helper.error('sql执行失败:' + str(e.args) + ' query:' + str(query))
            self.data = None
        else:
            # 获取数据
            try:
                if self.cursor.description:
                    # 在执行insert/update/delete等更新操作时,如果添加了returning,则读取返回数据组合成字典返回
                    self.data = [
                        dict((self.cursor.description[i][0], value)
                             for i, value in enumerate(row))
                        for row in self.cursor.fetchall()
                    ]
                else:
                    # 如果执行insert/update/delete等更新操作时没有添加returning,则返回影响行数,值为0时表时没有数据被更新
                    self.data = self.cursor.rowcount
            except Exception as e:
                # 将异常写入到日志中
                log_helper.error('数据获取失败:' + str(e.args) + ' query:' +
                                 str(query))
                self.data = None
        finally:
            # 关闭游标
            self.cursor.close()
        # 记录程序执行结束时间
        end_time = time.clock()
        # 写入日志
        self.write_log(start_time, end_time, query)

        # 如果有返回数据,则把该数据返回给调用者
        return self.data
Exemple #12
0
from config import redis_config

# 设置redis配置参数
_redis = redis_config.REDIS
# 初始化Redis缓存链接
r = None
try:
    if not r:
        r = redis.Redis(host=_redis.get('server', ''),
                        port=_redis.get('post', ''),
                        db=_redis.get('db', ''),
                        password=_redis.get('pwd', ''),
                        socket_timeout=1,
                        socket_connect_timeout=1)
except Exception as e:
    log_helper.info('连接redis出错:(' + str(_redis) + ')' + str(e.args))
    pass


def set(key, value, time=86400):
    """
    写缓存
    :param key: 缓存key,字符串,不区分大小写
    :param value: 要存储的值
    :param time: 缓存过期时间(单位:秒),0=永不过期
    :return:
    """
    # 将key转换为小写字母
    key = str(key).lower()
    try:
        r.set(key, value, time)
Exemple #13
0
 def write_log(self, start_time, end_time, sql):
     """记录Sql执行超时日志"""
     t = end_time - start_time
     if (t) > 0.1:
         content = ' '.join(('run time:', str(t), 's sql:', sql))
         log_helper.info(content)