# 06.基于ModelViewSet类的视图
[toc]{type: "ol", level: [2, 3, 4, 5]}
### 创建路由
```python
### shop.urls
path('category/list/model/viewset/', CategoryModelViewSet.as_view(
{'get': 'list', 'post': 'create'}), name='categoryListModelViewSet'),
re_path(r'^category/detail/model/viewset/(?P<pk>\d+)/$', CategoryModelViewSet.as_view(
{'get': 'retrieve', 'put': 'update', 'patch': 'update', 'delete': 'destroy'}), name='categoryDetailModelViewSet'),
```
<br><br>
### 创建视图
```python
### shop.views
class CategoryModelViewSet(viewsets.ModelViewSet):
queryset = Category.objects.all()
serializer_class = CategorySerializer
```
<br><br>
### 生成自定义路由
```python
### shop.views
from rest_framework.decorators import action
class CategoryViewSets(viewsets.ModelViewSet):
queryset = Category.objects.all()
serializer_class = CategorySerializer
# method: 允许的方法
# detail: 处理单个还是多个数据
@action(methods=['GET'], detail=False, )
# 自定义方法 加入装饰器 自动生成路由
def get_latest_category(self, request):
seria = CategorySerializer(instance=Category.objects.all(), many=True)
return Response(data=seria.data, status=status.HTTP_200_OK)
```
<br><br>
### 访问路由
http://127.0.0.1:8000/shop/api/v1/categorys/get_latest_category/
![drf](imgs/04.png)