【问题标题】:Django, url not found 404Django,找不到网址 404
【发布时间】:2022-01-10 06:40:17
【问题描述】:

Project Folder structure

我是 django 的新手。我正在尝试创建一个简单的休息 api 端点,但我得到一个 404。我确定我缺少一些设置。 模型.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

序列化器.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)

我要运行的网址是http://127.0.0.1:8000/zzz/

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

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    三件事:

    1 - 您是否在您的INSTALLED_APPS 或您的settings.py 中安装了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

    【讨论】:

    • 感谢乔的回复 1. 是的,我确实有正确的 settings.py 2. 我尝试了有无。我现在已经删除了它们。 3. 是的,我确实有那个进口。不知道,为什么我没有把它放在代码部分仍然 404
    • 嗯,我使用您的代码重新创建了一个准系统解决方案,并且能够从该端点获得预期的结果。我将用我的完整代码更新我的答案,以便您查看是否有任何突出的地方。
    • @zebabasu 我更新了我的答案。但是查看您的项目结构,您似乎缺少一个应用程序。你做了manage.py startapp app_name吗? views/models/etc 应该在 app 文件夹中,而不是在您的项目文件夹中。
    • 我重新设计了我的项目并且成功了!谢谢
    • @zeba basu 将此答案标记为已接受。
    猜你喜欢
    • 2014-01-16
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 2018-06-11
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    相关资源
    最近更新 更多