コード例 #1
0
 def process_response(self, request, response):
     if request.user.is_authenticated:
         conn = get_redis_connection('online_user')
         last_time = time.strftime('%Y-%m-%d %H:%M:%S',
                                   time.localtime(time.time()))
         request_ip = get_request_ip(request)
         # redis + django orm 实现在线用户监测
         if conn.exists(f'online_user_{request.user.id}_{request_ip}'):
             conn.hset(f'online_user_{request.user.id}_{request_ip}',
                       'last_time', last_time)
         else:
             online_info = {
                 'ip': request_ip,
                 'browser': get_request_browser(request),
                 'os': get_request_os(request),
                 'last_time': last_time
             }
             conn.hmset(f'online_user_{request.user.id}_{request_ip}',
                        online_info)
             if not OnlineUsers.objects.filter(user=request.user,
                                               ip=request_ip).exists():
                 OnlineUsers.objects.create(**{
                     'user': request.user,
                     'ip': request_ip
                 })
         # key过期后, 使用redis空间通知, 使用户下线
         conn.expire(f'online_user_{request.user.id}_{request_ip}', 10 * 60)
     return response
コード例 #2
0
 def process_request(self, request):
     request_ip = get_request_ip(request)
     # 在redis中判断IP是否在IP黑名单中/
     conn = get_redis_connection('user_info')
     if conn.sismember('ip_black_list', request_ip):
         from django.http import HttpResponse
         return HttpResponse('IP已被拉入黑名单, 请联系管理员', status=status.HTTP_400_BAD_REQUEST)
コード例 #3
0
ファイル: middleware.py プロジェクト: liu3734/drf_admin
    def __call__(self, request):
        try:
            request_body = json.loads(request.body)
        except Exception:
            request_body = dict()
        if request.method == "GET":
            request_body.update(dict(request.GET))
            logger = self.query_logger
        else:
            request_body.update(dict(request.POST))
            logger = self.operation_logger
        # 处理密码, log中密码已******替代真实密码
        for key in request_body:
            if 'password' in key:
                request_body[key] = '******'
        response = self.get_response(request)
        try:
            response_body = response.data
            # 处理token, log中token已******替代真实token值
            if response_body['data'].get('token'):
                response_body['data']['token'] = '******'
        except Exception:
            response_body = dict()

        request_ip = get_request_ip(request)
        log_info = f'[{request.user}@{request_ip} [Request: {request.method} {request.path} {request_body}] ' \
                   f'[Response: {response.status_code} {response.reason_phrase} {response_body}]]'
        if response.status_code >= 500:
            logger.error(log_info)
        elif response.status_code >= 400:
            logger.warning(log_info)
        else:
            logger.info(log_info)
        return response
コード例 #4
0
def write_error_logs(exc, context, detail):
    """
    记录错误日志信息
    :param exc: 异常
    :param context: 抛出异常的上下文
    :param detail: 异常详情
    :return:
    """
    data = {
        'username': context['request'].user.username if context['request'].user.username else 'AnonymousUser',
        'view': context['view'].get_view_name(),
        'desc': exc.__str__(),
        'ip': get_request_ip(context['request']),
        'detail': detail
    }
    ErrorLogs.objects.create(**data)
コード例 #5
0
 def process_response(self, request, response):
     if request.user.is_authenticated:
         conn = get_redis_connection('online_user')
         last_time = time.strftime('%Y-%m-%d %H:%M:%S',
                                   time.localtime(time.time()))
         if conn.exists(f'online_user_{request.user.id}'):
             conn.hset(f'online_user_{request.user.id}', 'last_time',
                       last_time)
         else:
             online_info = {
                 'ip': get_request_ip(request),
                 'browser': get_request_browser(request),
                 'os': get_request_os(request),
                 'last_time': last_time
             }
             conn.hmset(f'online_user_{request.user.id}', online_info)
         conn.expire(f'online_user_{request.user.id}', 60 * 10)
     return response