Проблема с 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')),
]