Django-rest-framework

8 篇文章 0 订阅
8 篇文章 0 订阅

依赖包: coreapi, django-guardian

  1. 配置url:
    from rest_framework.documentation import include_docs_urls
    #支持文档生成的url,结尾不能加$
     url(r'docs/',include_docs_urls(title="文档")),
     # 登录用url,调试api会用到
     url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
    
  2. setting注册app: rest_framework

DefaultRouter设置url方式:

urls.py

from rest_framework.routers import DefaultRouter
from goods.views import GoodsListAPIView
router = DefaultRouter()
router.register(r'goods', GoodsListAPIView) #参数:1.url的访问字段,2.viwes中的方法名

dsf返回json数据的方式:

  • 在应用中新建serializers.py来重写serializers方法:

    from rest_framework import serializers
    from .models import Goods,GoodsCategory

    #方法1.基本序列化器,字段需要自己写

    	 name = serializers.CharField(max_length=50)
    		 ```
    
    
#方法2:全部的序列化器,会自动调出所有字段
#(外键表)
class GoodsCategorySerializer(serializers.ModelSerializer):
   class Meta:
      #Model
      model = GoodsCategory
      #把所有的属性都用上的写法
      fields = "__all__"
 #(主表)
class Goodserializer(serializers.ModelSerializer):
    #关联外键
    category = GoodsCategorySerializer()
    class Meta:
        model = Goods
        fields = '__all__'
  • 在views.py视图中调用序列serializers
    	class GoodsListAPIView(generics.ListAPIView):
    		    queryset = Goods.objects.all()
    		    serializer_class = Goodserializer
        ```
    
  • seeting中配置每页显示的数量
REST_FRAMEWORK = {
    #rest_framework目录下的pagination.py文件PageNumberPagination类
    'DEFAULT_PAGINATION_CLASS': "rest_framework.pagination.PageNumberPagination",
    # #每页显示10条数据
    'PAGE_SIZE': 2,
}
  • 配置动态显示数据,动态设置每页数量:
    views.py:
class GoodsListPagination(PageNumberPagination):
   #默认返回10条
   page_size = 10
   #每页返回多少条的参数变量
   page_size_query_param = 'page_size'
   page_query_param = "p"#页码的定义
   #最大返回100条
   # max_page_size = 100
class GoodsListAPIView(generics.ListAPIView):
    queryset = Goods.objects.all()
    serializer_class = Goodserializer
    # 添加分页配置,settings.py就可以省略了
    pagination_class = GoodsListPagination
 
 #url访问格式:http://127.0.0.1:8000/goods/?p=3&page=2
viwes中viewsets方法及过滤,模糊查找,查询,排序.
#新建filters.py重写filters方法
from django_filters import rest_framework as filters
from .models import Goods
#商品的过滤器
class GoodsFilter(filters.FilterSet):
   #最低价格
   min_price = filters.NumberFilter(name="shop_price", lookup_expr='gte')
   #最大价格
   max_price = filters.NumberFilter(name="shop_price", lookup_expr='lte')
    #模糊查询
   name = filters.CharFilter(name='name',lookup_expr='icontains')
   class Meta:
      model = Goods
      fields = [ 'min_price', 'max_price','name']
      
      
#views.py (上述views中方法的替代)
class GoodsListAPIViewSet(viewsets.GenericViewSet,mixins.ListModelMixin):
    queryset = Goods.objects.all()
    serializer_class = Goodserializer
    # 添加分页配置,settings.py就可以省略了
    pagination_class = GoodsListPagination

    #过滤器
    filter_backends = (DjangoFilterBackend,filters.OrderingFilter,filters.SearchFilter)
    filter_class = GoodsFilter
    ordering_fields = ('shop_price','add_time')
    # '^name'必须以name开头才会满足搜索条件,'=name'为精确搜索
    search_fields = ('name', 'goods_brief','goods_desc')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值