Django,url 未找到 404

Django, url not found 404

Project Folder structure

我是 django 的新手。我正在尝试创建一个简单的 rest api 端点,但我得到了 404。我确定我缺少一些设置。 models.py

class DisplayItems(models.Model):
    yesNo = models.CharField(max_length=10)
    yogaMessage = models.CharField(max_length=50)
    yogaTimeMessage = models.CharField(max_length=100)

    @classmethod
    def create(cls, yesNo, yogaMessage, yogaTimeMessage):
        displayItems = cls(yesNo=yesNo, yogaMessage=yogaMessage, yogaTimeMessage=yogaTimeMessage)
        return displayItems

serializers.py

from .models import DisplayItems

class DisplayItemsSerializer(serializers.ModelSerializer):
    yesNo = serializers.CharField(max_length=10)
    yogaMessage = serializers.CharField(max_length=50)
    yogaTimeMessage = serializers.CharField(max_length=100)

    class Meta:
        model = DisplayItems
        fields = ('__all__')

urls.py

from .views import DisplayItemsViews
from django.contrib import admin
urlpatterns = [
    path(r'^admin/', admin.site.urls),
    path(r'^zzz/', DisplayItemsViews.as_view()),
]

views.py

from rest_framework.response import Response
from rest_framework import status
from .serializers import DisplayItemsSerializer
from .models import DisplayItems


class DisplayItemsViews(APIView):
    def get(self, request):
        displayItems = DisplayItems.create("YES!", "There's yoga today", "At 2:00 pm Eastern Time")
        serializer = DisplayItemsSerializer(displayItems)
        return Response({"status": "success", "data": serializer.data}, status=status.HTTP_200_OK)

我正在尝试 运行 的 url 是 http://127.0.0.1:8000/zzz/

我已经阅读了几乎所有相关的 Whosebug 帖子,但似乎无法理解我遗漏了什么。

三件事:

1 - 您是否在 settings.pyINSTALLED_APPS 中安装了 rest_framework

2 - urls.py 中的 path() 不应包含 r'^ 部分,这意味着正确的路径是 path('admin/', admin.site.urls)path('zzz/', DisplayItemsViews.as_view())。这是 Django 建议使用 url() 而不是 path()

时的旧行为

3 - 我假设您已经在 views.py 中导入了 APIView,如果没有,您需要 from rest_framework.views import APIView

编辑:我的工作本地版本。

views.py

from rest_framework.response import Response
from rest_framework import status
from rest_framework.views import APIView

from .serializers import DisplayItemsSerializer
from .models import DisplayItems


class DisplayItemsViews(APIView):
    def get(self, request):
        displayItems = DisplayItems.create("YES!", "There's yoga today", "At 2:00 pm Eastern Time")
        serializer = DisplayItemsSerializer(displayItems)
        return Response({"status": "success", "data": serializer.data}, status=status.HTTP_200_OK)

settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'base',
    'rest_framework'
]

urls.py

from django.contrib import admin
from django.urls import path

from base.views import DisplayItemsViews

urlpatterns = [
    path('admin/', admin.site.urls),
    path('zzz/', DisplayItemsViews.as_view())

]

models.py

class DisplayItems(models.Model):
    yesNo = models.CharField(max_length=10)
    yogaMessage = models.CharField(max_length=50)
    yogaTimeMessage = models.CharField(max_length=100)

    @classmethod
    def create(cls, yesNo, yogaMessage, yogaTimeMessage):
        displayItems = cls(yesNo=yesNo, yogaMessage=yogaMessage, yogaTimeMessage=yogaTimeMessage)
        return displayItems

serializers.py

from rest_framework import serializers

from .models import DisplayItems

class DisplayItemsSerializer(serializers.ModelSerializer):
    yesNo = serializers.CharField(max_length=10)
    yogaMessage = serializers.CharField(max_length=50)
    yogaTimeMessage = serializers.CharField(max_length=100)

    class Meta:
        model = DisplayItems
        fields = ('__all__')

结果在 localhost:8080/zzz