def delete_message(title, content, url, message_type=MESSAGE_TYPE_SYSTEM, user=None, faculty=None, major=None, classes=None, team=None): users = get_users(user, faculty, major, classes, team) logger.info("delete message[%s] from user count[%d] url[%s]", content, len(users), url) for u in users: message = Message.objects.filter( content=content, user=u, url=url, message_type=message_type, ).first() if message: message.read = True message.save() delete_cache(_message_cache_instance) delete_cache(_cache_instance)
def add_message(title, content, url, message_type=MESSAGE_TYPE_SYSTEM, user=None, faculty=None, major=None, classes=None, team=None): ''' 新增一个消息, content: 消息内容, message_type: 消息类型,0系统消息, 1应用活动消息 user: 发送的对象 faculty: 院信息 major: 年级信息 classes: 班级信息 team: 队伍信息 ''' users = get_users(user, faculty, major, classes, team) logger.info("new message[%s] send to user count[%d] url[%s]", content, len(users), url) for u in users: Message.objects.create( content=content, user=u, url=url, message_type=message_type, ) delete_cache(_message_cache_instance) delete_cache(_cache_instance)
def clear_cache(self): # 暂时删除所有缓存 from django.core.cache import cache cache.clear() delete_cache(self.cache) if hasattr(self, 'related_cache_class'): self.clear_cls_cache(self.related_cache_class)
def add_calendar(title, content, type, url, is_event, user=None, faculty=None, major=None, classes=None, team=None, show_time=None): if not show_time: show_time = date.today() key_calendar = "%s-%s-%d-%s-%s-%s-%s-%s-%s-%s" % \ ( title, content, type, str(url), str(getattr(user, "username", "none")), str(getattr(faculty, "name", "none")), str(getattr(major, "name", "none")), str(getattr(classes, "name", "none")), str(getattr(team, "name", "none")), str(show_time), ) key_calendar = hashlib.md5(key_calendar).hexdigest().decode("utf-8") obj = _calendar_cache_instance.get(key_calendar) if not obj: obj = Calendar.objects.filter(title=title, content=content, type=type, url=url, is_event=is_event, user=user, faculty=faculty, major=major, classes=classes, team=team, show_time=show_time) if obj: return obj = Calendar.objects.create( title=title, content=content, type=type, url=url, is_event=is_event, user=user, faculty=faculty, major=major, classes=classes, team=team, ) cache_utils.delete_cache(_calendar_cache_instance) _calendar_cache_instance.set(key_calendar, obj, settings.DEFAULT_CACHE_AGE)
def clear_cls_cache(cls): # 暂时删除所有缓存 from django.core.cache import cache cache.clear() if not isinstance(cls, (list, tuple)): cls = [cls] for c in cls: if isinstance(c, (six.string_types, six.text_type)): try: c = import_string(c) except: continue cache_view_name = _generate_cache_view_name(c) cache = CacheProduct(cache_view_name) delete_cache(cache)
def calendar_init(): Calendar.objects.all().delete() cache_utils.delete_cache(_calendar_cache_instance)
def handler_task_list(request, testpaper_id): examname = request.data.get('examname', '') examDescription = request.data.get('examDescription', '') datas = request.data.get('data', '') testpaper_id = int(testpaper_id) if request.method == "GET": rows = [] if testpaper_id != 0: taskArrary = TestPaperTask.objects.filter( test_paper__id=testpaper_id) for t in taskArrary: task = get_task_object(t.task_hash) if not task: continue data = SerializerNew(task, t).data rows.append(data) return Response(data=rows, status=status.HTTP_200_OK) if not datas or not json.loads(datas): raise exceptions.ParseError(PracticeResError.NO_EXAM_QUESTIONS) if not examname: raise exceptions.ParseError(PracticeResError.WARN_MESSAGES_7) if capability_models.TestPaper.objects.filter( status=capability_models.TestPaper.Status.NORMAL, name=examname).exclude(pk=testpaper_id).exists(): raise exceptions.ParseError(PracticeResError.WARN_MESSAGES_6) datas = json.loads(datas) number = 0 allScore = 0 for data in datas: number = number + 1 allScore = allScore + float(data['score']) logo_url = request.data.get("logo", None) if testpaper_id == 0: # 新增 # 创建一张试卷 if logo_url is not None and logo_url != '': logo = save_image(logo_url) else: logo = None testPaper = capability_models.TestPaper.objects.create( name=examname, task_number=number, task_all_score=allScore, introduction=examDescription, create_time=timezone.now(), create_user=request.user, logo=logo, public=True, ) else: testPaper = capability_models.TestPaper.objects.filter(id=testpaper_id) if not testPaper: raise exceptions.NotFound(PracticeResError.NOT_FOUND_EXAM) testPaper = testPaper[0] testPaper.name = examname testPaper.task_number = number testPaper.task_all_score = allScore testPaper.introduction = examDescription if logo_url is not None and logo_url != '': logos = save_image(logo_url) testPaper.logo = logos testPaper.save() event_task_list = TestPaperTask.objects.filter(test_paper=testPaper) if event_task_list: # 判断原来是否存在初始数据, 批量删除 try: event_task_list.delete() except ProtectedError: raise exceptions.ParseError( PracticeResError.CANNT_CHANGE_HAS_DONE) event_task_list = [] for data in datas: # copy_hash = copy_task(data['hash']) # if not copy_hash: # continue hash_list = [] if int(data['hash'].split('.')[-1]) != 0: hash_list.append(data['hash']) task_handler_class = TaskHandler copy_hash = task_handler_class.handle_tasks(hash_list) copy_hash = copy_hash[0] else: copy_hash = copy_task(data['hash']) if not copy_hash: continue event_task = TestPaperTask(test_paper=testPaper, task_hash=copy_hash, score=data['score']) event_task_list.append(event_task) TestPaperTask.objects.bulk_create(event_task_list) cache = CacheProduct( "%s-%s" % (TestPaperViewSet.__module__, TestPaperViewSet.__name__)) delete_cache(cache) return Response(data={'type': 'success'}, status=status.HTTP_200_OK)
def ret_testpaper_detail(request, testpaper_id): if request.method == "GET": context = {} single_selections = [] multiple_selections = [] judgment_selections = [] analysis_questions = [] testpaper_id = int(testpaper_id) testpaper = capability_models.TestPaper.objects.get(id=testpaper_id) context['name'] = testpaper.name context['number'] = testpaper.task_number context['allScore'] = testpaper.task_all_score taskArrary = TestPaperTask.objects.filter(test_paper=testpaper) rows = [] for t in taskArrary: task = get_task_object(t.task_hash) rows.append(Serializer(task, t).data) context['tasks'] = rows for task in context["tasks"]: if task.has_key("is_choice_question"): if _judgment_question_type( task["hash"] ) == theory_models.ChoiceTask.TopicProblem.SINGLE: single_selections.append(task) elif _judgment_question_type( task["hash"] ) == theory_models.ChoiceTask.TopicProblem.MULTIPLE: multiple_selections.append(task) else: judgment_selections.append(task) else: analysis_questions.append(task) tasks = dict(judgment_selections=judgment_selections, single_selections=single_selections, multiple_selections=multiple_selections, analysis_questions=analysis_questions) context['tasks'] = tasks return response.Response({'error_code': 0, 'response_data': context}) elif request.method == "POST": name = request.data['examname'] if int(testpaper_id) == 0 and TestPaper.objects.filter( name=name).exists(): return response.Response({'error_code': 1}) questions = request.data['questions'] list = questions.values() list.sort(key=lambda k: (k.get('qorder', 0))) number = 0 allScore = 0 for questions in list: number = number + 1 allScore = allScore + int(questions['score']) event_teachers = request.data.get('teacher') if int(testpaper_id) > 0: testPaper = TestPaper.objects.get(id=testpaper_id) testPaper.name = name testPaper.task_number = number testPaper.task_all_score = allScore testPaper.teacher = ",".join( event_teachers) if event_teachers else None testPaper.save() tpt = TestPaperTask.objects.filter(test_paper=testPaper) for t in tpt: t.delete() else: testPaper = TestPaper.objects.create( name=name, task_number=number, task_all_score=allScore, create_time=timezone.now(), create_user=request.user, public=True, ) for questions in list: TestPaperTask.objects.create(test_paper=testPaper, task_hash=questions['hash'], score=questions['score']) cache = CacheProduct( "%s-%s" % (TestPaperViewSet.__module__, TestPaperViewSet.__name__)) delete_cache(cache) return response.Response({'error_code': 1})