示例#1
0
def index(request):
	if not request.user.is_authenticated():
		return HttpResponse('not authorized', status=401)
	sort = request.GET.get('sort')
	if sort and sort in sort_choices:
		images = Image.objects(is_25p=0,active=1,quality=1,repeated=0).exclude('face_info').order_by(sort)
	else:
		images = Image.objects(is_25p=0,active=1,quality=1,repeated=0).exclude('face_info')

	# search and filter
	search_str = request.GET.get('search')
	search_str = unquote(search_str) if search_str else search_str

	if search_str:
		search_params_list = re.split('; |, | |,|\n', search_str)
		images = images(tags__in=search_params_list)

	filter_str = request.GET.get('filter')
	filter_str = unquote(filter_str) if filter_str else filter_str
	try:
		json_obj = json.loads(open(os.path.dirname(__file__) + '/tags.json').read())
		json_tree = objectpath.Tree(json_obj)
	except:
		raise

	if filter_str:
		filter_params_list = re.split('; |, | |,|\n', filter_str)

		for filter_param in filter_params_list:
			try:
				node = list(json_tree.execute('$..options[@.id is"' + filter_param + '"]'))[0]
			except:
				print 'error finding ' + filter_param + ' in tags.json file'
				continue

			key_value = node['query'].split('=')
			mapping = {}
			mapping[str(key_value[0])] = ast.literal_eval(key_value[1])
			images = images(**mapping)

	response = json.loads('{}')
	response['total'] = images.count()

	limit = request.GET.get('limit')
	limit = limit if limit else images_per_page

	paginator = Paginator(images, limit)
	page = request.GET.get('page')

	try:
		images = paginator.page(page)
	except PageNotAnInteger:
		images = paginator.page(1)
	except EmptyPage:
		images = paginator.page(paginator.num_pages)

	# get account voting infomation
	response['images_list'] = json.loads(images.object_list.to_json())
	for image in response['images_list']:
		try:
			image['user_vote'] = UserVote.objects.get(username=request.user.username, image_id=int(image['_id'])).vote
		except:
			image['user_vote'] = 0
	return HttpResponse(json.dumps(response), content_type='application/json')