包含标识的曲线图

<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))

 

posted @ 2020-08-12 16:54  神经男孩  阅读(182)  评论(0)    收藏  举报