You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
import csv
|
|
|
|
import codecs
|
|
|
|
from django.http import HttpResponse
|
|
|
|
|
|
|
|
from .const import DEFAULT_CITY
|
|
|
|
from common.utils import validate_ip, get_ip_city
|
|
|
|
|
|
|
|
|
|
|
|
def get_excel_response(filename):
|
|
|
|
excel_response = HttpResponse(content_type='text/csv')
|
|
|
|
excel_response[
|
|
|
|
'Content-Disposition'] = 'attachment; filename="%s"' % filename
|
|
|
|
excel_response.write(codecs.BOM_UTF8)
|
|
|
|
return excel_response
|
|
|
|
|
|
|
|
|
|
|
|
def write_content_to_excel(response, header=None, login_logs=None, fields=None):
|
|
|
|
writer = csv.writer(response, dialect='excel', quoting=csv.QUOTE_MINIMAL)
|
|
|
|
if header:
|
|
|
|
writer.writerow(header)
|
|
|
|
if login_logs:
|
|
|
|
for log in login_logs:
|
|
|
|
data = [getattr(log, field.name) for field in fields]
|
|
|
|
writer.writerow(data)
|
|
|
|
return response
|
|
|
|
|
|
|
|
|
|
|
|
def write_login_log(*args, **kwargs):
|
|
|
|
from audits.models import UserLoginLog
|
|
|
|
|
|
|
|
ip = kwargs.get('ip') or ''
|
|
|
|
if not (ip and validate_ip(ip)):
|
|
|
|
ip = ip[:15]
|
|
|
|
city = DEFAULT_CITY
|
|
|
|
else:
|
|
|
|
city = get_ip_city(ip) or DEFAULT_CITY
|
|
|
|
kwargs.update({'ip': ip, 'city': city})
|
|
|
|
UserLoginLog.objects.create(**kwargs)
|