前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vue+Django2.0 restframework打造前后端分离的生鲜电商项目(3)

Vue+Django2.0 restframework打造前后端分离的生鲜电商项目(3)

作者头像
玩蛇的胖纸
发布2018-10-10 11:51:42
1.3K0
发布2018-10-10 11:51:42
举报

1.drf前期准备

1.django-rest-framework官方文档

代码语言:javascript
复制
https://www.django-rest-framework.org/
#直接百度找到的djangorestframework的官网是打不开的

2.安装依赖包

如图所示,django restframework的依赖模块,除了coreapi和django-guardian,已经在前面安装过了。

打开终端,执行安装命令

代码语言:javascript
复制
pip install django-guardian
pip install coreapi

3.将rest_framework在settings中注册

4.管理调试api的时候会用到的url配置,在urls.py中

代码语言:javascript
复制
from django.urls import path

from django.views.static import serve
from MxShop.settings import MEDIA_ROOT
from django.urls import include

import xadmin

from rest_framework.documentation import include_docs_urls

from goods.views import GoodsListView

urlpatterns = [
    path('xadmin/', xadmin.site.urls),
    path('media/<path:path>',serve,{'document_root':MEDIA_ROOT}),
    path('ueditor/',include('DjangoUeditor.urls' )),
    path('docs/',include_docs_urls(title="慕学生鲜")),
    path('api-auth/', include('rest_framework.urls')),
    path('goods/',GoodsListView.as_view(),name='goods-list'),
]

2.序列化商品数据

在goods目录下新建serializers.py文件

1.用serializers.Serializer方式序列化

代码语言:javascript
复制
from rest_framework import serializers
from goods.models import Goods,GoodsCategory

class GoodsSerializer(serializers.Serializer):
    name=serializers.CharField(required=True,max_length=100)
    click_num=serializers.IntegerField(default=0)

    def create(self, validated_data):
        return Goods.objects.create(**validated_data)

 2.用serializers.ModelSerializer方式序列化

代码语言:javascript
复制
from rest_framework import serializers
from goods.models import Goods,GoodsCategory

class GoodsCategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = GoodsCategory
        fields = '__all__'


class GoodsSerializer(serializers.ModelSerializer):
    category=GoodsCategorySerializer()
    class Meta:
        model=Goods
        #部分属性
        #fields=('name','click_num','market_price','add_time')
        #所有属性
        fields='__all__'

 3.视图封装

在urls.py中增加goods访问路由

代码语言:javascript
复制
from goods.views import GoodsListView

urlpatterns = [
   #。。。。
    path('goods/',GoodsListView.as_view(),name='goods-list'),
]

1.使用APIView+Response实现商品列表页视图

代码语言:javascript
复制
from .serializers import GoodsSerializer
from rest_framework.views import APIView
from rest_framework.response import Response

from .models import Goods
from rest_framework import status

class GoodsListView(APIView):
    """
    List all goods
    """
    def get(self, request, format=None):
        goods=Goods.objects.all()[:10]

        goods_serializer = GoodsSerializer(goods, many=True)
        return Response(goods_serializer.data)

    def post(self,request,format=None):
        serializer=GoodsSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data,status=status.HTTP_201_CREATED)
        return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)

2.使用mixins+generic实现商品列表页视图

代码语言:javascript
复制
from .serializers import GoodsSerializer
from .models import Goods
from rest_framework import mixins
from rest_framework import generics

class GoodsListView(mixins.ListModelMixin,generics.GenericAPIView):
    """
    商品列表页
    """

3.使用generics.ListAPIView实现商品列表页视图

代码语言:javascript
复制
from .serializers import GoodsSerializer
from .models import Goods
from rest_framework import generics

class GoodsListView(generics.ListAPIView):
    """
    商品列表页
    """
    queryset = Goods.objects.get_queryset().order_by('id')
    serializer_class = GoodsSerializer

 4.分页

1.全局分页:在settings中加入代码,所有的列表页,都会变成每10个一页的分页方式,显然这有很大的局限性

代码语言:javascript
复制
REST_FRAMEWORK={
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10,
}

 2.局部定制化分页:在view中定义代码

代码语言:javascript
复制
from rest_framework.pagination import PageNumberPagination

class GoodsPagination(PageNumberPagination):
    page_size = 10
    page_size_query_param = 'page_size'
    page_query_param = 'p'
    max_page_size = 100


class GoodsListView(generics.ListAPIView):
    """
    商品列表页
    """
    queryset = Goods.objects.get_queryset().order_by('id')
    serializer_class = GoodsSerializer
    pagination_class = GoodsPagination
代码语言:javascript
复制
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-09-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.drf前期准备
    • 1.django-rest-framework官方文档
      • 2.安装依赖包
        • 如图所示,django restframework的依赖模块,除了coreapi和django-guardian,已经在前面安装过了。
          • 打开终端,执行安装命令
            • 3.将rest_framework在settings中注册
              • 4.管理调试api的时候会用到的url配置,在urls.py中
              • 2.序列化商品数据
                • 在goods目录下新建serializers.py文件
                  • 1.用serializers.Serializer方式序列化
                    •  2.用serializers.ModelSerializer方式序列化
                    •  3.视图封装
                      • 在urls.py中增加goods访问路由
                        • 1.使用APIView+Response实现商品列表页视图
                          • 2.使用mixins+generic实现商品列表页视图
                            • 3.使用generics.ListAPIView实现商品列表页视图
                            •  4.分页
                              • 1.全局分页:在settings中加入代码,所有的列表页,都会变成每10个一页的分页方式,显然这有很大的局限性
                                •  2.局部定制化分页:在view中定义代码
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档