您现在的位置是: 网站首页 >Django >Vue+Django REST framework前后端分离生鲜电商 Django
【Vue+DRF生鲜电商】08.ViewSets & Routers显示商品列表
admin2019年4月24日 17:45 【Django | Python | Vue 】 1627人已围观
Vue+Django REST framework前后端分离生鲜电商简介 Vue+Django REST framework 打造前后端分离的生鲜电商项目(慕课网视频)。 Github地址:https://github.com/xyliurui/DjangoOnlineFreshSupermarket ; Django版本:2.2、djangorestframework:3.9.2。 前端Vue模板可以直接联系我拿。
### ViewSets & Routers显示商品列表 `ViewSet`类几乎与视图类相同,只是它们提供了诸`如read`或`update`之类的操作,而不是诸如`get`或`put`之类的方法处理程序。 `ViewSet`类只在最后时刻绑定到一组方法处理程序,当它被实例化为一组视图时,通常通过使用一个`Router`类来处理为您定义URL conf的复杂性。 #### 使用ViewSets 去除`GoodsListView(generics.ListAPIView)`,使用`ViewSet`来替换该功能 ```python class GoodsListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): """ 显示商品列表 """ queryset = Goods.objects.all() serializer_class = GoodsSerializer pagination_class = GoodsPagination ``` 默认情况下`GenericViewSet`类不提供任何操作,但是包含了基本的通用视图行为集,例如`get_object` 和 `get_queryset`方法。 也就是之前继承的`viewsets.GenericViewSet`没有定义get、post方法,所以还需要使用之前的`mixin` 处理程序方法只在定义URLConf时绑定到操作。为了了解底层发生了什么,首先显式地从`viewset`创建一组视图。 在主 urls.py 中将ViewSet类**绑定**到一组具体的视图中。 ```python from goods.views import GoodsListView, GoodsListViewSet goods_list = GoodsListViewSet.as_view({ 'get': 'list', }) urlpatterns = [ path('admin/', admin.site.urls), path('api-auth/', include('rest_framework.urls')), # drf 认证url path('ckeditor/', include('ckeditor_uploader.urls')), # 配置富文本编辑器url path('goods/', goods_list, name='goods_list'), # DRF文档 path('docs/', include_docs_urls(title='DRF文档')), ] ``` 请注意我们如何通过将http方法绑定到每个视图所需的操作来从每个ViewSet类创建多个视图。上面的`get`方法绑定到`ListModelMixin(object)`中的`list`操作。 现在已经将资源绑定到具体的视图中,可以像往常一样用URL conf注册视图`goods_list`。 刷新 http://127.0.0.1:8000/goods/ 也会返回相同的内容 ![BLOG_20190424_174721_89](/media/blog/images/2019/04/BLOG_20190424_174721_89.png "博客图集BLOG_20190424_174721_89.png") #### 使用Routers 因为使用的是`ViewSet`类而不是`View`类,所以实际上不需要自己设计URL。 可以使用`Router`类自动处理将资源连接到视图和URL的约定。 需要做的就是用路由器注册适当的视图集,然后让它完成剩下的工作。 ```python from rest_framework.routers import DefaultRouter from goods.views import GoodsListView, GoodsListViewSet # 创建一个路由器并注册我们的视图集 router = DefaultRouter() router.register(r'goods', GoodsListViewSet) # 配置goods的url urlpatterns = [ path('admin/', admin.site.urls), path('api-auth/', include('rest_framework.urls')), # drf 认证url path('ckeditor/', include('ckeditor_uploader.urls')), # 配置富文本编辑器url path('', include(router.urls)), # API url现在由路由器自动确定。 # DRF文档 path('docs/', include_docs_urls(title='DRF文档')), ] ``` 向路由器注册视图集与提供urlpattern类似。 包括两个参数 - 视图的URL前缀和视图集本身。 正在使用的`DefaultRouter`类也会**自动创建API根视图**。 访问 http://127.0.0.1:8000/goods/ ,可以看到Api Root ![BLOG_20190424_174701_21](/media/blog/images/2019/04/BLOG_20190424_174701_21.png "博客图集BLOG_20190424_174701_21.png") ![BLOG_20190424_174654_52](/media/blog/images/2019/04/BLOG_20190424_174654_52.png "博客图集BLOG_20190424_174654_52.png") #### 继承关系 ##### mixins - mixins - `CreateModelMixin`:创建一个模型实例。`POST` - `ListModelMixin`:列出查询集。`GET` - `RetrieveModelMixin`:检索模型实例。`GET` - `UpdateModelMixin`:更新一个模型实例。`UPDATE` - `DestroyModelMixin`:销毁一个模型实例。`DELETE` ##### viewsets 视图集本质上只是一种基于类的视图,它不提供任何方法处理程序,如`get()`、 `post()`等…而是有一些操作,如`list()`、`retrieve()`、`create()`等…… 操作仅在实例化视图时绑定到方法。 ```python user_list = UserViewSet.as_view({'get': 'list'}) user_detail = UserViewSet.as_view({'get': 'retrieve'}) ``` 通常,不直接从viewset实例化视图,而是用router注册viewset,并自动确定URL conf。 ```python router = DefaultRouter() router.register(r'users', UserViewSet, 'user') urlpatterns = router.urls ``` - viewsets - **ViewSetMixin**:重写`.as_view()`,使其接受执行的`actions`关键字;将HTTP方法绑定到资源上的操作。例如,要创建一个绑定`GET`和`POST`方法的具体视图到`list`和`create`操作…`view = MyViewSet.as_view({'get': 'list', 'post': 'create'})` - **ViewSet(ViewSetMixin, views.APIView)**:默认情况下,基本`ViewSet`类不提供任何操作。 - **GenericViewSet(ViewSetMixin, generics.GenericAPIView)**:默认情况下`GenericViewSet`类不提供任何操作,但是包含了基本的通用视图行为集,例如`get_object`和`get_queryset`方法。 - **ReadOnlyModelViewSet(mixins.RetrieveModelMixin, mixins.ListModelMixin, GenericViewSet)**:提供默认的`list()`和`retrieve()`操作的viewset。 - **ModelViewSet(mixins.CreateModelMixin, mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, mixins.ListModelMixin, GenericViewSet)**:提供默认值的`create()`, `retrieve()`, `update()`, `partial_update()`的视图集, `destroy()` and `list()` 操作。 ##### generics 还未写
很赞哦! (3)
相关文章
文章交流
- emoji
当前用户
未登录,点击 登录专题目录
- 【Vue+DRF生鲜电商】01.课程结构介绍,开发环境搭建
- 【Vue+DRF生鲜电商】02.设置users、goods、trade、user_operation数据库并导入原始数据
- 【Vue+DRF生鲜电商】03.Restful API基础
- 【Vue+DRF生鲜电商】04.Vue项目结构介绍
- 【Vue+DRF生鲜电商】05.商品列表序列化普通方法
- 【Vue+DRF生鲜电商】06.DRF环境配置,使用Serializer类序列化商品列表
- 【Vue+DRF生鲜电商】07.序列化商品分页功能
- 【Vue+DRF生鲜电商】08.ViewSets & Routers显示商品列表
- 【Vue+DRF生鲜电商】09.使用DRF的filter过滤商品列表
- 【Vue+DRF生鲜电商】10.商品分类层级获取,Vue跨域请求商品分类
- 【Vue+DRF生鲜电商】11.Vue展示左侧分类、面包屑、排序、商品列表、分页
- 【Vue+DRF生鲜电商】12.用户登录之DRF Token认证登录原理和使用方法
- 【Vue+DRF生鲜电商】13.JWT用户认证原理配置,Vue登录接口调试
- 【Vue+DRF生鲜电商】14.用户注册发送短信验证码、登录字段验证
- 【Vue+DRF生鲜电商】15.用户注册使用信号量实现密码加密
- 【Vue+DRF生鲜电商】16.Vue中注册、退出功能交互
- 【Vue+DRF生鲜电商】17.DRF实现商品详情及热卖商品接口,Vue中显示商品详情和热卖
- 【Vue+DRF生鲜电商】18.用户收藏、取消收藏商品接口实现
- 【Vue+DRF生鲜电商】19.用户添加、删除收藏权限处理,根据商品id显示收藏,在Vue中实现收藏功能
- 【Vue+DRF生鲜电商】20.使用DRF自动生成文档的功能
- 【Vue+DRF生鲜电商】21.用户中心个人资料的展示,并在Vue中实现个人资料更新
- 【Vue+DRF生鲜电商】22.个人中心显示用户收藏功能,对收藏进行删除
- 【Vue+DRF生鲜电商】23.个人中心用户留言功能
- 【Vue+DRF生鲜电商】24.用户收货地址功能
- 【Vue+DRF生鲜电商】25.商品添加购物车接口功能,Vue和购物车联调
- 【Vue+DRF生鲜电商】26.使用Pycharm远程代码调试服务器Django代码
- 【Vue+DRF生鲜电商】26.订单接口功能,Vue和订单接口联调
- 【Vue+DRF生鲜电商】27.支付宝公钥,私钥,沙箱环境配置
- 【Vue+DRF生鲜电商】28.支付宝支付接口类解读,支付逻辑编辑
- 【Vue+DRF生鲜电商】29.线上服务支付宝接口和Vue联调,Django代理Vue运行
- 【Vue+DRF生鲜电商】30.首页轮播图、新品展示功能
- 【Vue+DRF生鲜电商】31.首页商品按分类显示推荐功能
- 【Vue+DRF生鲜电商】32.商品操作后计数更改,热搜榜关键字功能实现
- 【Vue+DRF生鲜电商】33.数据缓存、接口访问限速功能
- 【Vue+DRF生鲜电商】34.第三方登录(微博、qq和微信)之微博登录登录测试
- 【Vue+DRF生鲜电商】35.使用social-app-django集成第三方登录