示例#1
0
文件: views.py 项目: QQ304988350/on
def show_goal_share(request, pk):
    user = request.session['user']
    wechat_config = get_wechat_config(request)
    sub_models = get_son_models(Goal)
    goal = None
    for sub_model_key in sub_models:
        query = sub_models[sub_model_key].objects.filter(
            user_id=user.user_id).filter(goal_id=pk)
        if query:
            goal = query[0]
            break
    if goal:
        # 跑步自由模式
        if goal.activity_type == RunningGoal.get_activity(
        ) and goal.goal_type == 0:
            goal_intro = "在{0}天内累计跑步{1}km".format(goal.goal_day,
                                                  goal.goal_distance)
        elif goal.activity_type == RunningGoal.get_activity():
            goal_intro = "在{0}天内每天跑步{1}km".format(goal.goal_day,
                                                  goal.kilos_day)
        elif goal.activity_type == ReadingGoal.get_activity():
            goal_intro = "在30天内阅读完书籍《{0}》".format(goal.book_name)
        elif goal.activity_type == SleepingGoal.get_activity():
            goal_intro = "在{0}天内每天早上{1}前起床".format(
                goal.goal_day, goal.getup_time.strftime("%H:%M"))
        else:
            goal_intro = ""
        return render(
            request, 'goal/share.html', {
                "WechatJSConfig": wechat_config,
                "goal_intro": goal_intro,
                "activity": goal.activity_type
            })
    else:
        return HttpResponseNotFound
示例#2
0
def show_activities(request):
    user = request.session["user"]
    # 查询当前用户的次数数据
    record = Tutorial.objects.filter(user_id=user.user_id)
    if len(record) == 0:
        # 创建用户教程表,记录用户是第几次进入平台的
        Tutorial.objects.create(user_id=user.user_id)
    else:
        pass

    record = Tutorial.objects.filter(user_id=user.user_id)
    if record:
        times = record[0].times_in_homepage
    else:
        times = None
    activities = Activity.objects.all().order_by("-activity_type")
    # TODO: fake
    # activities = fake_data(activities)
    return render(
        request, 'activity/index.html', {
            'activities': activities,
            "user_id": user.user_id,
            "times": times,
            "WechatJSConfig": get_wechat_config(request)
        })
示例#3
0
def share(request):
    user_id = request.GET.get("user_id")
    wechat_config = get_wechat_config(request)
    user = UserInfo.objects.get(user_id=user_id)
    nickname = user.nickname
    imgUrl = user.headimgurl
    ticket = user_qrcode(user.user_id)
    url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket={}".format(
        ticket)
    context = {
        "user_id": user_id,
        "wechat_config": wechat_config,
        "nickname": nickname,
        "imgUrl": imgUrl,
        "url": url
    }
    return render(request, 'user/share.html', context)
示例#4
0
def share_qrcode(request):
    try:
        user_id = request.GET.get("user_id")
        wechat_config = get_wechat_config(request)
        user = UserInfo.objects.get(user_id=user_id)
        nickname = user.nickname
        imgUrl = user.headimgurl
        url = "/static/qrcode/{}.jpg".format(user_id)
        context = {
            "user_id": user_id,
            "wechat_config": wechat_config,
            "nickname": nickname,
            "imgUrl": imgUrl,
            "url": url
        }
        return render(request, 'user/share.html', context)
    except Exception as e:
        print('分享二维码失败{}'.format(e))
示例#5
0
def show_reading_goal(request, pk):
    user = request.session['user']
    goal_id = pk
    goal = ReadingGoal.objects.filter(goal_id=goal_id).filter(
        activity_type=ReadingGoal.get_activity()).first()
    if goal:
        if goal.status != "ACTIVE":
            return render(request, 'goal/finish.html', {
                'goal': goal,
                'goal_type': ReadingGoal.get_activity()
            })
        else:
            # 天数
            dates_inform = get_days(goal)
            # 查询 Activity 相关的活动信息, 找到第一个符合类型要求且在进行中的活动
            app = Activity.objects.get_active_activity(
                activity_type=ReadingGoal.get_activity())
            person_goals = ReadingGoal.objects.filter(status="ACTIVE")[:5]
            persons = set()
            # TODO:FAKE
            app = fake_data([app])[0]
            for person_goal in person_goals:
                persons.add(UserInfo.objects.get(user_id=person_goal.user_id))

            return render(
                request, "goal/reading.html", {
                    "WechatJSConfig": get_wechat_config(request),
                    "app": app,
                    "goal": goal,
                    "datesinform": dates_inform,
                    "notice":
                    UserAddress.objects.address_is_complete(user=user),
                    "persons": persons,
                })
    else:
        return page_not_found(request)
示例#6
0
def show_riding_goal(request, pk):
    print('进入骑行活动')
    # 开始
    user = request.session["user"]
    goal_id = pk
    print('goal_id', pk)
    goal = RidingGoal.objects.filter(goal_id=goal_id).filter(
        activity_type=RidingGoal.get_activity()).first()
    if goal:
        if goal.status != "ACTIVE":
            return render(
                request, 'goal/riding.html', {
                    'goal': goal,
                    'goal_type': RidingGoal.get_activity(),
                    "headimg": user.headimgurl
                })
        else:
            # 免签券数量查询
            nosign_ticket = UserTicket.objects.get_nosigned_tickets(
                goal_id=goal_id)
            # 天数
            dates_inform = get_days(goal)
            # 查询 Activity 相关的活动信息, 找到第一个符合类型要求且在进行中的活动
            app = Activity.objects.get_active_activity(
                activity_type=RidingGoal.get_activity())
            # TODO:FAKE
            # app = fake_data([app])[0]
            # 查询 Activity 相关的头像信息
            person_goals = RidingGoal.objects.filter(status="ACTIVE")[:10]
            persons = set()
            for person_goal in person_goals:
                persons.add(UserInfo.objects.get(user_id=person_goal.user_id))
            # 随机查询24小时内存在的打卡记录,展示在本页面中
            # lastday, today = timezone.now() - timedelta(days=1), timezone.now()
            lastday = timezone.now() - timedelta(days=1)
            today = timezone.now()
            random_records = RidingPunchRecord.objects.filter(
                record_time__range=(lastday,
                                    today)).order_by("-record_time")[:20]

            # activate_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
            # 获取邀请了多少好友
            # num = UserInvite.objects.filter(user_id=request.session["user"].user_id).count()

            obj = RidingGoal.objects.filter(user_id=user.user_id,
                                            status="ACTIVE")[0]
            # 该活动的打卡天数
            punch_day = obj.punch_day
            # 该活动的额外收益
            extra_earn = obj.extra_earn
            a = goal.start_time.strftime("%Y-%m-%d")
            user_end_time = (goal.start_time +
                             timedelta(days=1)).strftime("%Y-%m-%d")
            # if len(RunningPunchRecord.objects.filter(goal_id=goal_id, record_time__range=(a, user_end_time))) > 0:
            #     first_day_record = 1
            # else:
            #     first_day_record = 0

            news = []
            for record in random_records:
                voucher_ref_list = record.voucher_ref.split(",")
                userinfo = UserInfo.objects.get(user_id=record.goal.user_id)
                # reply = RunReply.objects.filter(other_id=str(record.punch_id).replace("-","")).order_by('-id')
                # response = [{"content": i.r_content, "user_id": i.user_id, "nickname": i.get_user_message.nickname} for
                #             i in reply] if len(reply) > 0 else ""
                document = record.document
                # report = RunningPunchReport.objects.filter(punch_id=record.punch_id).filter(user_id=user.user_id)
                # is_no_report = 1 if report else 0
                # praise = RunningPunchPraise.objects.filter(punch_id=record.punch_id).filter(user_id=user.user_id)
                # is_no_praise=1 if praise else 0
                record_time = record.record_time
                dis_day = "今日" if record_time.day == today.day else "昨日"
                dis_date = "%s %s:%02d" % (dis_day, record_time.hour,
                                           record_time.minute)
                news.append({
                    "headimage": userinfo.headimgurl,
                    "date": dis_date,
                    "distance": record.distance,
                    # "praise": record.praise,
                    # "report": record.report,
                    'reload': record.reload,
                    # 'is_no_report': is_no_report,
                    # 'is_no_praise': is_no_praise,
                    "name": userinfo.nickname,
                    "voucher_ref": voucher_ref_list,
                    "punch_id": record.punch_id,
                    "document": document,
                    'test': timezone.now(),
                    # "reply_data":response,
                })
            if app:
                return render(
                    request,
                    "goal/riding.html",
                    {
                        "WechatJSConfig": get_wechat_config(request),
                        "app": app,
                        "goal": goal,
                        # "invite_num": num,
                        'nosign': nosign_ticket,
                        "datesinform": dates_inform,
                        "extra_earn": extra_earn,
                        "persons": persons,
                        "news": news,
                        'nickname': user.nickname,
                        "punch_day": punch_day,
                        # "first_day_record": first_day_record
                        # "punch_id":punch_record
                    })
            else:
                return page_not_found(request)
    else:
        return page_not_found(request)
示例#7
0
def show_reading_goal(request, pk):
    from on.activities.reading.models import Comments, Reply

    user = request.session["user"]
    goal_id = pk

    read = ReadingGoal.objects.filter(goal_id=goal_id).filter(activity_type=ReadingGoal.get_activity()).first()
    readinginfo = BookInfo.objects.get_book_info(book_id=1)
    # user = UserInfo.objects.filter(user_id=user.user_id)[0]
    # user = UserInfo.objects.get(user_id=user.user_id)
    if read:
        if read.status == "SUCCESS" or read.status == "FAILED":
            return render(request, 'goal/finish.html',
                          {
                              'goal': read,
                              'goal_type': ReadingGoal.get_activity(),
                              "headimg": user.headimgurl
                          })
        elif read.status == "ACTIVE":
            # 天数.
            dates_inform = get_days(read, goal_id)
            state = ReadTime.objects.get_reading_state(user_id=user.user_id)
            time_range = ReadTime.objects.filter(user_id=user.user_id)[0]
            # 查询 Activity 相关的活动信息, 找到第一个符合类型要求且在进行中的活动
            app = Activity.objects.get_active_activity(activity_type=ReadingGoal.get_activity())
            person_goals = ReadingGoal.objects.filter(status="ACTIVE")[:5]
            persons = set()
            # TODO:FAKE
            # app = fake_data([app])[0]
            confirm = UserOrder.objects.filter(user_id=user.user_id, goal_id=goal_id)
            if confirm:
                is_no_confirm = confirm[0].is_no_confirm
            elif read.is_start == 1:
                is_no_confirm = 1
            else:
                is_no_confirm = None
            for person_goal in person_goals:
                persons.add(UserInfo.objects.get(user_id=person_goal.user_id))

            owen = Comments.objects.filter(user_id=user.user_id).order_by("-c_time")
            comment_obj = Comments.objects.filter(is_delete=0,is_top=1).order_by("-c_time")
            datas = []
            for comment in comment_obj:
                report = ReadingPunchReport.objects.filter(punch_id=comment.id,user_id=user.user_id)
                reply = Reply.objects.filter(other_id=comment.id).order_by('id')
                response = [{"content": i.r_content, "other_id": i.user_id, "nickname": i.get_user_message.nickname} for
                            i in reply] if len(reply) > 0 else ""
                is_no_report = 1 if len(report) > 0 else 0
                prise = ReadingPunchPraise.objects.filter(punch_id=comment.id,user_id=user.user_id)
                is_no_prise = 1 if len(prise) > 0 else 0
                ref = comment.voucher_ref.split(",") if len(comment.voucher_ref) > 0 else ""
                top = comment.is_top
                if top == 0:
                    datas.append({
                        "id": comment.id,
                        'user_id': comment.user_id,
                        "content": comment.content,
                        "c_time": comment.c_time,
                        "prise": comment.prise,
                        "report": comment.report,
                        "voucher_ref": ref,
                        "is_delete": comment.is_delete,
                        "is_top": comment.is_top,
                        "headimgurl": comment.get_some_message.headimgurl,
                        "nickname": comment.get_some_message.nickname,
                        "is_no_report": is_no_report,
                        "is_no_prise": is_no_prise,
                        "reply_data": response
                    })
                else:
                    datas = []
            return render(request, "goal/reading.html",
                          {
                              "WechatJSConfig": get_wechat_config(request),
                              "app": app,
                              "goal": read,
                              "datesinform": dates_inform,
                              "notice": UserAddress.objects.address_is_complete(user=user),
                              "persons": persons,
                              "book_id": read.book_id,
                              "is_start": read.is_start,
                              "readinginfo": readinginfo,
                              "state": state,
                              "time_range": timezone.now() - time_range.start_read,
                              "is_no_confirm": is_no_confirm,
                              "user_comments": owen,
                              "datas": datas,
                              "nickname": user.nickname
                          })
        else:
            app = Activity.objects.get_active_activity(activity_type=ReadingGoal.get_activity())
            # 用户头像
            person_goals = ReadingGoal.objects.filter(status="ACTIVE")[:5]
            persons = set()
            # TODO:FAKE
            for person_goal in person_goals:
                persons.add(UserInfo.objects.get(user_id=person_goal.user_id))
            context = {
                "WechatJSConfig": get_wechat_config(request),
                "readinginfo": readinginfo,
                "app": app,
                "balance": user.balance,
                "user_id":user.user_id
            }
            return render(request, "activity/reading.html", context)
    else:
        app = Activity.objects.get_active_activity(activity_type=ReadingGoal.get_activity())
        # 用户余额
        # 用户头像
        person_goals = ReadingGoal.objects.filter(status="ACTIVE")[:5]
        persons = set()
        # TODO:FAKE
        for person_goal in person_goals:
            persons.add(UserInfo.objects.get(user_id=person_goal.user_id))

        context = {
            "WechatJSConfig": get_wechat_config(request),
            "readinginfo": readinginfo,
            "app": app,
            "balance": user.balance
        }
        return render(request, "activity/reading.html", context)
示例#8
0
def show_sleeping_goal(request, pk):
    from on.activities.sleeping.models import Coefficient
    # goal_id = pk
    goal = SleepingGoal.objects.filter(goal_id=pk).filter(activity_type=SleepingGoal.get_activity()).first()
    user = request.session['user']
    user_id = user.user_id
    print_test()
    if goal:
        if goal.status != "ACTIVE":
            return render(request, 'goal/finish.html',
                          {
                              'goal': goal,
                              'goal_type': SleepingGoal.get_activity(),
                              "headimg":user.headimgurl
                          })
        else:
            # 天数
            sleep_type = goal.sleep_type
            dates_inform = get_days(goal,sleep_type)
            # 查询 Activity 相关的活动信息, 找到第一个符合类型要求且在进行中的活动
            app = Activity.objects.get_active_activity(activity_type=SleepingGoal.get_activity())
            new_coeff = 0
            default = 0
            extra_coeff=0
            try:
                coeff = Coefficient.objects.get(user_id=user_id)
                default = coeff.default_coeff
                new_coeff = coeff.new_coeff
                if new_coeff:
                    extra_coeff = (new_coeff-default)/default*decimal.Decimal(100)
                    if extra_coeff >0:
                        extra_coeff  = "+%2d"%extra_coeff+"%"
                    elif extra_coeff <0:
                        extra_coeff = "%2d"%extra_coeff+"%"
                    else:
                        pass
                else:
                    extra_coeff =""
            except Coefficient.DoesNotExist as e:
                print(e)
            # 查询头像
            person_goals = SleepingGoal.objects.filter(status="ACTIVE")[:5]
            persons = set()
            for person_goal in person_goals:
                persons.add(UserInfo.objects.get(user_id=person_goal.user_id))
            # datas = comment_all(user=user)
            return render(request, "goal/sleeping.html",
                          {
                              "app": app,
                              "WechatJSConfig": get_wechat_config(request),
                              "goal": goal,
                              "nickname": user.nickname,
                              "datesinform": dates_inform,
                              "new_coeff":new_coeff,
                              # "getuptime": goal.getup_time.strftime("%H:%M"),
                              "persons": persons,
                              "datas": comment_all(user=user),
                              "default":default,
                              "extra_coeff":extra_coeff
                          })
    else:
        return page_not_found(request)
示例#9
0
 def warpper(request, *args, **kwargs):
     if settings.DEBUG:
         user_info = {
             "openid":
             "o0jd6wtPNYaqn08CXQvtStOC-Vfw",
             "nickname":
             "",
             "sex":
             "1",
             "headimgurl":
             "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
         }
         wechat_id = user_info["openid"]
         user = UserInfo.objects.check_user(wechat_id)
         if not user:
             user = UserInfo.objects.create_user(user_info["openid"],
                                                 user_info["nickname"],
                                                 user_info["headimgurl"],
                                                 int(user_info["sex"]))
         request.session['user'] = user
         return method(request, *args, **kwargs)
     else:
         if request.session.get('user', False):
             return method(request, *args, **kwargs)
         if request.method == 'GET':
             code = request.GET['code'] if 'code' in request.GET else None
             oauthClient.redirect_uri = settings.HOST + request.get_full_path(
             )
             # 如果有授权code, 说明是重定向后的页面
             if code:
                 # 利用code来换取网页授权的access_token
                 oauthClient.fetch_access_token(code=code)
                 # 如果access_token有效,则进行下一步
                 if not oauthClient.check_access_token():
                     redirect_url = oauthClient.authorize_url
                     return redirect(redirect_url)
                 else:
                     pass
                 # 利用access_token获取用户信息
                 try:
                     user_info = client.user.get(
                         user_id=oauthClient.open_id)
                     wechat_id = user_info["openid"]
                     # 如果微信号不存在,则新建一个用户
                     user = UserInfo.objects.check_user(wechat_id)
                     if not user:
                         user = UserInfo.objects.create_user(
                             user_info["openid"], user_info["nickname"],
                             user_info["headimgurl"], int(user_info["sex"]))
                 except Exception as e:
                     print(e, '创建用户失败')
                     try:
                         usid = request.GET.get("usid", "")
                         if usid:
                             wechat_config = get_wechat_config(request)
                             user = UserInfo.objects.get(user_id=usid)
                             nickname = user.nickname
                             imgUrl = user.headimgurl
                             url = "/static/qrcode/{}.jpg".format(usid)
                             context = {
                                 "user_id": usid,
                                 "wechat_config": wechat_config,
                                 "nickname": nickname,
                                 "imgUrl": imgUrl,
                                 "url": url
                             }
                             return render(request, 'user/share.html',
                                           context)
                         else:
                             return render(request, 'on_qrcode.html')
                     except Exception as e:
                         print('分享二维码失败{}'.format(e))
                 else:
                     request.session['user'] = user
                     return method(request, *args, **kwargs)
             # 否则直接到重定向后的页面去
             else:
                 redirect_url = oauthClient.authorize_url
                 return redirect(redirect_url)
         else:
             return method(request, *args, **kwargs)
示例#10
0
def show_specific_activity(request, pk):
    user = request.session.get("user")

    activity = Activity.objects.get(activity_id=pk)
    # 余额
    balance = UserInfo.objects.get(user_id=user.user_id).balance
    # TODO:FakeDATA
    # activity = fake_data([activity])[0]
    # TODO
    if not settings.DEBUG:
        user = request.session['user']
        sub_models = get_son_models(Goal)
        for sub_model_key in sub_models:
            sub_model = sub_models[sub_model_key]
            goal = sub_model.objects.filter(user_id=user.user_id).filter(
                activity_type=activity.activity_type)
            if goal:
                goal = goal.first()
                if goal.status != "PENDING":
                    redirect_url = '/goal/{0}?activity_type={1}'.format(
                        goal.goal_id, activity.activity_type)
                    return HttpResponseRedirect(redirect_url)
                else:
                    pass
    else:
        user = request.session['user']
        sub_models = get_son_models(Goal)
        for sub_model_key in sub_models:
            sub_model = sub_models[sub_model_key]
            goal = sub_model.objects.filter(user_id=user.user_id).filter(
                activity_type=activity.activity_type)
            if goal:
                goal = goal.first()
                if goal.status != "PENDING":
                    redirect_url = '/goal/{0}?activity_type={1}'.format(
                        goal.goal_id, activity.activity_type)

                    return HttpResponseRedirect(redirect_url)

                else:
                    pass

    # 专门为读书设立的字段
    readinginfo = BookInfo.objects.get_book_info(book_id=1)
    person_goals = []
    if activity.activity_type == ReadingGoal.get_activity():
        person_goals = ReadingGoal.objects.filter(status="ACTIVE")[:5]
    elif activity.activity_type == SleepingGoal.get_activity():
        person_goals = SleepingGoal.objects.filter(status="ACTIVE")[:5]
    elif activity.activity_type == RunningGoal.get_activity():
        person_goals = RunningGoal.objects.filter(status="ACTIVE")[:5]
    elif activity.activity_type == WalkingGoal.get_activity():
        person_goals = WalkingGoal.objects.filter(status="ACTIVE")[:5]
    # 生成一个persons集合
    persons = set()
    for person_goal in person_goals:
        persons.add(UserInfo.objects.get(user_id=person_goal.user_id))
    record = Tutorial.objects.filter(user_id=user.user_id)
    times = record[0].times_in_read if record else None

    return render(
        request,
        'activity/{0}'.format(mappings[activity.activity_type]),
        {
            "app": activity,
            "readinginfo": readinginfo,
            "WechatJSConfig": get_wechat_config(request),
            "persons": persons,
            "DEBUG": settings.DEBUG,
            "balance": balance,
            "times": times,
            "user_id": user.user_id,
            # "user_comments": owen,
            "user": user
        })
示例#11
0
文件: views.py 项目: QQ304988350/on
def show_specific_activity(request, pk):
    user = request.session['user']
    print("当前登录的用户是{},用户id是:{}".format(user.nickname, user.user_id))
    activity = Activity.objects.get(activity_id=pk)
    # 余额
    balance = UserInfo.objects.get(user_id=user.user_id).balance
    # TODO:FakeDATA
    activity = fake_data([activity])[0]
    # TODO
    if not settings.DEBUG:
        user = request.session['user']
        sub_models = get_son_models(Goal)
        for sub_model_key in sub_models:
            sub_model = sub_models[sub_model_key]
            goal = sub_model.objects.filter(user_id=user.user_id).filter(
                activity_type=activity.activity_type)
            if goal:
                goal = goal.first()
                if goal.status != "PENDING":
                    redirect_url = '/goal/{0}?activity_type={1}'.format(
                        goal.goal_id, activity.activity_type)
                    return HttpResponseRedirect(redirect_url)
                else:
                    pass
    else:
        user = request.session['user']
        sub_models = get_son_models(Goal)
        for sub_model_key in sub_models:
            sub_model = sub_models[sub_model_key]
            goal = sub_model.objects.filter(user_id=user.user_id).filter(
                activity_type=activity.activity_type)
            if goal:
                goal = goal.first()

                if goal.status != "PENDING":
                    redirect_url = '/goal/{0}?activity_type={1}'.format(
                        goal.goal_id, activity.activity_type)

                    return HttpResponseRedirect(redirect_url)

                else:
                    pass

    # 专门为读书设立的字段
    readinginfo = {
        'title': '你的生命有什么可能',
        'intro':
        '本书探讨了以下问题:高竞争的工作、高不可攀的房价和房租、 拥挤的交通、糟糕的空气、不安全的食品……在竭尽全力才能生存的时代,年轻人如何追求自己的梦想?在这样的时代,我们的生命又有什么可能?如何才能越过现实和理想的鸿沟,找到和进入自己希望的人生?如何修炼自己在现实中活得更好的能力?如何在现实之中发展自己的兴趣?如何连接现实和理想?如何面对生命里的苦难、贫穷、不完美或者不公正?如何获得心灵的自由?',
        'imageurl': '/static/images/reading_book_demo.png',
        'price': 35,
        'return': 20,
        'guaranty': 30,
        'page': 315
    }
    if activity.activity_type == ReadingGoal.get_activity():
        person_goals = ReadingGoal.objects.filter(status="ACTIVE")[:5]
    elif activity.activity_type == SleepingGoal.get_activity():
        person_goals = SleepingGoal.objects.filter(status="ACTIVE")[:5]
    else:
        person_goals = RunningGoal.objects.filter(status="ACTIVE")[:5]
    # 生成一个persons集合
    persons = set()
    for person_goal in person_goals:
        persons.add(UserInfo.objects.get(user_id=person_goal.user_id))

    return render(
        request, 'activity/{0}'.format(mappings[activity.activity_type]), {
            "app": activity,
            "readinginfo": readinginfo,
            "WechatJSConfig": get_wechat_config(request),
            "persons": persons,
            "DEBUG": settings.DEBUG,
            "balance": balance
        })