Django, url не найден 404

#django #django-rest-framework

#джанго #django-rest-фреймворк

Вопрос:

Структура папок проекта

Я новичок в джанго. Я пытаюсь создать простую конечную точку api rest, но получаю 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/

Я прочитал почти все соответствующие сообщения stackoverflow, но, похоже, не могу понять, чего мне не хватает.

Ответ №1:

Три вещи:

1 — Установили ли вы rest_framework в своем INSTALLED_APPS из ваших settings.py ?

2 — Ваш path() в вашем urls.py не должен содержать r'^ часть, означающую, что правильные пути- path('admin/', admin.site.urls) и path('zzz/', DisplayItemsViews.as_view()) . Это старое поведение с тех пор, как Джанго предложил использовать url() вместо path()

3 — Я предполагаю , что вы ввели APIView свой views.py , если нет, вам нужно 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__')  

И результат на локальном хосте:8080/zzz Изображение DRF

Комментарии:

1. Спасибо, Джо, за ваш ответ 1. да, у меня есть право settings.py 2. Я пробовал с и без. Теперь я их удалил. 3. Да, у меня действительно есть этот смысл. Не уверен, почему я не поместил его в раздел кода Все еще 404

2. Хм, я воссоздал решение barebones, используя ваш код, и смог получить ожидаемый результат от этой конечной точки. Я обновлю свой ответ полным кодом, чтобы вы могли увидеть, выделяется ли что-нибудь.

3. @zebabasu Я обновил свой ответ. Но, глядя на структуру вашего проекта, кажется, что вам не хватает приложения. Ты это сделал manage.py startapp app_name ? Представления/модели/и т.д. Должны находиться в папке приложения, а не в папке вашего проекта.

4. Я снова переделал свой проект, и это сработало ! Спасибо

5. @zeba basu отметьте этот ответ как принятый.