def handle_add_bookmark(request): put = request.REQUEST bm = models.Bookmark() is_public = put.get('is_public') if is_public == 'False': bm.is_public = False else: bm.is_public = True bm.description = put.get('description') bm.title = put.get('title') bm.user_id = int(put.get('user_id')) bm.username = put.get('username') try: bm.save() except Exception as e: logerror(e.message) return HttpResponseBadRequest if not bm.is_public: loginfo("Bookmark added") return HttpResponse(json.dumps({'bookmark_id': bm.id})) raw_tags = models.split_title_on_tags(bm.title) tags = models.get_tags(raw_tags) for tag in tags: bm_tag = models.BookmarkTag() bm_tag.tag = tag bm_tag.bookmark = bm bm_tag.save() loginfo("Bookmark added") return HttpResponse(json.dumps({'bookmark_id': bm.id}))
def handle_search_bookmarks(request): get = request.GET text = get.get('search_text') page = get.get('page') per_page = get.get('per_page') raw_tags = models.split_title_on_tags(text) tags = map(lambda x: models.find_tag(x), raw_tags) non_null_tags = [] for x in tags: if x: non_null_tags.append(x) tags = non_null_tags if len(tags) == 0: data = {'cur_page': 1, 'pages': 1, 'objects':[]} return HttpResponse(json.dumps(data)) objects = models.BookmarkTag.objects.filter(tag__in=tags) objects = objects.filter(bookmark__is_public=True) objects = objects.values('bookmark') objects = objects.annotate(num=Count('bookmark')) objects = objects.filter(num__gte=len(tags)) objects = objects.order_by('bookmark__time') paginator = Paginator(objects, per_page) try: result = paginator.page(page) except PageNotAnInteger: page = 1 result = paginator.page(page) except EmptyPage: page = paginator.num_pages result = paginator.page(paginator.num_pages) pages_count = paginator.num_pages objects=[] for x in result.object_list: bm = models.Bookmark.objects.get(pk=x['bookmark']) objects.append(bm.short_json()) data = {'objects': objects, 'pages': pages_count, 'cur_page': page} data = json.dumps(data) return HttpResponse(data)
def handle_search_bookmarks(request): get = request.GET text = get.get('search_text') page = get.get('page') per_page = get.get('per_page') raw_tags = models.split_title_on_tags(text) tags = map(lambda x: models.find_tag(x), raw_tags) non_null_tags = [] for x in tags: if x: non_null_tags.append(x) tags = non_null_tags if len(tags) == 0: data = {'cur_page': 1, 'pages': 1, 'objects': []} return HttpResponse(json.dumps(data)) objects = models.BookmarkTag.objects.filter(tag__in=tags) objects = objects.filter(bookmark__is_public=True) objects = objects.values('bookmark') objects = objects.annotate(num=Count('bookmark')) objects = objects.filter(num__gte=len(tags)) objects = objects.order_by('bookmark__time') paginator = Paginator(objects, per_page) try: result = paginator.page(page) except PageNotAnInteger: page = 1 result = paginator.page(page) except EmptyPage: page = paginator.num_pages result = paginator.page(paginator.num_pages) pages_count = paginator.num_pages objects = [] for x in result.object_list: bm = models.Bookmark.objects.get(pk=x['bookmark']) objects.append(bm.short_json()) data = {'objects': objects, 'pages': pages_count, 'cur_page': page} data = json.dumps(data) return HttpResponse(data)