@api_view(["GET","POST"])
def idcs_list_v2(request,format=None,*args,**kwargs):
if request.method == "GET":
queryset = Idc.objects.all()
serializer = IdcSerializer(queryset,many=True)
return Response(serializer.data)
elif request.method=="POST":
serializer = IdcSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data,status=status.HTTP_201_CREATED)
return Response(serializer.data,status=status.HTTP_400_BAD_REQUEST)
from rest_framework.response import *
@api_view(["GET","PUT","DELETE"])
def idcs_detail_V2(request,pk,*args,**kwargs):
try:
idc = Idc.objects.get(pk=pk)
except Idc.DoesNotExist:
return HttpResponse(status=status.HTTP_404_NOT_FOUND)

if request.method == "GET":
serializer= IdcSerializer(idc)
return Response(serializer.data)
# 这个response是DRF中的,不需要上面那个JsonResponse类了,并且还有对应操作界面

elif request.method == "PUT":
serializer = IdcSerializer(idc,data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors,status=status.HTTP_404_NOT_FOUND)
elif request.method=="DELETE":
idc.delete()
return Response(status=status.HTTP_204_NO_CONTENT)

from rest_framework.reverse import reverse
@api_view(["GET"])
def api_root(request,format=None,*args,**kwargs):
return Response(
{
// idcs-list 是urls中的name, 将name解析成当前对应的请求
"idcs" : reverse("idcs-list",request=request,format=format)
}
)

路由层

### 版本二
from rest_framework.urlpatterns import format_suffix_patterns
urlpatterns = [
url("^$",views.api_root),
url("^idcs/$",views.idcs_list_v2,name="idcs-list"),
url("^idcs/(?P<pk>[0-9]+)/$",views.idcs_detail_V2,name="idc_detail"),
]
urlpatterns = format_suffix_patterns(urlpatterns)

format_suffix_patterns 这个能实现效果:

4. api_view和root_api_json

4. api_view和root_api_django_02

效果如下

api root作用就是给个首页

4. api_view和root_api_json_03

4. api_view和root_api_django_04

4. api_view和root_api_django_05

4. api_view和root_api_json_06