Возможно, вы захотите реализовать DRF ModelSerializer и ModelViewSet , чтобы вы могли легко использовать уже имеющуюся модель Django.
Ваш сериализатор может быть таким (например, в serializers.py
):
from rest_framework import serializers
from .models import DeploymentOnUser
class DeploymentOnUserModelSerializer(serializers.ModelSerializer):
class Meta:
model = DeploymentOnUser
fields = (deployment_name, credentials, )
Вы должны добавить свою собственную проверку здесь, так же, как вы делали бы с формами Django.
Представление может быть таким (например, в views.py
):
from rest_framework import viewsets
from rest_framework.response import Response
from .models import DeploymentOnUserModel
from .serializers import DeploymentOnUserModelSerializer
class DeploymentOnUserViewSet(viewsets.ModelViewSet):
queryset = DeploymentOnUserModel.objects.all()
serializer_class = DeploymentOnUserModelSerializer
def create(self, request, *args, **kwargs):
"""overwrite this for extra actions"""
serializer = self.serializer_class(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(serializer.data)
В зависимости от вашей ситуации вам может даже потребоваться перезаписать create
- это просто показывает, как вы можете это сделать.
ModelViewSet
и ModelSerializer
удаляют большую часть кода шаблона. Однако, если вы ранее не использовали DRF, вам не помешает сначала пройти учебник
Не забудьте также зарегистрировать набор в urls.py
:
from django.conf.urls import url, include
from rest_framework import routers
from .views import DeploymentOnUserViewSet
router = routers.DefaultRouter()
router.register('deployments', DeploymentOnUserViewSet)
urlpatterns = [
# other patterns also go here
url('', include(router.urls)),
]
Затем вы можете протестировать свой API, например, выполнив POST звонок на /deployments/
.
Для модульного тестирования я в основном использую этот шаблон:
from rest_framework.test import APIRequestFactory
# Create a POST request, at the root
request = APIRequestFactory().post('/')
response = DeploymentOnUserViewSet.as_view({'post': 'create'})(request)
assert response.status_code == 200