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