diff --git a/dvadmin-backend/apps/vadmin/op_drf/middleware.py b/dvadmin-backend/apps/vadmin/op_drf/middleware.py
index 8b37b53..8deb8eb 100644
--- a/dvadmin-backend/apps/vadmin/op_drf/middleware.py
+++ b/dvadmin-backend/apps/vadmin/op_drf/middleware.py
@@ -33,6 +33,8 @@ class ApiLoggingMiddleware(MiddlewareMixin):
         # 请求含有password则用*替换掉(暂时先用于所有接口的password请求参数)
         if isinstance(body, dict) and body.get('password', ''):
             body['password'] = '*' * len(body['password'])
+        if not hasattr(response, 'data') or not isinstance(response.data, dict):
+            response.data = {}
         info = {
             'request_ip': getattr(request, 'request_ip', 'unknown'),
             'creator': request.user,
diff --git a/dvadmin-backend/apps/vadmin/system/serializers.py b/dvadmin-backend/apps/vadmin/system/serializers.py
index 89e490a..ca1b409 100644
--- a/dvadmin-backend/apps/vadmin/system/serializers.py
+++ b/dvadmin-backend/apps/vadmin/system/serializers.py
@@ -228,6 +228,7 @@ class LoginInforSerializer(CustomModelSerializer):
     """
     参数设置 简单序列化器
     """
+    creator_name = serializers.SlugRelatedField(slug_field="username", source="creator", read_only=True)
 
     class Meta:
         model = LoginInfor
@@ -254,6 +255,7 @@ class ExportOperationLogSerializer(CustomModelSerializer):
     导出 操作日志 简单序列化器
     """
     creator_name = serializers.SlugRelatedField(slug_field="username", source="creator", read_only=True)
+
     class Meta:
         model = OperationLog
         fields = ('request_modular', 'request_path', 'request_body', 'request_method', 'request_msg', 'request_ip',
diff --git a/dvadmin-backend/apps/vadmin/utils/request_util.py b/dvadmin-backend/apps/vadmin/utils/request_util.py
index 180c7ab..3de0db8 100644
--- a/dvadmin-backend/apps/vadmin/utils/request_util.py
+++ b/dvadmin-backend/apps/vadmin/utils/request_util.py
@@ -6,6 +6,7 @@ import logging
 
 from django.contrib.auth.models import AbstractBaseUser
 from django.contrib.auth.models import AnonymousUser
+from django.core.cache import cache
 from django.urls.resolvers import ResolverMatch
 from rest_framework.authentication import BaseAuthentication
 from rest_framework.settings import api_settings as drf_settings
@@ -165,12 +166,20 @@ def get_login_location(request, *args, **kwargs):
     """
     import requests
     import eventlet  # 导入eventlet这个模块
+    request_ip = get_request_ip(request)
+    # 从缓存中获取
+    location = cache.get(request_ip)
+    if location:
+        return location
+    # 通过api 获取,再缓存redis
     eventlet.monkey_patch(thread=False)  # 必须加这条代码
     with eventlet.Timeout(2, False):  # 设置超时时间为2秒
-        apiurl = "http://whois.pconline.com.cn/ip.jsp?ip=%s" % get_request_ip(request)
+        apiurl = "http://whois.pconline.com.cn/ip.jsp?ip=%s" % request_ip
         r = requests.get(apiurl)
         content = r.content.decode('GBK')
-        return content.replace('\r', '').replace('\n', '')
+        location = content.replace('\r', '').replace('\n', '')
+        cache.set(request_ip,location, 8640)
+        return location
     return ""
 
 
@@ -181,12 +190,15 @@ def get_verbose_name(queryset=None, view=None, model=None):
     :param view:
     :return:
     """
-    if queryset and hasattr(queryset, 'model'):
-        model = queryset.model
-    elif view and hasattr(view.get_queryset(), 'model'):
-        model = view.get_queryset().model
-    elif view and hasattr(view.get_serializer(), 'Meta') and hasattr(view.get_serializer().Meta, 'model'):
-        model = view.get_serializer().Meta.model
-    if model:
-        return getattr(model, '_meta').verbose_name
+    try:
+        if queryset and hasattr(queryset, 'model'):
+            model = queryset.model
+        elif view and hasattr(view.get_queryset(), 'model'):
+            model = view.get_queryset().model
+        elif view and hasattr(view.get_serializer(), 'Meta') and hasattr(view.get_serializer().Meta, 'model'):
+            model = view.get_serializer().Meta.model
+        if model:
+            return getattr(model, '_meta').verbose_name
+    except Exception as e:
+        pass
     return ""