示例#1
0
def find_book(request):
    """
    Generates list with books of data which user entered. At first it check full equality in name,
    after tries to check if contains some part of entered data.
    """
    validate_api_secret_key(request.data.get('app_key'))
    request_serializer = FindBookRequest(data=request.data)

    if request_serializer.is_valid():
        user = get_object_or_404(TheUser,
                                 auth_token=request.data.get('user_token'))
        search_data = request.data.get('search_term')

        filtered_books = Book.exclude_private_books(
            user.id_user, Book.fetch_books(search_data))

        paginator = Paginator(filtered_books, OUTPUT_BOOKS_PER_PAGE)
        page = paginator.page(request.data.get('page'))
        next_page = page.has_next()
        page_books = page.object_list

        return Response(
            {
                'detail': 'successful',
                'data': {
                    'books':
                    [BookSerializer(book).data for book in page_books],
                    'next_page': page.next_page_number() if next_page else 0
                }
            },
            status=status.HTTP_200_OK)
    else:
        return invalid_data_response(request_serializer)
示例#2
0
def selected_category(request):
    """
    Returns books from selected category.
    """
    validate_api_secret_key(request.data.get('app_key'))
    request_serializer = SelectedCategoryRequest(data=request.data)

    if request_serializer.is_valid():
        user = get_object_or_404(TheUser,
                                 auth_token=request.data.get('user_token'))
        category = get_object_or_404(Category,
                                     id=request.data.get('category_id'))

        books = Book.objects.filter(id_category=category).order_by('book_name')
        filtered_books = Book.exclude_private_books(user.id_user, books)

        paginator = Paginator(filtered_books, OUTPUT_BOOKS_PER_PAGE)
        page = paginator.page(request.data.get('page'))
        next_page = page.has_next()
        page_books = page.object_list

        return Response(
            {
                'detail': 'successful',
                'data': {
                    'books':
                    [BookSerializer(book).data for book in page_books],
                    'next_page': page.next_page_number() if next_page else 0
                }
            },
            status=status.HTTP_200_OK)
    else:
        return invalid_data_response(request_serializer)