rest框架包括一个处理viewset的抽象,允许开发人员集中精力处理api交互和建模,url构造都根据常见方式自动处理。
ViewSet类 几乎和VIew类一样,不过它提供read,update这样的操作,而不是get,put。
现在来重构之前的view代码。首先把CourseList和CourseDetail重构为一个简单的CourseViewSet。
from rest_framework import viewsets
from .models import Course
from .serializer import CourseSerializer
class CourseViewSet(viewsets.ModelViewSet):
"""
This viewset automatically provides `list` and `detail` actions.
"""
queryset = Course.objects.all()
serializer_class = CourseSerializer
viewset只是带进了一组action,比如list,create等。
在url中,把http方法绑定到相关的动作上。请求get,就路由到list,请求post action,就请求道create action。
courseList = views.CourseViewSet.as_view({
"get": "list",
"post": "create"
})
courseDetail = views.CourseViewSet.as_view({
"get": "retrieve",
"put": "update",
"delete": "destroy"
})
urlpatterns = [
path(‘admin/‘, xadmin.site.urls),
path(‘course/‘, courseList,name=‘course_list‘),
path(‘course/<int:pk>/‘, courseDetail ,name=‘course_detail‘),
]
urlpatterns = format_suffix_patterns(urlpatterns)
使用routers,需要做的是使用路由器注册适当的视图集,而其余的资源连接可以使用Router类自动处理。
可见,course资源相关的,只需要一个url,其他router会自动处理。
from django.urls import path,include
from rest_framework.routers import DefaultRouter
from courses import views
import xadmin
router = DefaultRouter()
router.register(‘course‘, views.CourseViewSet)
urlpatterns = [
path(‘admin/‘, xadmin.site.urls),
path(‘‘, include(router.urls)),
]
原文:https://www.cnblogs.com/jabbok/p/10563876.html