Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.09.2024, 08:06   #1
Oleksandr95
Новичок
Джуниор
 
Регистрация: 06.08.2023
Сообщений: 2
По умолчанию Не могу настроить что бы переходило на страницу

Добрый день.
Проблема в следующем: я изучаю как сделать сайт на React+Django. И все хорошо было пока не появилась необходимость в файле который через API будет брать значения книги на страницу.
У меня

Код:

```from django.urls import path
from . import views
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework.status import HTTP_400_BAD_REQUEST, HTTP_200_OK
from .models import Book, Chapter
from .serializers import BookSerializer, ChapterSerializer
from django.shortcuts import get_object_or_404
from django.http import JsonResponse
import logging
from rest_framework.decorators import api_view



@api_view(['GET', 'POST'])
def Catalog(request):
    if request.method == 'GET':
        books = Book.objects.all()
        serializer = BookSerializer(books, many=True)
        return Response(serializer.data)

    if request.method == 'POST':
        serializer = BookSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=HTTP_200_OK)
        return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)



logger = logging.getLogger(__name__)

@api_view(['GET'])
def book_detail(request, slug):
    try:
        book = Book.objects.get(slug=slug)
        serializer = BookSerializer(book)
        return JsonResponse(serializer.data, safe=False)
    except Book.DoesNotExist:
        return JsonResponse({'error': 'Book not found'}, status=404)

@api_view(['GET'])
def chapter_list(request, book_slug):

    book = get_object_or_404(Book, slug=book_slug)


    chapters = Chapter.objects.filter(book=book)


    serializer = ChapterSerializer(chapters, many=True)


    return Response(serializer.data, status=HTTP_200_OK)


@api_view(['GET'])
def chapter_detail(request, book_slug, chapter_slug):

    book = get_object_or_404(Book, slug=book_slug)


    chapter = get_object_or_404(Chapter, slug=chapter_slug, book=book)


    serializer = ChapterSerializer(chapter)


    return Response(serializer.data, status=HTTP_200_OK) 
```

   Urls.py:

Код:

``` app_name = 'catalog'

urlpatterns = [
    path('', views.Catalog, name='catalog'),
    path('books/<slug:slug>/', views.book_detail, name='book_detail'),
    path('books/<slug:book_slug>/chapters/', views.chapter_list, name='chapter_list'),
    path('books/<slug:book_slug>/chapters/<slug:chapter_slug>/', views.chapter_detail, name='chapter_detail'),
] 
```
api.js: ``` import axios from 'axios'; const API_BASE_URL = 'http://localhost:8000'; // Замените на ваш фактический URL // Получение списка книг export const getCatalog = () => { return axios.get(${API_BASE_URL}/catalog/); }; // Получение деталей книги по slug export const getBookDetail = (slug) => { return axios.get(${API_BASE_URL}/catalog/books/${slug}/); }; // Получение списка глав книги по slug книги export const getChapterList = (bookSlug) => { return axios.get(${API_BASE_URL}/catalog/books/${bookSlug}/chapters/); }; // Получение деталей главы книги по slug книги и slug главы export const getChapterDetail = (bookSlug, chapterSlug) => { return axios.get(${API_BASE_URL}/catalog/books/${bookSlug}/chapters/${chapterSlug}/); }; ```

BookDetail.js:

Код:

```
 import React, { useState, useEffect } from 'react';
import { getBookDetail } from '../api'; // Импорт функции для получения деталей книги
import { useParams } from 'react-router-dom'; // Для доступа к параметрам URL

const Book = () => {
  const { slug } = useParams(); // Получаем slug из параметров URL
  const [book, setBook] = useState(null); // Состояние для хранения данных книги
  const [loading, setLoading] = useState(true); // Состояние загрузки
  const [error, setError] = useState(null); // Состояние ошибки

  useEffect(() => {
    const fetchBookDetail = async () => {
      try {
        const response = await getBookDetail(slug); // Запрос к API
        setBook(response.data); // Обновляем состояние с данными книги
      } catch (error) {
        setError('Ошибка при загрузке данных книги'); // Обрабатываем ошибки
      } finally {
        setLoading(false); // Завершаем загрузку
      }
    };

    fetchBookDetail(); // Вызываем функцию при монтировании компонента
  }, [slug]); // Зависимость от slug, чтобы обновлять данные при его изменении

  if (loading) {
    return <div>Загрузка...</div>; // Отображаем сообщение о загрузке
  }

  if (error) {
    return <div>{error}</div>; // Отображаем сообщение об ошибке
  }

  if (!book) {
    return <div>Книга не найдена</div>; // Если книга не найдена
  }

  return (
    <div>
      <h1>{book.title}</h1> {/* Отображаем заголовок книги */}
      <p>{book.description}</p> {/* Отображаем описание книги */}
      {/* Здесь можно добавить другие детали книги */}
    </div>
  );
};

export default Book;

 ```
И мне выдает ошибку 404, что не может найти:

Код:

```

api.js:12%20%0A%20GET%20http%3A//localhost:8000/catalog/books/fwegerwgergewf/%20404%20(Not%20Found)%0Aapi.js:12%20%0A%20GET%20http://localhost:8000/catalog/books/fwegerwgergewf/%20404%20(Not%20Found)

 ```
Oleksandr95 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу настроить запрос wwwRex Microsoft Office Access 0 10.11.2020 16:10
Банальный вопрос про HTML. сделать когда нажимаешь на кнопку не переходило на другую страницу, а оставалось на первой и выводило cheyz1 HTML и CSS 6 21.04.2015 19:19
не могу настроить DIR-300 julliz Компьютерное железо 2 05.06.2011 21:07
Не могу настроить WiFi tima.net Компьютерное железо 1 05.04.2011 08:56
Как настроить домашнюю страницу? "Lana"@ Свободное общение 6 20.09.2009 04:35