码迷,mamicode.com
首页 > 其他好文 > 详细

rest_framework常用设置

时间:2019-03-28 13:51:11      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:import   分页   extension   elm   text   perm   div   retrieve   arch   

1.常用配置

import django_filters
from django.db.models import Q
from rest_framework.pagination import PageNumberPagination
from rest_framework_extensions.cache.mixins import CacheResponseMixin
from rest_framework import mixins
from rest_framework import viewsets
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import filters
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
from rest_framework import permissions

from .models import Goods


class GoodsFilter(django_filters.rest_framework.FilterSet):
    """
    商品的过滤类
    """
    pricemin = django_filters.NumberFilter(field_name=‘shop_price‘, help_text="最低价格", lookup_expr=‘gte‘)
    pricemax = django_filters.NumberFilter(field_name=‘shop_price‘, lookup_expr=‘lte‘)
    top_category = django_filters.NumberFilter(method=‘top_category_filter‘)

    def top_category_filter(self, queryset, name, value):
        return queryset.filter(Q(category_id=value) | Q(category__parent_category_id=value) | Q(
            category__parent_category__parent_category_id=value))

    class Meta:
        model = Goods
        fields = [‘pricemin‘, ‘pricemax‘, ‘is_hot‘, ‘is_new‘]


class GoodsPagination(PageNumberPagination):
    ‘‘‘
    分页设置
    ‘‘‘
    page_size = 10
    page_size_query_param = ‘page_size‘
    page_query_param = "page"
    max_page_size = 100


class IsOwnerOrReadOnly(permissions.BasePermission):
    """
    权限配置
    """

    # 先执行 has_permission 任何执行has_object_permission 函数
    def has_permission(self, request, view):
        pass

    def has_object_permission(self, request, view, obj):
        # Read permissions are allowed to any request,
        # so we‘ll always allow GET, HEAD or OPTIONS requests.
        if request.method in permissions.SAFE_METHODS:
            return True

        # Instance must have an attribute named `owner`.
        return obj.user == request.user


# 缓存 setting配置
REST_FRAMEWORK_EXTENSIONS = {
    # 缓存时间
    ‘DEFAULT_CACHE_RESPONSE_TIMEOUT‘: 60 * 60,
    # 缓存存储
    ‘DEFAULT_USE_CACHE‘: ‘default‘,
}


# CacheResponseMixin 缓存
class GoodsListViewSet(CacheResponseMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
    """
    商品列表页, 分页, 搜索, 过滤, 排序
    """
    # throttle_classes = (UserRateThrottle, )
    queryset = Goods.objects.all()
    serializer_class = GoodsSerializer
    # 分页配置
    pagination_class = GoodsPagination
    # 登入认证
    authentication_classes = (JSONWebTokenAuthentication,)
    # 过滤配置 DjangoFilterBackend    搜索配置SearchFilter  排序配置OrderingFilter
    filter_backends = (DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter)
    # 过滤
    filter_class = GoodsFilter
    # 搜索
    search_fields = (‘name‘, ‘goods_brief‘, ‘goods_desc‘)
    # 排序
    ordering_fields = (‘sold_num‘, ‘shop_price‘)
    # 权限认证 IsAuthenticated允许任何认证用户访问   IsAuthenticatedOrReadOnly为验证身份用户可以读
    permission_classes = (permissions.IsAuthenticated, IsOwnerOrReadOnly)

  

 

 

aa

rest_framework常用设置

标签:import   分页   extension   elm   text   perm   div   retrieve   arch   

原文地址:https://www.cnblogs.com/yoyo1216/p/10614327.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!