GenericViewSet继承了GenericAPIView,依然有get_queryset,get_serialize_class相关属性与方法,GenericAPIView重写了as_view方法,可以获取到HTTP的请求方法
GenericViewset结合Mixins
编辑blogs目录下的views.py
from rest_framework import mixins, viewsets from rest_framework.pagination import PageNumberPagination from .serializers import ArticleSerializer from .models import Article class StandardResultsSetPagination(PageNumberPagination): page_query_param = 'page' page_size = 15 page_size_query_param = 'page_size' max_page_size = 1000 class ArticleListViewset(mixins.ListModelMixin, mixins.CreateModelMixin, viewsets.GenericViewSet): queryset = Article.objects.all() serializer_class = ArticleSerializer pagination_class = StandardResultsSetPagination
使用routers绑定地址
1.使用普通方法绑定路由
编辑LehuXuexi目录下的urls.py,新增
from blogs.views import ArticleListViewset article_list = ArticleListViewset.as_view({'get': 'list', 'post': 'create'}) urlpatterns = [ ..., path('articles/', article_list, name='article-list'), ..., ]
2.使用routers注册绑定
为了方便路由管理,可以把所有路由注册到router里面,接下来编辑LehuXuexi目录下的urls.py
from rest_framework.routers import DefaultRouter from blogs import views as blog_views router = DefaultRouter() router.register(r'articles', blog_views.ArticleListViewset, basename='articles_viewset') urlpatterns = [ ..., #路由集合 path('', include(router.urls)), ..., ]
打开 http://localhost:8000/
地址可以看到router下所有可调用接口
API的版本管理控制
在实际项目开发中,为了记录接口的迭代,可以用版本号来管理;如果某些接口不是用Viewset实现不能注册到DefaultRouter。为了更好的管理路由新增url管理,LehuXuexi目录的urls.py新增
# 所有V1版的API api_v1_urls = router.urls + [ # 文章列表,使用generics.ListCreateAPIView实现的 path('articles0/', ArticleListView.as_view(), name='article0-list'), ] urlpatterns = [ ..., #路由集合 path('api/v1/', include(api_v1_urls)), ]
这样api/v1/不仅可以DefaultRouter的地址还可以放其他方法写的地址
版权声明:如无特殊说明,文章均为本站原创,转载请注明出处
本文链接:http://example.com/article/GenericViewSet/