Django 和 Python 的问题(当前路径 api/ 与这些不匹配)

问题描述 投票:0回答:1

我正在尝试建立一个基于 Django 和 Python 的学校日记,但由于标题有问题的 404 页面,我无法做到这一点。 Python 部分是后端,Node + Yarn + HTML 是消费者(客户端)部分。

我的观点.py

from itertools import chain

from rest_framework import viewsets, mixins
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated

from core.models import (
    StudyYear,
    Subject,
    Mark,
    StudentClass,
    Student,
    School,
)
from journal import serializers


class BaseJournalAttrViewSet(viewsets.GenericViewSet,
                             mixins.ListModelMixin,
                             mixins.RetrieveModelMixin,):
    """Base viewset for journal attributes"""
    authentication_classes = (TokenAuthentication,)
    permission_classes = (IsAuthenticated,)


class StudyYearViewSet(BaseJournalAttrViewSet):
    """Manage study year in the database"""
    queryset = StudyYear.objects.all()
    serializer_class = serializers.StudyYearSerializer


class SubjectViewSet(BaseJournalAttrViewSet):
    """Manage subjects in the database"""
    queryset = Subject.objects.all()
    serializer_class = serializers.SubjectSerializer


class MarkViewSet(BaseJournalAttrViewSet,
                  mixins.CreateModelMixin,
                  mixins.UpdateModelMixin):
    """Manage marks in the database"""
    queryset = Mark.objects.all()
    serializer_class = serializers.MarkSerializer

    def get_queryset(self):
        """Retrieve all marks by student and subject"""
        queryset = self.queryset
        student = self.request.query_params.get('student')
        subject = self.request.query_params.get('subject')
        if student:
            queryset = queryset.filter(student__id=student)
        if subject:
            queryset = queryset.filter(subject__id=subject)

        return queryset


class StudentClassViewSet(BaseJournalAttrViewSet):
    """Manage classes in the database"""
    queryset = StudentClass.objects.all()
    serializer_class = serializers.StudentClassSerializer


class StudentViewSet(BaseJournalAttrViewSet):
    """Manage students in the database"""
    queryset = Student.objects.all()
    serializer_class = serializers.StudentSerializer

    def get_queryset(self):
        """Retrieve students for authenticated user by class"""
        student_class = self.request.query_params.get('student_class', None)
        queryset = self.queryset
        if student_class:
            queryset = queryset.filter(student_class__name=student_class)

        return queryset


class JournalAPIView(viewsets.ModelViewSet):
    """Combine data from other serializer to form journal"""
    authentication_classes = (TokenAuthentication,)
    permission_classes = (IsAuthenticated,)
    serializer_class = serializers.MarkSerializer
    queryset = Mark.objects.all()

    def get_queryset(self):
        """Retrieve journal data from multiple serializers"""
        student_class = self.request.query_params.get('student_class', None)
        subject = self.request.query_params.get('subject', None)

        students_queryset = Student.objects.filter(
            student_class__name=student_class)
        mark_querysets = []

        for student in students_queryset:
            mark_querysets.append(student.marks.filter(subject__name=subject))

        queryset = list(chain(*mark_querysets))

        return queryset


class SchoolViewSet(BaseJournalAttrViewSet):
    """Manage school in the database"""
    queryset = School.objects.all()
    serializer_class = serializers.SchoolSerializer

url.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 管理.py 运行服务器 (运行成功) 进而 未找到: / [2024 年 8 月 20 日 11:00:07]“GET / HTTP/1.1”404 2771

客户端部分: $ 纱线开始 (成功) (还有一个空白的 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.

reactjs node.js python-3.x django yarnpkg
1个回答
0
投票

如果你检查你的 urlpatterns,你可以看到:

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

这意味着,在任何空路径上都会搜索 router.urls 中的列表 但在 router.urls 中,你永远不会注册空路径的视图。

© www.soinside.com 2019 - 2024. All rights reserved.