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://zhangyanc.club/subject/article/GenericViewSet/
许可协议:署名-非商业性使用 4.0 国际许可协议