<ol class="breadcrumb">
<li class="active">用户登录统计</li>
</ol>
<form class="form-inline" action="/super_manage/user_login_stats/" method="get"
style="margin-bottom: 10px">
<div class="form-group">
<label for="id_username">用户名</label>
<input type="text" class="form-control" id="id_username" name="username"
value="{{ username|default_if_none:'' }}" placeholder="用户名">
</div>
<div class="form-group">
<label for="id_start_date_start">登录时间</label>
<input type="text" class="form-control" id="id_start_date_start" name="start_date"
value="{{ start_date|date:'Y-m-d' }}" placeholder="开始时间" onclick="WdatePicker()">
</div>
<div class="form-group">
<label for="id_start_date_end">至</label>
<input type="text" class="form-control" id="id_start_date_end" name="end_date"
value="{{ end_date|date:'Y-m-d' }}" placeholder="结束时间" onclick="WdatePicker()">
</div>
<button type="submit" class="btn btn-primary">查询</button>
<div class="form-group" style="float:right;">
<a href="/super_manage/user_login_stats_detail/">用户登录统计详情</a>
</div>
</form>
<div id="container" style="min-width: 310px; height: 500px; margin: 0 auto"></div>
<script src="{{ STATIC_URL }}js/My97DatePicker/WdatePicker.js"></script>
<script src="{{ STATIC_URL }}highcharts-4.2.3/js/highcharts.js"></script>
<script src="{{ STATIC_URL }}highcharts-4.2.3/js/modules/exporting.js"></script>
<script type="text/javascript">
$(function () {
$("#nav_stats").addClass("active");
$("#nav_user_login_stats").addClass("active");
{% if error_msg %}
showMsg('{{ error_msg }}');
{% endif %}
var datas = [];
{% for day_user_num in day_user_nums %}
datas.push({{ day_user_num }});
{% endfor %}
var buyer_datas = [];
{% for day_buyer_num in day_buyer_nums %}
buyer_datas.push({{ day_buyer_num }});
{% endfor %}
var seller_datas = [];
{% for day_seller_num in day_seller_nums %}
seller_datas.push({{ day_seller_num }});
{% endfor %}
var start_date = new Date("{{ start_date|date:'Y-m-d' }}");
$('#container').highcharts({
credits: {
enabled: false
},
title: {
text: '用户登录统计',
x: -20 //center
},
subtitle: {
text: '{{ start_date|date:'Y-m-d' }}至{{ end_date|date:'Y-m-d' }}',
x: -20
},
xAxis: {
type: 'datetime',
dateTimeLabelFormats: {
day: '%d'
}
},
yAxis: {
title: {
text: '登录人数'
},
labels: {
format: '{value}人'
},
plotLines: [{
value: 0,
width: 1,
color: '#808080'
}]
},
tooltip: {
valueSuffix: '人',
dateTimeLabelFormats: {
day: '%Y-%m-%d'
}
},
series: [{
name: "{{ username|default:"全部用户" }}",
data: datas,
pointStart: Date.UTC(start_date.getUTCFullYear(), start_date.getUTCMonth(), start_date.getUTCDate()),
pointInterval: 24 * 3600 * 1000
},{
name: "买家",
data: buyer_datas,
pointStart: Date.UTC(start_date.getUTCFullYear(), start_date.getUTCMonth(), start_date.getUTCDate()),
pointInterval: 24 * 3600 * 1000
},{
name: "商家",
data: seller_datas,
pointStart: Date.UTC(start_date.getUTCFullYear(), start_date.getUTCMonth(), start_date.getUTCDate()),
pointInterval: 24 * 3600 * 1000
}]
});
});
</script>
@login_required_superuser
def user_login_stats(request):
"""
用户登录统计
:param request: Http请求
:return: Http响应
"""
results = dict()
username = request.GET.get('username')
# user_role = request.GET.get('user_role')
start_date = request.GET.get('start_date')
end_date = request.GET.get('end_date')
if start_date and end_date:
start_date = datetime.datetime.strptime(start_date, '%Y-%m-%d').date()
end_date = datetime.datetime.strptime(end_date, '%Y-%m-%d').date()
if start_date > end_date:
results['error_msg'] = '开始时间不能大于结束时间'
return render_to_response('super_manage/stats/user_login_stats.html', results,
context_instance=RequestContext(request))
else:
start_date = datetime.date.today() - datetime.timedelta(days=30)
end_date = datetime.date.today() - datetime.timedelta(days=1)
results['start_date'] = start_date
results['end_date'] = end_date
results['username'] = username
if username:
if not UserWeChat.objects.filter(nickname=username).exists():
results['error_msg'] = u'用户名:%s,不存在' % username
return render_to_response('super_manage/stats/user_login_stats.html', results,
context_instance=RequestContext(request))
day_share_nums = list()
day_seller_nums = list()
day_buyer_nums = list()
delta = datetime.timedelta(days=1)
while start_date <= end_date:
share_condition = dict()
buyer_condition = dict()
seller_condition = dict()
if username:
share_condition["nickname"]= username
buyer_condition["nickname"]= username
seller_condition["nickname"]= username
share_condition["login_time__gte"] = '%s 0:00:00' % start_date
buyer_condition["login_time__gte"] = '%s 0:00:00' % start_date
seller_condition["login_time__gte"] = '%s 0:00:00' % start_date
now_end_date = start_date + delta
share_condition["login_time__lte"] = '%s 0:00:00' % now_end_date
buyer_condition["login_time__lte"] = '%s 0:00:00' % now_end_date
seller_condition["login_time__lte"] = '%s 0:00:00' % now_end_date
buyer_condition["user_role"] = '买家'
seller_condition["user_role"] = '商家'
share_num = UserLogin.objects(**share_condition).distinct('user_id')
buyer_share_num = UserLogin.objects(**buyer_condition).distinct('user_id')
seller_share_num = UserLogin.objects(**seller_condition).distinct('user_id')
day_share_nums.append(len(share_num))
day_buyer_nums.append(len(buyer_share_num))
day_seller_nums.append(len(seller_share_num))
start_date += delta
results['day_user_nums'] = day_share_nums
results['day_buyer_nums'] = day_buyer_nums
results['day_seller_nums'] = day_seller_nums
return render_to_response('super_manage/stats/user_login_stats.html', results,
context_instance=RequestContext(request))