Проблема с Django и Python (текущий путь api/ не совпадал с указанным)

Я пытаюсь создать школьный журнал на основе Django и Python, но не могу сделать это из-за 404 страницы с проблемой в заголовке.Затем Python часть является бэкендом и Node + Yarn + HTML является потребительской (клиентской) частью.

my views.py

urls.py

from django.urls import path, include
from rest_framework.routers import DefaultRouter

from journal import views


router = DefaultRouter()
router.register('study_years', views.StudyYearViewSet, basename='studyyrs')
router.register('subjects', views.SubjectViewSet, basename='subj')
router.register('marks', views.MarkViewSet, basename='markpage')
router.register('student_classes', views.StudentClassViewSet, basename='studcl')
router.register('students', views.StudentViewSet, basename='studentsview')
router.register('journals', views.JournalAPIView, basename='journaling')
router.register('school', views.SchoolViewSet, basename='allschool')

app_name = 'journal'

urlpatterns = [
    path('', include(router.urls)),
]

Ссылка на код: https://drive.google.com/file/d/1D_gP1GpL8MOJhLwWuw7UgQ_-ATHgLk_q/view?usp=sharing

$ python3 manage.py runserver (успешно запускается) а затем Not Found: / [20/Aug/2024 11:00:07] "GET / HTTP/1.1" 404 2771

Клиентская часть: $ yarn start (успех) (И пустая страница React.)


Page not found (404)
Request Method:     GET
Request URL:    http://127.0.0.1:8000/

Using the URLconf defined in app.urls, Django tried these URL patterns, in this order:

    admin/
    api/user/
    api/event/
    api/timetable/
    api/journal/

The empty path didn’t match any of these.

если проверить urlpatterns, то можно увидеть:

urlpatterns = [
    path('', include(router.urls)),
]

Это означает, что по любому пустому пути будет искаться список в router.urls. Но в router.urls вы никогда не регистрируете представление для пустого пути.

Вероятно, вы имеете в виду:

urlpatterns = [
    path('', include(router.urls)),
    path('', RedirectView.as_view(url="https://www.djangoproject.com/"), name="to-django"),
]

Подробнее здесь: о диспетчере url: https://docs.djangoproject.com/en/5.1/topics/http/urls/, там же можно посмотреть примеры с пустыми url.

о перенаправлении: https://docs.djangoproject.com/en/5.1/ref/class-based-views/base/#redirectview

В документации DRF:

from rest_framework import routers

router = routers.SimpleRouter()
router.register(r'users', UserViewSet)
router.register(r'accounts', AccountViewSet)
urlpatterns = router.urls

Как видите, вместо urlspatterns следует использовать router.urls.

Вот решение:

в журнале app urls.py

from django.urls import path, include
from rest_framework.routers import DefaultRouter

from journal import views


router = DefaultRouter()
router.register('study_years', views.StudyYearViewSet, basename='studyyrs')
router.register('subjects', views.SubjectViewSet, basename='subj')
router.register('marks', views.MarkViewSet, basename='markpage')
router.register('student_classes', views.StudentClassViewSet, basename='studcl')
router.register('students', views.StudentViewSet, basename='studentsview')
router.register('journals', views.JournalAPIView, basename='journaling')
router.register('school', views.SchoolViewSet, basename='allschool')

и затем в вашем app/urls.py

from journal.urls import router as journal
urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/user/', include('user.urls')),
    path('api/event/', include('event.urls')),
    path('api/timetable/', include('timetable.urls')),
    path('api/journal/', include('journal.urls')),
]
Вернуться на верх