コード例 #1
0
ファイル: views.py プロジェクト: alnsun/findRice
def publish_an_activity(request, action_id):
    activity = get_object_or_404(Activity, id=action_id)
    user = request.user
    if user != activity.host:
        return HttpResponseRedirect("/action/new/create/1")
    # act_info = request.session.get("activity_creation_info", "")
    # if get_activity_session_representation(activity) != act_info:
    # return HttpResponseRedirect("/action/new/create/1")

    q_id = request.session.get("questionnaire_id_tmp", -1)

    if request.method == "POST":
        activity.is_active = True
        activity.is_published = True
        activity.save()

        return JsonResponse({
            "success": True,
            "data": {
                "url": reverse('action:activity_detail', args=(action_id, ))
            }
        }, content_type='text/html')

    if Questionnaire.objects.filter(activity=activity, is_active=True).exists():
        questionnaire = Questionnaire.objects.filter(activity=activity, is_active=True)[0]
        single_choice_questions = ChoiceQuestion.objects.filter(questionnaire=questionnaire,
                                                                multi_choice=False)
        multi_choice_questions = ChoiceQuestion.objects.filter(questionnaire=questionnaire,
                                                               multi_choice=True)
        text_questions = NonChoiceQuestion.objects.filter(questionnaire=questionnaire,
                                                          type=0)
        file_questions = NonChoiceQuestion.objects.filter(questionnaire=questionnaire,
                                                          type=1)
        args = {
            "act_id": activity.id,
            "act": activity,
            "single_choice_questions": single_choice_questions,
            "multi_choice_questions": multi_choice_questions,
            "text_questions": text_questions,
            "file_questions": file_questions,
            "show_publish": True
        }
        args.update(csrf(request))
        return render(request,
                      choose_template_by_device(request,
                                                "Activity/create-action-3.html",
                                                "Activity/mobile/create-action-3.html"),
                      args)
    else:
        args = {
            "act_id": activity.id,
            "act": activity,
            "show_publish": True
        }
        args.update(csrf(request))
        return render(request,
                      choose_template_by_device(request,
                                                "Activity/create-action-3.html",
                                                "Activity/mobile/create-action-3.html"),
                      args)
コード例 #2
0
ファイル: views.py プロジェクト: knwng/findRice
def index_list(request, start, size):
    if "callback" in request.GET:
        activities = Activity.objects.filter(is_active=True, is_published=True, identified=True)\
            .order_by("recommended_level", "-created_at")[start: start+size]
        data = render_to_string(
            choose_template_by_device(request, "list_item.html",
                                      "home-mobile/list_item.html"), {
                                          "activities": activities,
                                          'user': request.user
                                      })
        data = {"html": data, "size": len(activities)}
        return HttpResponse(request.GET.get("callback", "") + '(' +
                            json.dumps(data) + ')',
                            content_type="text/javascript")

    if HomepageIssue.objects.exists():
        recent_issue = HomepageIssue.objects.all()[0]
        banners = HomepagePoster.objects.filter(issue=recent_issue,
                                                poster_type=0)
        try:
            footer = HomepagePoster.objects.filter(issue=recent_issue,
                                                   poster_type=1).first()
        except IndexError:
            footer = None
    else:
        banners = None
        footer = None
    activities = Activity.objects.filter(is_active=True,
                                         is_published=True,
                                         identified=True).order_by(
                                             "recommended_level",
                                             "-created_at")[start:start + size]
    act_types = ActivityType.objects.all()

    user = None
    if request.user.is_authenticated():
        user = request.user
    args = {
        "homepage_posters": banners,
        "footer": footer,
        "activity_types": act_types,
        "activities": activities,
        "user": user,
    }
    args.update(csrf(request))
    return render(
        request,
        choose_template_by_device(request, "list.html",
                                  "home-mobile/list.html"), args)
コード例 #3
0
ファイル: views.py プロジェクト: knwng/findRice
def notification_center(request):
    center = request.user.notification_center
    sys_msg = SystemNotification.objects.filter(notification_center=center)
    act_msg = ActivityNotification.objects.filter(notification_center=center)
    wel_msg = WelfareNotification.objects.filter(notification_center=center)

    msg_list = list(sys_msg[0:20]) + list(act_msg[0:20]) + list(wel_msg[0:20])
    msg_list_order = sorted(msg_list,
                            key=lambda msg: msg.created_at,
                            reverse=True)[0:20]

    response = render(
        request,
        choose_template_by_device(request, "Notification/message.html",
                                  "Notification/mobile/message.html"), {
                                      "msgs": msg_list_order,
                                      "user": request.user
                                  })

    # mark all these notifications as read
    sys_msg.update(read=True)
    act_msg.update(read=True)
    wel_msg.update(read=True)

    return response
コード例 #4
0
def mine_start(request, start, size):
    """我发布的活动"""
    user = request.user
    acts = Activity.objects.filter(host=user, is_active=True).order_by("-created_at")[start: start+size]
    if "callback" in request.GET:
        data = render_to_string(choose_template_by_device(request,
                                                          "Profile/start_item.html",
                                                          "Profile/mobile/start_item.html"),
                                {"activities": acts, "user": user})
        data = {"html": data, "size": len(acts)}
        return HttpResponse(request.GET.get("callback", "")+'('+json.dumps(data)+')', content_type="text/javascript")
    args = {
        "activities": acts,
        "user": user
    }
    args.update(csrf(request))
    return render(request, choose_template_by_device(request, "Profile/start.html", "Profile/mobile/start.html"), args)
コード例 #5
0
ファイル: views.py プロジェクト: alnsun/findRice
def statement(request):
    if request.user and request.user.is_authenticated():
        user = request.user
    else:
        user = None
    return render(request,
                  choose_template_by_device(request,
                                            "statement.html",
                                            "home-mobile/statement.html"),
                  {'user': user})
コード例 #6
0
ファイル: views.py プロジェクト: knwng/findRice
def statement(request):
    if request.user and request.user.is_authenticated():
        user = request.user
    else:
        user = None
    return render(
        request,
        choose_template_by_device(request, "statement.html",
                                  "home-mobile/statement.html"),
        {'user': user})
コード例 #7
0
def mine_apply(request, start, size):
    """我申请的活动"""
    user = request.user
    acts = Activity.objects.filter(applications_through__user=user,
                                   applications_through__status__in=["applying", "approved", "denied", "finished"],
                                   applications_through__is_active=True,
                                   is_active=True)[start:start+size]
    if "callback" in request.GET:
        data = render_to_string(choose_template_by_device(request,
                                                          "Profile/apply_item.html",
                                                          "Profile/mobile/apply_item.html"),
                                {"activities": acts, "user": user})
        data = {"html": data, "size": len(acts)}
        return HttpResponse(request.GET.get("callback", "")+'('+json.dumps(data)+')', content_type="text/javascript")
    args = {
        "activities": acts,
        "user": user
    }
    args.update(csrf(request))
    return render(request, choose_template_by_device(request, "Profile/apply.html", "Profile/mobile/apply.html"), args)
コード例 #8
0
ファイル: views.py プロジェクト: alnsun/findRice
def index_list(request, start, size):
    if "callback" in request.GET:
        activities = Activity.objects.filter(is_active=True, is_published=True, identified=True)\
            .order_by("recommended_level", "-created_at")[start: start+size]
        data = render_to_string(choose_template_by_device(request,
                                                          "list_item.html",
                                                          "home-mobile/list_item.html"),
                                {"activities": activities, 'user': request.user})
        data = {"html": data, "size": len(activities)}
        return HttpResponse(request.GET.get("callback", "")+'('+json.dumps(data)+')', content_type="text/javascript")

    if HomepageIssue.objects.exists():
        recent_issue = HomepageIssue.objects.all()[0]
        banners = HomepagePoster.objects.filter(issue=recent_issue,
                                                poster_type=0)
        try:
            footer = HomepagePoster.objects.filter(issue=recent_issue,
                                                   poster_type=1).first()
        except IndexError:
            footer = None
    else:
        banners = None
        footer = None
    activities = Activity.objects.filter(
        is_active=True, is_published=True, identified=True
    ).order_by("recommended_level", "-created_at")[start: start+size]
    act_types = ActivityType.objects.all()

    user = None
    if request.user.is_authenticated():
        user = request.user
    args = {
        "homepage_posters": banners,
        "footer": footer,
        "activity_types": act_types,
        "activities": activities,
        "user": user,
    }
    args.update(csrf(request))
    return render(request, choose_template_by_device(request, "list.html", "home-mobile/list.html"), args)
コード例 #9
0
ファイル: views.py プロジェクト: alnsun/findRice
def edit_activity_1(request, action_id):
    activity = get_object_or_404(Activity, id=action_id, is_active=True)
    if not activity.host == request.user:
        return HttpResponseForbidden()

    form = ActivityCreationForm(request.user, instance=activity,
                                initial={"activity_type": activity.activity_type.display_order,
                                         "hour": activity.hour,
                                         "day": activity.day,
                                         "minute": activity.minute,
                                         "reward": activity.reward})
    if request.method == "POST":
        form = ActivityCreationForm(request.user, request.POST, request.FILES,
                                    instance=activity.get_backup())
        if form.is_valid():
            form.save()
            response = JsonResponse({
                "success": True,
                "data": {
                    "url": "/action/%s/edit/2" % activity.id
                }
            }, content_type='text/html')
            return response
        else:
            data = {}
            errors = form.errors
            if 'start_time' in errors:
                data['start_time'] = u'开始时间不能早于当前时间'
            if 'end_time' in errors:
                data['end_time'] = u'结束时间不能早于开始时间'
            if data == {}:
                data['unknown'] = u'未知错误'
            return JsonResponse({
                "success": False,
                "data": data
            }, content_type='text/html')

    args = {}
    args.update(csrf(request))
    args["form"] = form
    activity_type = ActivityType.objects.all()
    args["types"] = activity_type
    args["action_id"] = action_id
    args["editing"] = True
    args["act_type"] = activity.activity_type
    # 下面的两个参数主要用来给移动端填充数据
    args["act"] = activity
    return render(request,
                  choose_template_by_device(request,
                                            "Activity/create-action-1.html",
                                            "Activity/mobile/create-action-1.html"),
                  args)
コード例 #10
0
def mine_group(request, start, size):
    """我的米团"""
    user = request.user
    # 注意,这里先去掉分页,直接返回所有的米团成员
    # contributions = RiceTeamContribution.objects.filter(team=user.rice_team,
    #                                                     user__profile__is_active=True)[start:start+size]
    # contributions = RiceTeamContribution.objects.filter(leader=user,
    #                                                     user__is_active=True)
    team_members = get_user_model().objects.filter(profile__team_leader=user).\
        annotate(contributed_coin=Sum("my_contributions__contributed_coin"))
    args = {
        "user": user,
        "member_num": team_members.count(),
        "members": team_members
    }
    args.update(csrf(request))
    return render(request, choose_template_by_device(request, "Profile/group.html", "Profile/mobile/group.html"), args)
コード例 #11
0
ファイル: views.py プロジェクト: alnsun/findRice
def create_new_activity_1(request):
    form = ActivityCreationForm(request.user, initial={"host_name": request.user.profile.name})
    if request.method == "POST":
        form = ActivityCreationForm(request.user, request.POST, request.FILES)
        if form.is_valid():
            act = form.save()
            # request.COOKIES["activity_creation_info"] = \
            # get_activity_session_representation(act)
            # request.COOKIES.set_expiry(1800)  # 这个session只有在三十分钟内有效
            response = JsonResponse({
                "success": True,
                "data": {
                    "url": "/action/%s/create/2" % act.id
                }
            }, content_type='text/html')
            response.set_cookie("activity_creation_info", get_activity_session_representation(act),
                                max_age=1800)
            return response
        else:
            logger.debug(u"创建活动失败,失败信息为: %s" % form.errors.as_data)
            data = {}
            errors = form.errors
            if 'start_time' in errors:
                data['start_time'] = u'开始时间不能早于当前时间'
            if 'end_time' in errors:
                data['end_time'] = u'结束时间不能早于开始时间'

            if data == {}:
                data['unknown'] = u'未知错误'
            return JsonResponse({
                "success": False,
                "data": data
            }, content_type='text/html')

    args = {}
    args.update(csrf(request))
    args["form"] = form
    activity_type = ActivityType.objects.all()
    args["types"] = activity_type
    return render(request,
                  choose_template_by_device(request,
                                            "Activity/create-action-1.html",
                                            "Activity/mobile/create-action-1.html"),
                  args)
コード例 #12
0
ファイル: views.py プロジェクト: alnsun/findRice
def check_applicant_list(request, action_id):
    activity = get_object_or_404(Activity, id=action_id, is_active=True)
    user = request.user
    if activity.host != user:
        """如果当前用户并不是这个活动的发布者,那么跳转到活动的详情页"""
        return HttpResponseRedirect("/action/%s" % action_id)

    applicant = ApplicationThrough.objects.filter(activity=activity,
                                                  activity__is_active=True,
                                                  user__is_active=True,
                                                  is_active=True)

    def findall(a):
        if not AnswerSheet.objects.filter(user=a.user,
                                          questionnaire__activity=a.activity).exists():
            return {"apply": a,
                    "user": a.user,
                    }
        answer_set = []
        answer_sheet = AnswerSheet.objects.filter(user=a.user,
                                                  questionnaire__activity=a.activity).order_by('-created_at')[0]
        answer_set += list(SingleChoiceAnswer.objects.filter(answer_sheet=answer_sheet))
        answer_set += list(MultiChoiceAnswer.objects.filter(answer_sheet=answer_sheet))
        answer_set += list(TextAnswer.objects.filter(answer_sheet=answer_sheet))
        answer_set += list(FileAnswer.objects.filter(answer_sheet=answer_sheet))
        data = {"apply": a,
                "user": a.user,
                "answers": answer_set}
        return data

    datas = map(findall, list(applicant))

    args = {
        "user": user,
        "data_set": datas,
        "act": activity,
    }
    args.update(csrf(request))
    return render(request, choose_template_by_device(request,
                                                     "Activity/apply-list.html",
                                                     "Activity/mobile/apply-list.html"), args)
コード例 #13
0
ファイル: views.py プロジェクト: huangy10/findRice
def notification_center(request):
    center = request.user.notification_center
    sys_msg = SystemNotification.objects.filter(notification_center=center)
    act_msg = ActivityNotification.objects.filter(notification_center=center)
    wel_msg = WelfareNotification.objects.filter(notification_center=center)

    msg_list = list(sys_msg[0:20]) + list(act_msg[0:20]) + list(wel_msg[0:20])
    msg_list_order = sorted(msg_list, key=lambda msg: msg.created_at, reverse=True)[0:20]

    response = render(
        request,
        choose_template_by_device(request, "Notification/message.html", "Notification/mobile/message.html"),
        {"msgs": msg_list_order, "user": request.user},
    )

    # mark all these notifications as read
    sys_msg.update(read=True)
    act_msg.update(read=True)
    wel_msg.update(read=True)

    return response
コード例 #14
0
def register(request):
    if request.method == 'POST':
        form = UserRegisterForm(request.POST, request.FILES)
        if form.is_valid():
            user = form.save()
            user_auth = auth.authenticate(username=user.username, password=request.POST["password1"])
            auth.login(request, user_auth)
            next_url = request.session.pop('next', '/')
            return HttpResponse(json.dumps({'success': True, 'data': {'url': next_url}}))
        else:
            errors = form.errors
            logger.debug(u'用户注册过程中出错,错误信息为:%s' % errors)
            return HttpResponse(json.dumps({'success': False, 'data': errors}))
    # TODO: 这里为了稳定性考虑,避免使用session,故code应该埋点在网页中被post上来
    if 'next' in request.GET:
        request.session['next'] = request.GET['next']
    args = {}
    args.update(csrf(request))
    args['form'] = UserRegisterForm()
    # TODO: 注意这里要从next参数里面解析code
    if "next" in request.GET:
        next_url = request.GET.get('next')
        find_code = re.match(r'/action/(\d+)\?code=(\w+)', next_url)
        if find_code is not None:
            promotion_code = find_code.groups()[1]
        else:
            promotion_code = None
    elif "code" in request.GET:
        promotion_code = request.GET.get("code")
    else:
        promotion_code = None
    args['promotion_code'] = promotion_code

    # TODO: 注意,这里模板渲染应当不再使用form
    return render(request,
                  choose_template_by_device(request,
                                            "Profile/new_register.html",
                                            "Profile/mobile/new_register.html"),
                  args)
コード例 #15
0
def reset_password(request):
    form = PasswordChangeForm()
    if request.method == "POST":
        form = PasswordResetForm(request.POST)
        if form.is_valid():
            form.save()
            # 当用户没有登陆时将其导到登陆界面,否则返回首页
            success_info = {
                "success": True,
                "data": {
                    "url": "/" if request.user.is_authenticated() else '/login'
                }
            }
            return HttpResponse(json.dumps(success_info))
        else:
            error_info = {"success": False}
            data = {}
            errors = form.errors
            if "password1" in errors:
                data["pwd"] = errors["password1"][0]
            if "password2" in errors:
                data["pwd-confirm"] = errors["password2"][0]
            if "phoneNum" in errors:
                data["mobile"] = errors["phoneNum"][0]
            if "code" in errors:
                data["verifycode"] = errors["code"][0]
            if data == {}:
                data["unknown"] = "未知错误,请联系管理员"
            error_info["data"] = data
            logger.debug(u"修改密码失败: {0}".format(error_info))
            return HttpResponse(json.dumps(error_info))

    args = {}
    args.update(csrf(request))
    args['form'] = form

    return render(request, choose_template_by_device(request, "Profile/find_password.html", "Profile/mobile/find_password.html"), args)
コード例 #16
0
def user_login(request):
    if request.method == "POST":
        username = request.POST.get("username", "").strip()
        pwd = request.POST.get("pwd", "").strip()
        print username, pwd
        user = auth.authenticate(username=username, password=pwd)
        if user is not None and user.is_active:
            auth.login(request, user)
            next_url = request.session.pop('next', '/')
            success_info = {
                "success": True,
                "data": {
                    "url": next_url
                }
            }
            return HttpResponse(json.dumps(success_info))
        else:
            logger.info(u"用户登陆数百,输入数据为:%s" % request.POST)
            error_info = {
                "success": False
            }
            data = {}
            if not auth.get_user_model().objects.filter(username=username).exists():
                data['username'] = '******'
            else:
                data['pwd'] = '密码错误'
            error_info['data'] = data
            return HttpResponse(json.dumps(error_info))
    # 将在GET参数里面的next参数暂时存储在session中
    request.session["next"] = request.GET.get("next", "/")
    args = {}
    args.update(csrf(request))
    # 这个next参数会被埋在登陆页面的注册按钮,构造/register?next=/url/to/next的链接
    args['next'] = request.GET.get("next", None)

    return render(request, choose_template_by_device(request, "Profile/new_login.html", "Profile/mobile/new_login.html"), args)
コード例 #17
0
def user_profile_modify(request):
    if request.method == "POST":
        form = ProfileChangeForm(request.POST, request.FILES, instance=request.user.profile)
        if form.is_valid():
            form.save()
            return HttpResponse(simplejson.dumps({"success": True, "data": {}}),
                                content_type="application/json")
        else:
            logger.debug(u"用户|%s(id: %s)|信息修改失败,错误信息为: %s" % (
                request.user.profile.name, request.user.id, form.errors.as_data))
            return HttpResponse(simplejson.dumps({"success": False, "data": {"unknown": "未知错误,请联系管理员"}}),
                                content_type="application/json")

    else:
        form = ProfileChangeForm()
        args = {}
        args.update(csrf(request))
        args["form"] = form
        args["user"] = request.user
        return render(request,
                      choose_template_by_device(request,
                                                "Profile/modify-person-info.html",
                                                "Profile/mobile/modify-person-info.html"),
                      args)
コード例 #18
0
ファイル: views.py プロジェクト: knwng/findRice
def search_list(request, start, size):
    hot = request.GET.get("hot", "")
    stype = request.GET.get("type", "")
    q = request.GET.get("q", "")
    loc = request.GET.get("loc", "")
    user = request.user
    logger.debug(u"搜索参数为: hot=%s|type=%s|loc=%s|q=%s" % (hot, stype, loc, q))
    if not user.is_authenticated():
        user = None
    act = None

    def filter_hot(activity):
        if activity is None:
            queryset = Activity.objects
        else:
            queryset = activity
        if hot == "0":
            activity = queryset.filter(recommended=True,
                                       is_active=True,
                                       is_published=True,
                                       identified=True).order_by(
                                           "-recommended_level", '-created_at')
        elif hot == "1":
            activity = queryset.filter(time_limited=True,
                                       is_active=True,
                                       is_published=True,
                                       identified=True)
        elif hot == "2":
            activity = queryset.filter(num_limited=True,
                                       is_active=True,
                                       is_published=True,
                                       identified=True)
        elif hot == "3":
            activity = queryset.filter(is_active=True,
                                       is_published=True,
                                       identified=True)
        else:
            activity = queryset.filter(is_active=True,
                                       is_published=True,
                                       identified=True)
        return activity

    act = filter_hot(act)
    act_types = ActivityType.objects.all()

    def filter_type(activity):
        if activity is None:
            queryset = Activity.objects
        else:
            queryset = activity
        try:
            stype_num = int(stype)
            if stype_num == 0 or stype_num > len(act_types):
                activity = queryset.all()
                return activity
            elif stype_num < 0:
                return queryset.filter(activity_type=None,
                                       is_active=True,
                                       is_published=True)
            else:
                type_obj = act_types[stype_num - 1]
                activity = queryset.filter(activity_type=type_obj,
                                           is_active=True,
                                           is_published=True)
                return activity
        except (ValueError, IndexError):
            return activity

    act = filter_type(act)

    def filter_q(activity):
        if activity is None:
            queryset = Activity.objects
        else:
            queryset = activity
        if q == "":
            return activity
        else:
            activity = queryset.filter(name__contains=q,
                                       is_active=True,
                                       is_published=True)
            return activity

    act = filter_q(act)

    def filter_loc(activity):
        if activity is None:
            queryset = Activity.objects
        else:
            queryset = activity
        if loc == "":
            return activity
        else:
            if "|" in loc:
                prov, city = loc.split("|")
                if prov == u"全部地区":
                    return activity
                if city == u"全部地区":
                    activity = queryset.filter(province=prov,
                                               is_active=True,
                                               is_published=True)
                else:
                    activity = queryset.filter(city=city,
                                               province=prov,
                                               is_active=True,
                                               is_published=True)
            else:
                activity = queryset.filter(location__contains=loc,
                                           is_active=True,
                                           is_published=True)
            return activity

    act = filter_loc(act)

    if hot == "3" and act is not None:
        act = act.filter(end_time__gt=timezone.now()).order_by("-reward")

    if "callback" in request.GET:
        act_data = act[start:start + size]
        data = render_to_string(
            choose_template_by_device(request, "list.html",
                                      "home-mobile/list.html"), {
                                          "activities": act_data,
                                          'user': request.user
                                      })
        data = {"html": data, "size": len(act_data)}
        return HttpResponse(request.GET.get("callback", "") + '(' +
                            json.dumps(data) + ')',
                            content_type="text/javascript")

    if HomepageIssue.objects.exists():
        recent_issue = HomepageIssue.objects.all()[0]
        banners = HomepagePoster.objects.filter(issue=recent_issue,
                                                poster_type=0)
        try:
            footer = HomepagePoster.objects.filter(issue=recent_issue,
                                                   poster_type=1).first()
        except IndexError:
            footer = None
    else:
        banners = None
        footer = None

    def stype_transfer(a):
        if a == "":
            return ""
        else:
            return int(a)

    # city display

    if not loc == "":
        prov, city = loc.split("|")
        if prov in [u"北京市", u"重庆市", u"上海市", u"天津市"] or city == u"全部地区":
            city = prov
    else:
        city = None
    args = {
        "user": user,
        "homepage_posters": banners,
        "footer": footer,
        "activity_types": act_types,
        "activities": act[start:start + size],
        "param": {
            "hot": hot,
            "q": q,
            "type": stype_transfer(stype),
            "loc": loc,
            "city": city
        }
    }
    args.update(csrf(request))
    return render(
        request,
        choose_template_by_device(request, "list.html",
                                  "home-mobile/list.html"), args)
コード例 #19
0
ファイル: views.py プロジェクト: alnsun/findRice
def check_activity_detail(request, action_id):
    """ 不必要在这个步骤里面追踪Share code,事实上share code已经全面取消。但是在这个页面中需要埋入当前用户的promotion code
    """
    activity = get_object_or_404(Activity, id=action_id, is_active=True)
    user = request.user

    if user.is_authenticated():
        if "code" in request.GET:
            promotion_code = request.GET.get('code')
            if promotion_code == user.profile.promotion_code:
                # 如果当前的code是本用户
                promotion_code = request.GET.get("precode", None)
            else:
                # 如果当前的code不是当前用户的,那么重整url
                return HttpResponseRedirect("/action/{0}?code={1}&precode={2}".format(
                    action_id, user.profile.promotion_code, promotion_code
                ))
        else:
            return HttpResponseRedirect("/action/%s?code=%s" % (action_id, user.profile.promotion_code))
    else:
        promotion_code = request.GET.get("code")

    # 到这里为止,promotion_code, 表征的就是向当前用户推广的推广者, 如果没有推广者,则为None,

    if user.is_authenticated() and activity.host_id != user.id:
        # 更新浏览次数
        activity.viewed_times += 1
        activity.save()
    # 查看当前用户是否点赞过这个用户
    if user.is_authenticated():
        liked = ActivityLikeThrough.objects.filter(user=user, activity=activity).exists()
    else:
        liked = False
        user = None

    # 取出问卷
    questionnaire = Questionnaire.objects.filter(activity=activity, is_active=True).first()

    if questionnaire is not None:
        # questionnaire = Questionnaire.objects.get(activity=activity, is_active=True)
        single_choice_questions = ChoiceQuestion.objects.filter(questionnaire=questionnaire, multi_choice=False)
        multi_choice_questions = ChoiceQuestion.objects.filter(questionnaire=questionnaire, multi_choice=True)
        text_questions = NonChoiceQuestion.objects.filter(questionnaire=questionnaire, type=0)
        file_questions = NonChoiceQuestion.objects.filter(questionnaire=questionnaire, type=1)
        if len(single_choice_questions) + len(multi_choice_questions) + len(text_questions) + len(file_questions) == 0:
            has_questions = False
        else:
            has_questions = True
        args = {
            "act": activity,
            "single_choice_questions": single_choice_questions,
            "multi_choice_questions": multi_choice_questions,
            "text_questions": text_questions,
            "file_questions": file_questions,
            "user": user,
            "like": liked,
            "promotion_code": promotion_code,
            "questionnaire": has_questions,
        }
        args.update(csrf(request))
        return render(request,
                      choose_template_by_device(request,
                                                "Activity/detail.html",
                                                "Activity/mobile/detail.html"),
                      args)
    else:
        args = {
            "act": activity,
            "user": user,
            "promotion_code": promotion_code,
            "like": liked,
        }
        args.update(csrf(request))
        return render(request,
                      choose_template_by_device(request,
                                                "Activity/detail.html",
                                                "Activity/mobile/detail.html"),
                      args)
コード例 #20
0
ファイル: views.py プロジェクト: alnsun/findRice
def save_an_activity(request, action_id):
    activity = get_object_or_404(Activity, id=action_id)
    if not activity.host == request.user:
        return HttpResponseForbidden()
    q_id = request.session.get("questionnaire_id_tmp", -1)

    if request.method == "POST":
        if activity.backup is None or not activity.is_active:
            activity.is_active = True
            activity.save()
            return JsonResponse({
                "success": True,
                "data": {
                    "url": "/mine/start"
                }
            }, content_type='text/html')

        if Questionnaire.objects.filter(activity=activity, is_active=False, id=q_id).exists():
            questionnaire = Questionnaire.objects.filter(activity=activity, is_active=False, id=q_id)[0]
            questionnaire.is_active = True
            questionnaire.save()

        backup = activity.backup
        tmp = backup.id
        backup.id = activity.id
        activity.id = tmp
        backup.is_active = True
        activity.is_active = False
        backup.save()
        activity.save()
        return JsonResponse({
            "success": True,
            "data": {
                "url": "/mine/start"
            }
        }, content_type='text/html')

    if Questionnaire.objects.filter(activity=activity, is_active=False, id=q_id).exists():
        questionnaire = Questionnaire.objects.filter(activity=activity, is_active=False)[0]
        single_choice_questions = ChoiceQuestion.objects.filter(questionnaire=questionnaire,
                                                                multi_choice=False)
        multi_choice_questions = ChoiceQuestion.objects.filter(questionnaire=questionnaire,
                                                               multi_choice=True)
        text_questions = NonChoiceQuestion.objects.filter(questionnaire=questionnaire,
                                                          type=0)
        file_questions = NonChoiceQuestion.objects.filter(questionnaire=questionnaire,
                                                          type=1)
        args = {
            "act_id": activity.id,
            "act": activity.backup,
            "single_choice_questions": single_choice_questions,
            "multi_choice_questions": multi_choice_questions,
            "text_questions": text_questions,
            "file_questions": file_questions,
            "show_publish": False
        }
        args.update(csrf(request))
        return render(request,
                      choose_template_by_device(request,
                                                "Activity/create-action-3.html",
                                                "Activity/mobile/create-action-3.html"),
                      args)
    else:
        args = {
            "act_id": activity.id,
            "act": activity.backup,
            "show_publish": False
        }
        args.update(csrf(request))
        return render(request,
                      choose_template_by_device(request,
                                                "Activity/create-action-3.html",
                                                "Activity/mobile/create-action-3.html"),
                      args)
コード例 #21
0
ファイル: views.py プロジェクト: alnsun/findRice
def edit_new_activity_1(request, action_id):
    """创建活动的第二步,首先检查session中的信息"""
    # 从第一步骤出来的
    activity = get_object_or_404(Activity, id=action_id, is_active=False)
    # activity = get_object_or_404(Activity, id=action_id)
    user = request.user
    if user != activity.host:
        # 如果发现试图访问这个链接的当前用户并不是当前用户的创建者,则引导其进入创建的第一步
        return HttpResponseRedirect("/action/new/create/1")
    act_info = request.session.get("activity_creation_info", "")
    if get_activity_session_representation(activity) != act_info:
        # 检查这个链接是否是由第一步转移过来的,注意这个链接只在30分钟内有效,否则视为放弃了上面的活动
        return HttpResponseRedirect("/action/new/create/1")

    if request.method == "POST":
        form = ActivityCreationForm(request.user, request.POST, request.FILES, instance=activity)
        if form.is_valid():
            act = form.save()
            # request.COOKIES["activity_creation_info"] = \
            # get_activity_session_representation(act)
            # request.COOKIES.set_expiry(1800)  # 这个session只有在三十分钟内有效
            response = JsonResponse({
                "success": True,
                "data": {
                    "url": "/action/%s/create/2" % act.id
                }
            }, content_type='text/html')
            return response
        else:
            data = {}
            logger.debug(u"编辑活动第一步失败,错误信息为%s" % form.errors.as_data)
            errors = form.errors
            if 'start_time' in errors:
                data['start_time'] = u'开始时间不能早于当前时间'
            if 'end_time' in errors:
                data['end_time'] = u'结束时间不能早于开始时间'
            if data == {}:
                data['unknown'] = u'未知错误'
            return JsonResponse({
                "success": False,
                "data": data
            }, content_type='text/html')

    form = ActivityCreationForm(instance=activity, initial={"activity_type": activity.activity_type.display_order,
                                                            "hour": activity.hour,
                                                            "day": activity.day,
                                                            "minute": activity.minute,
                                                            "reward": activity.reward})
    args = {}
    args.update(csrf(request))
    args["form"] = form
    activity_type = ActivityType.objects.all()
    args["types"] = activity_type
    if activity.is_active:
        args["action_id"] = activity.id
    response = render(request,
                      choose_template_by_device(request,
                                                "Activity/create-action-1.html",
                                                "Activity/mobile/create-action-1.html"),
                      args)
    return response
コード例 #22
0
ファイル: views.py プロジェクト: alnsun/findRice
def search_list(request, start, size):
    hot = request.GET.get("hot", "")
    stype = request.GET.get("type", "")
    q = request.GET.get("q", "")
    loc = request.GET.get("loc", "")
    user = request.user
    logger.debug(u"搜索参数为: hot=%s|type=%s|loc=%s|q=%s" % (hot, stype, loc, q))
    if not user.is_authenticated():
        user = None
    act = None

    def filter_hot(activity):
        if activity is None:
            queryset = Activity.objects
        else:
            queryset = activity
        if hot == "0":
            activity = queryset.filter(recommended=True,
                                       is_active=True, is_published=True,
                                       identified=True).order_by("-recommended_level", '-created_at')
        elif hot == "1":
            activity = queryset.filter(time_limited=True, is_active=True, is_published=True, identified=True)
        elif hot == "2":
            activity = queryset.filter(num_limited=True, is_active=True, is_published=True, identified=True)
        elif hot == "3":
            activity = queryset.filter(is_active=True, is_published=True, identified=True)
        else:
            activity = queryset.filter(is_active=True, is_published=True, identified=True)
        return activity

    act = filter_hot(act)
    act_types = ActivityType.objects.all()

    def filter_type(activity):
        if activity is None:
            queryset = Activity.objects
        else:
            queryset = activity
        try:
            stype_num = int(stype)
            if stype_num == 0 or stype_num > len(act_types):
                activity = queryset.all()
                return activity
            elif stype_num < 0:
                return queryset.filter(activity_type=None, is_active=True, is_published=True)
            else:
                type_obj = act_types[stype_num-1]
                activity = queryset.filter(activity_type=type_obj, is_active=True, is_published=True)
                return activity
        except (ValueError, IndexError):
            return activity

    act = filter_type(act)

    def filter_q(activity):
        if activity is None:
            queryset = Activity.objects
        else:
            queryset = activity
        if q == "":
            return activity
        else:
            activity = queryset.filter(name__contains=q, is_active=True, is_published=True)
            return activity

    act = filter_q(act)

    def filter_loc(activity):
        if activity is None:
            queryset = Activity.objects
        else:
            queryset = activity
        if loc == "":
            return activity
        else:
            if "|" in loc:
                prov, city = loc.split("|")
                if prov == u"全部地区":
                    return activity
                if city == u"全部地区":
                    activity = queryset.filter(province=prov, is_active=True, is_published=True)
                else:
                    activity = queryset.filter(city=city, province=prov, is_active=True, is_published=True)
            else:
                activity = queryset.filter(location__contains=loc, is_active=True, is_published=True)
            return activity

    act = filter_loc(act)

    if hot == "3" and act is not None:
        act = act.filter(end_time__gt=timezone.now()).order_by("-reward")

    if "callback" in request.GET:
        act_data = act[start: start+size]
        data = render_to_string(choose_template_by_device(request, "list.html", "home-mobile/list.html"),
                                {"activities": act_data,
                                 'user': request.user})
        data = {"html": data, "size": len(act_data)}
        return HttpResponse(request.GET.get("callback", "")+'('+json.dumps(data)+')', content_type="text/javascript")

    if HomepageIssue.objects.exists():
        recent_issue = HomepageIssue.objects.all()[0]
        banners = HomepagePoster.objects.filter(issue=recent_issue,
                                                poster_type=0)
        try:
            footer = HomepagePoster.objects.filter(issue=recent_issue,
                                                   poster_type=1).first()
        except IndexError:
            footer = None
    else:
        banners = None
        footer = None

    def stype_transfer(a):
        if a == "":
            return ""
        else:
            return int(a)

    # city display
   
    if not loc == "":
        prov, city = loc.split("|")
        if prov in [u"北京市", u"重庆市", u"上海市", u"天津市"] or city == u"全部地区":
            city = prov
    else:
        city = None
    args = {
        "user": user,
        "homepage_posters": banners,
        "footer": footer,
        "activity_types": act_types,
        "activities": act[start: start+size],
        "param": {
            "hot": hot,
            "q": q,
            "type": stype_transfer(stype),
            "loc": loc,
            "city": city
        }
    }
    args.update(csrf(request))
    return render(request, choose_template_by_device(request, "list.html", "home-mobile/list.html"), args)
コード例 #23
0
ファイル: views.py プロジェクト: alnsun/findRice
                user.profile.name, user.id, error_info))
            return JsonResponse({
                "success": False,
                "data": {
                    "unknown": "未知错误"
                }
            }, content_type='text/html')

    args = {}
    args.update(csrf(request))
    args["user"] = user
    args["activity"] = activity
    args["error_info"] = error_info
    return render(request,
                  choose_template_by_device(request,
                                            "Activity/create-action-2.html",
                                            "Activity/mobile/create-action-2.html"),
                  args)


@login_required()
@profile_active_required
def publish_an_activity(request, action_id):
    activity = get_object_or_404(Activity, id=action_id)
    user = request.user
    if user != activity.host:
        return HttpResponseRedirect("/action/new/create/1")
    # act_info = request.session.get("activity_creation_info", "")
    # if get_activity_session_representation(activity) != act_info:
    # return HttpResponseRedirect("/action/new/create/1")