views.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. from django.shortcuts import render
  2. from rest_framework import viewsets, status
  3. from rest_framework.response import Response
  4. from rest_framework.settings import api_settings
  5. from courses import models
  6. from courses import serializers
  7. # Create your views here.
  8. class CoursesViewSet(viewsets.ModelViewSet):
  9. def list(self, request):
  10. coursesList = models.Courses.objects.all()
  11. serializer = serializers.CoursesSerializer(coursesList, many=True)
  12. return Response(serializer.data)
  13. def retrieve(self, request, pk=None):
  14. try:
  15. courses = models.Courses.objects.get(id=pk)
  16. except models.Courses.DoesNotExist:
  17. return Response(status=status.HTTP_404_NOT_FOUND)
  18. serializer = serializers.CoursesSerializer(courses)
  19. return Response(serializer.data)
  20. def destroy(self, request, pk=None):
  21. try:
  22. courses = models.Courses.objects.get(id=pk)
  23. except models.Courses.DoesNotExist:
  24. return Response(0)
  25. courses.delete()
  26. return Response(1)
  27. def create(self, request):
  28. serializer = serializers.CoursesSerializer(data=request.data)
  29. serializer.is_valid(raise_exception=True)
  30. self.perform_create(serializer)
  31. headers = self.get_success_headers(serializer.data)
  32. return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
  33. def perform_create(self, serializer):
  34. serializer.save()
  35. def get_success_headers(self, data):
  36. try:
  37. return {'Location': str(data[api_settings.URL_FIELD_NAME])}
  38. except (TypeError, KeyError):
  39. return {}
  40. def update(self, request, pk=None):
  41. response = {"status": 100, "msg": "修改成功"}
  42. courses = models.Courses.objects.get(id=pk)
  43. courses_ser = serializers.CoursesSerializer(data=request.data, instance=courses) # 反序列化,指定要修改的数据库
  44. if courses_ser.is_valid():
  45. courses_ser.save() # 修改数据库( rest_framework封装了代码 )
  46. response["data"] = courses_ser.data
  47. else:
  48. response["error"] = courses_ser.error_messages
  49. return Response(response)