#python #django #django-rest-framework
#python #django #django-rest-framework
Вопрос:
Я настроил проект Django REST framework, но корень api не был заполнен ничем, например, набором просмотров пользователей, и я не могу получить доступ к ожидаемому URL-адресу со списком пользователей.
Существует одно приложение users с пользовательской моделью пользователя. (и проект django называется api)
главная urls.py
from django.contrib import admin
from django.urls import path, include
from rest_framework.routers import DefaultRouter
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('users.urls')),
]
пользовательское приложение urls.py
from django.contrib import admin
from django.urls import include, path
from rest_framework.routers import DefaultRouter
from users.views import CustomUserViewSet
router = DefaultRouter()
router.register("users", CustomUserViewSet, 'users')
urlpatterns = [
]
urlpatterns = router.urls
пользователи models.py
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
pass
def __str__(self):
return self.username
пользователи serialisers.py
from rest_framework.serializers import ModelSerializer
from .models import CustomUser
class CustomUserSerializer(ModelSerializer):
class Meta:
model = CustomUser
fields = '__all__'
пользовательское приложение views.py
from django.shortcuts import render
from rest_framework.viewsets import ViewSet
from .serializers import CustomUserSerializer
from .models import CustomUser
class CustomUserViewSet(ViewSet):
serializer_class = CustomUserSerializer
queryset = CustomUser.objects.all(
Ответ №1:
Если вы используете just Viewset
, вам необходимо выполнить действия.
Из документации:
Класс ViewSet не предоставляет никаких реализаций действий. Чтобы использовать класс ViewSet, вы переопределите класс и явно определите реализации действий
Вы можете добавить list
действие, как в примере:
from rest_framework.response import Response
class CustomUserViewSet(ViewSet):
serializer_class = CustomUserSerializer
queryset = CustomUser.objects.all()
def list(self, request):
queryset = CustomUser.objects.all()
serializer = CustomUserSerializer(queryset, many=True)
return Response(serializer.data)
Или (может быть, то, что вы ищете), используя что-то вроде ModelViewSet, который уже включает реализации для различных действий:
class CustomUserViewSet(viewsets.ModelViewSet):
serializer_class = CustomUserSerializer
queryset = CustomUser.objects.all()
Комментарии:
1. Спасибо, что это была глупая ошибка ModelViewSet, которую я хотел ввести. Спасибо.
Ответ №2:
В вашем случае вам нужно просто заменить
class CustomUserViewSet(ViewSet):
с
class CustomUserViewSet(viewsets.ModelViewSet):