我正在开发一个中间件,它将用户的post,delete..记录在数据库表中。在
class APILogMiddleware(object):
"""
this middle ware will track all api actions
"""
def process_response(self, request, response):
"""
"""
url = request.path
try:
if 'HTTP_X_FORWARDED_FOR' in request.META:
ip_adds = request.META['HTTP_X_FORWARDED_FOR'].split(",")
ip_address = ip_adds[0]
else:
ip_address = request.META['REMOTE_ADDR']
user_id = request.user.id if request.user.is_authenticated() else None
browser = request.META.get('HTTP_USER_AGENT', '')
action = request.method
# convert request.REQUEST to dict
data = dict(request.REQUEST)
if 'files' in data:
data.pop("files", None)
print data
try:
response_data = dict(response.data)
except:
response_data = {}
if 'created_at' in response_data.keys():
response_data.pop('created_at')
# retrieve token http key
try:
token_string = request.META['HTTP_AUTHORIZATION']
token_string = token_string.replace('Token', '').strip()
token_string = token_string.replace('token', '').strip()
except KeyError:
token_string = None
log_aok_api_action.apply_async((user_id, ip_address, browser, url, action, data, response_data,
token_string), expires=60)
except ConnectionError as e:
pass
return response
在视图.py在
^{pr2}$当我进入主页时,我收到了一条错误消息,我尝试了json.dumps文件(响应_数据),并且有效。 但当我回答时json.dumps文件(响应数据) 然后我将这个json字符串传递到log-auk-yu-api_action.apply_异步它还是给我同样的错误。尴尬. 在
<django.utils.functional.__proxy__ object at 0xb4d713ec> is not JSON serializable
在模型.py在
class ApiLog(models.Model):
""" ApiLog
"""
user = models.BigIntegerField(_('User'), blank=True, null=True)
token = models.CharField(_('Token Key'), max_length=255, null=True, blank=True)
ip_address = models.IPAddressField()
browser = models.CharField(_('Browser'), max_length=256, null=True, blank=True)
url = models.CharField(_('URL'), max_length=256, null=True, blank=True)
action = models.CharField(_('Action'), max_length=100, null=True, blank=True)
data = JSONField(_('Data'), blank=True, null=True)
response_data = JSONField(_('Response Data'), blank=True, null=True)
country = models.CharField(_('Country'), max_length=100, null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
objects = ApiLogManager()
class Meta:
app_label = 'extra'
@property
def username(self):
return User.objects.get(id=self.user) if self.user else ''
def __str__(self):
# Use django.utils.encoding.force_bytes() because value returned is unicode
return force_bytes('user %s performed %s' % (self.user, self.action))
def __unicode__(self):
return u'user %s performed %s' % (self.user, self.action)
目前没有回答
相关问题 更多 >
编程相关推荐