您现在的位置是: 网站首页 >Django >Vue+Django REST framework前后端分离生鲜电商 Django

【Vue+DRF生鲜电商】20.使用DRF自动生成文档的功能

admin2019年5月31日 11:26 Django | Vue 251人已围观

Vue+Django REST framework前后端分离生鲜电商简介 Vue+Django REST framework 打造前后端分离的生鲜电商项目(慕课网视频)。 Github地址:https://github.com/xyliurui/DjangoOnlineFreshSupermarket ; Django版本:2.2、djangorestframework:3.9.2。 前端Vue模板可以直接联系我拿。

## DRF Api文档自动生成功能 访问 https://www.django-rest-framework.org/topics/documenting-your-api/ 可以看到使用说明 在使用视图集时,应该使用相关的操作名称作为分隔符。 首先 urls.py 需要加上对应的路由 ```python # DjangoOnlineFreshSupermarket/urls.py # ...... # DRF文档 path('docs/', include_docs_urls(title='DRF文档')), ``` 之后就可以访问 http://127.0.0.1:8000/docs/ 查看文档 ![BLOG_20190531_113118_63](/media/blog/images/2019/05/BLOG_20190531_113118_63.png "博客图集BLOG_20190531_113118_63.png") ### categories文档 http://127.0.0.1:8000/docs/#categories ```python # apps/goods/views.py class CategoryViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet): # 注释很有用,在drf文档中 """ list: 商品分类列表 retrieve: 商品分类详情 """ ``` ![BLOG_20190531_113108_83](/media/blog/images/2019/05/BLOG_20190531_113108_83.png "博客图集BLOG_20190531_113108_83.png") ### goods文档 http://127.0.0.1:8000/docs/#goods 很多字段描述不完整,先进行配置 list: | Parameter | Description | | -------------- | -------------------------------------------- | | `page` | A page number within the paginated result set. | | `page_size` | Number of results to return per page. | | `name` | | | `goods_desc` | | | `min_price` | | | `max_price` | | | `is_hot` | | | `top_category` | | | `search` | A search term. | | `ordering` | Which field to use when ordering the results. | ```python # apps/goods/views.py class GoodsListViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet): """ list: 显示商品列表,分页、过滤、搜索、排序 retrieve: 显示商品详情 """ ``` 分页中文描述 ```python # apps/goods/views.py from django.utils.translation import ugettext_lazy as _ class GoodsPagination(PageNumberPagination): page_size = 12 # 每一页个数,由于前段 page_query_description = _('使用分页后的页码') # 分页文档中文描述 page_size_query_param = 'page_size' page_size_query_description = _('每页返回的结果数') page_query_param = 'page' # 参数?p=xx,将其修改为page,适应前端,也方便识别 max_page_size = 36 # 最大指定每页个数 ``` 过滤字段中文显示,添加`Filter`中的`help_text`属性 ```python # apps/goods/filters.py class GoodsFilter(filters.FilterSet): """ 商品的过滤类 """ name = filters.CharFilter(field_name='name', lookup_expr='contains', help_text='分类名模糊匹配') # 包含关系,模糊匹配 goods_desc = filters.CharFilter(field_name='name', lookup_expr='contains', help_text='商品描述模糊匹配') min_price = filters.NumberFilter(field_name="shop_price", lookup_expr='gte', help_text='最低价格') # 自定义字段 max_price = filters.NumberFilter(field_name="shop_price", lookup_expr='lte', help_text='最高价格') top_category = filters.NumberFilter(method='top_category_filter', field_name='category_id', lookup_expr='=', help_text='自定义过滤某个一级分类') # 自定义过滤,过滤某个一级分类 # ...... ``` ![BLOG_20190531_113047_31](/media/blog/images/2019/05/BLOG_20190531_113047_31.png "博客图集BLOG_20190531_113047_31.png") read: | Parameter | Description | | -------------- | --------------------------------------------- | | `name` | | | `goods_desc` | | | `min_price` | | | `max_price` | | | `is_hot` | | | `top_category` | | | `search` | A search term. | | `ordering` | Which field to use when ordering the results. | 修改以上字段描述后 ![BLOG_20190531_113037_94](/media/blog/images/2019/05/BLOG_20190531_113037_94.png "博客图集BLOG_20190531_113037_94.png") ### parent_categories文档 http://127.0.0.1:8000/docs/#parent_categories ```python # apps/users/views.py class ParentCategoryViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet): """ list: 根据子类别查询父类别 retrieve: 根据子类别查询父类别详情 """ ``` ![BLOG_20190531_113011_32](/media/blog/images/2019/05/BLOG_20190531_113011_32.png "博客图集BLOG_20190531_113011_32.png") ### userfavs文档 http://127.0.0.1:8000/docs/#userfavs ```python # apps/user_operation/views.py class UserFavViewSet(mixins.CreateModelMixin, mixins.DestroyModelMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet): """ create: 用户收藏商品 destroy: 取消收藏商品 list: 显示收藏商品列表 retrieve: 根据商品id显示收藏详情 """ ``` ![BLOG_20190531_112959_41](/media/blog/images/2019/05/BLOG_20190531_112959_41.png "博客图集BLOG_20190531_112959_41.png") ![BLOG_20190531_112953_37](/media/blog/images/2019/05/BLOG_20190531_112953_37.png "博客图集BLOG_20190531_112953_37.png") ### 测试DRF文档登录 ![BLOG_20190531_112947_66](/media/blog/images/2019/05/BLOG_20190531_112947_66.png "博客图集BLOG_20190531_112947_66.png") http://127.0.0.1:8000/docs/#login-create 点击Interact,获取token ![BLOG_20190531_112939_12](/media/blog/images/2019/05/BLOG_20190531_112939_12.png "博客图集BLOG_20190531_112939_12.png") 得到的结果为 ```json { "refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTU1ODY3MDE0MCwianRpIjoiYTE1ZGYwNjc4NjRiNDlkODllNjBiZmNkNWM1ZmE1NGYiLCJ1c2VyX2lkIjoxfQ.66am2Kcn7ARQww1dKgpFqzZDrVdqiUPvPTNUArxNOTM", "access": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNTU3OTc4OTQwLCJqdGkiOiJhYjI0MDBkMzcwMDE0ZWU3ODNlNTQ2Njc5ZjUzYmUxZCIsInVzZXJfaWQiOjF9.x07yCmI1NUdMxMJ2pN-EsewN4lPoMjKTz71fckS9X8E" } ``` 然后使用这个toekn去登陆 ![BLOG_20190531_112924_43](/media/blog/images/2019/05/BLOG_20190531_112924_43.png "博客图集BLOG_20190531_112924_43.png") 在查看收藏列表,就可以正常显示了 ![BLOG_20190531_112917_82](/media/blog/images/2019/05/BLOG_20190531_112917_82.png "博客图集BLOG_20190531_112917_82.png")

很赞哦! (1)

文章交流

  • emoji
0人参与,0条评论

当前用户

未登录,点击   登录

站点信息

  • 建站时间:网站已运行657天
  • 系统信息:Linux
  • 后台程序:Python: 3.6.6
  • 网站框架:Django: 2.2.12
  • 文章统计:235 篇
  • 文章评论:40 条
  • 腾讯分析网站概况-腾讯分析
  • 百度统计网站概况-百度统计
  • 公众号:微信扫描二维码,关注我们
  • QQ群:QQ加群,下载网站的学习源码
返回
顶部
标题 换行 登录
网站