1.常用配置

import django_filters

  1. from django.db.models import Q
  2. from rest_framework.pagination import PageNumberPagination
  3. from rest_framework_extensions.cache.mixins import CacheResponseMixin
  4. from rest_framework import mixins
  5. from rest_framework import viewsets
  6. from django_filters.rest_framework import DjangoFilterBackend
  7. from rest_framework import filters
  8. from rest_framework_jwt.authentication import JSONWebTokenAuthentication
  9. from rest_framework import permissions
  10.  
  11. from .models import Goods
  12.  
  13. class GoodsFilter(django_filters.rest_framework.FilterSet):
  14. """
  15. 商品的过滤类
  16. """
  17. pricemin = django_filters.NumberFilter(field_name='shop_price', help_text="最低价格", lookup_expr='gte')
  18. pricemax = django_filters.NumberFilter(field_name='shop_price', lookup_expr='lte')
    # method 内置的方法不能满足时候,我们可以自己写自己的规则, 通过method指定函数名称 通过top_category自己定的的字段搜索
  19. top_category = django_filters.NumberFilter(method='top_category_filter')
    # contacts 模糊查询 i表示忽然大小写
      name = django_filters.CharFilter(name='name', lookup_expr='icontacts')
  1. def top_category_filter(self, queryset, name, value):
  2. return queryset.filter(Q(category_id=value) | Q(category__parent_category_id=value) | Q(
  3. category__parent_category__parent_category_id=value))
  4.  
  5. class Meta:
  6. model = Goods
  7. fields = ['pricemin', 'pricemax', 'is_hot', 'is_new']
  8.  
  9. class GoodsPagination(PageNumberPagination):
  10. '''
  11. 分页设置
  12. '''
  13. page_size = 10
  14. page_size_query_param = 'page_size'
  15. page_query_param = "page"
  16. max_page_size = 100
  17.  
  18. class IsOwnerOrReadOnly(permissions.BasePermission):
  19. """
  20. 权限配置
  21. """
  22.  
  23. # 先执行 has_permission 任何执行has_object_permission 函数
  24. def has_permission(self, request, view):
  25. pass
  26.  
  27. def has_object_permission(self, request, view, obj):
  28. # Read permissions are allowed to any request,
  29. # so we'll always allow GET, HEAD or OPTIONS requests.
  30. if request.method in permissions.SAFE_METHODS:
  31. return True
  32.  
  33. # Instance must have an attribute named `owner`.
  34. return obj.user == request.user
  35.  
  36. # 缓存 setting配置
  37. REST_FRAMEWORK_EXTENSIONS = {
  38. # 缓存时间
  39. 'DEFAULT_CACHE_RESPONSE_TIMEOUT': 60 * 60,
  40. # 缓存存储
  41. 'DEFAULT_USE_CACHE': 'default',
  42. }
  43.  
  44. # CacheResponseMixin 缓存
  45. class GoodsListViewSet(CacheResponseMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
  46. """
  47. 商品列表页, 分页, 搜索, 过滤, 排序
  48. """
  49. # throttle_classes = (UserRateThrottle, )
  50. queryset = Goods.objects.all()
  51. serializer_class = GoodsSerializer
  52. # 分页配置
  53. pagination_class = GoodsPagination
  54. # 登入认证
  55. authentication_classes = (JSONWebTokenAuthentication,)
  56. # 过滤配置 DjangoFilterBackend 搜索配置SearchFilter 排序配置OrderingFilter
  57. filter_backends = (DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter)
  58. # 过滤
  59. filter_class = GoodsFilter
  60. # 搜索
  61. search_fields = ('name', 'goods_brief', 'goods_desc')
  62. # 排序
  63. ordering_fields = ('sold_num', 'shop_price')
  64. # 权限认证 IsAuthenticated允许任何认证用户访问 IsAuthenticatedOrReadOnly为验证身份用户可以读
  65. permission_classes = (permissions.IsAuthenticated, IsOwnerOrReadOnly)

2.获取user

  1. # 获取user模型
  2. user = self.context['request'].user
  3. user = request.user
  4. user = serializers.HiddenField(
  5. default=serializers.CurrentUserDefault()
  6. )
  7. from django.contrib.auth import get_user_model
  8. User = get_user_model()

3.返回数据

  1. class IndexCategorySerializer(serializers.ModelSerializer):
       # 在model字段中加 related_name='brands'
  2. brands = BrandSerializer(many=True)
  3. # 自己定义模型里没有的字段返回
  4. goods = serializers.SerializerMethodField()
  5. sub_cat = CategorySerializer2(many=True)
  6. ad_goods = serializers.SerializerMethodField()
  7.  
  8. def get_ad_goods(self, obj):
  9. goods_json = {}
  10. ad_goods = IndexAd.objects.filter(category_id=obj.id, )
  11. if ad_goods:
  12. good_ins = ad_goods[0].goods
  13. goods_json = GoodsSerializer(good_ins, many=False, context={'request': self.context['request']}).data
  14. return goods_json
  15. # 已get_字段名称 自己定义方法返回数据
  16. def get_goods(self, obj):
  17. all_goods = Goods.objects.filter(Q(category_id=obj.id) | Q(category__parent_category_id=obj.id) | Q(
  18. category__parent_category__parent_category_id=obj.id))
  19. goods_serializer = GoodsSerializer(all_goods, many=True, context={'request': self.context['request']})
  20. return goods_serializer.data
  21.  
  22. class Meta:
  23. model = GoodsCategory
  24. fields = "__all__"

4.rest framework关闭csrf_token认证

  1. 1.创建middleware.py
  2. 2.写入
  3. from django.utils.deprecation import MiddlewareMixin
  4.  
  5. class DisableCSRFCheck(MiddlewareMixin):
  6. def process_request(self, request):
  7. setattr(request, '_dont_enforce_csrf_checks', True)
  8. 3.setting中注册中间件
  9. 'database.middleware.DisableCSRFCheck'

  

aa

rest_framework常用设置的更多相关文章

  1. pycharm快捷键及一些常用设置

    pycharm快捷键及一些常用设置,有需要的朋友可以参考下. Alt+Enter 自动添加包 Ctrl+t SVN更新 Ctrl+k SVN提交 Ctrl + / 注释(取消注释)选择的行 Ctrl+ ...

  2. PLSQLDeveloper 常用设置

    PLSQL Developer常用设置及快捷键   1.登录后默认自动选中My Objects (已验证可用)   默认情况下,PLSQL Developer登录后,Brower里会选择All obj ...

  3. 百度编辑器UEditor常用设置函数大全

    在线文档对UEditor说明不够全面,收集了一些常用的方法和基本设置,以供参考.1.创建编辑器UE.getEditor('editor', { initialFrameWidth:"100% ...

  4. IntelliJ IDEA 常用设置讲解

    说明 IntelliJ IDEA 有很多人性化的设置我们必须单独拿出来讲解,也因为这些人性化的设置让我们这些 IntelliJ IDEA 死忠粉更加死心塌地使用它和分享它. 常用设置 IntelliJ ...

  5. pycharm快捷键、常用设置、包管理

    pycharm快捷键.常用设置.包管理 在PyCharm安装目录 /opt/pycharm-3.4.1/help目录下可以找到ReferenceCard.pdf快捷键英文版说明 or 打开pychar ...

  6. 《Pro Express.js》学习笔记——Express框架常用设置项

    Express 设置 系统设置 1.       无须再定义,大部分有默认值,可不设置 2.       常用设置 env view cache view engine views trust pro ...

  7. Source Insight 常用设置和快捷键大全

    Source Insight 常用设置和快捷键大全 退出程序 : Alt+F4 重画屏幕 : Ctrl+Alt+Space 完成语法 : Ctrl+E 复制一行 : Ctrl+K 恰好复制该位置右边的 ...

  8. eclipse 常用设置,常用快捷键修改

    eclipse 常用设置,常用快捷键,myeclipse和eclipse类似' 首先打开eclipse的首选项-->搜索 keys' 常用的一些快捷键: Ctrl+1 快速修复(最经典的快捷键, ...

  9. UIButton、UILabel、UITextField 初学者需要了解的基本定义和常用设置

     以下是三个IOS开发中最常用的控件,作为IOS基础学习教程知识 ,初学者需要了解其基本定义和常用设置,以便在开发在熟练运用. UIButton按钮 第一.UIButton的定义 UIButton * ...

随机推荐

  1. ASP.NET中出现内存溢出错误System.OutOfMemoryException

    原因1:数据库服务器性能问题导致内存不够用,从而引起内存溢出 原因2:在IIS的应用程序池中进行配置,引起IIS服务器的内存分配问题,从而引起内存溢出   分析:      32位操作系统的寻址空间是 ...

  2. Java六大必须理解的问题

    Java六大必须理解的问题 对于这个系列里的问题,每个学Java的人都应该搞懂.当然,如果只是学Java玩玩就无所谓了.如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列.内容 ...

  3. SpringMVC + MyBatis分库分表方案

    mybatis作为流行的ORM框架,项目实际使用过程中可能会遇到分库分表的场景.mybatis在分表,甚至是同主机下的分库都可以说是完美支持的,只需要将表名或者库名作为动态参数组装sql就能够完成.但 ...

  4. 通过父元素的hover控制子元素的显示

    .searbar_content_box:hover .searchBar_checked_detail_box{ display:block}

  5. php环境和使用方法

    下载好所需要的软件 (含phpmywind  phpstudy  navicat for my sql ) 如果Navicat 的试用期过期,请使用通杀navicat 的通杀Navica11_2-XX ...

  6. java-IO流-字符流-FileReader、FileWriter、自定义小数组的拷贝、BufferedReader、BufferedWriter、readLine()和newLine()方法、LineNumberReader、使用指定的码表读写字符

    ###21.01_IO流(字符流FileReader) * 1.字符流是什么     * 字符流是可以直接读写字符的IO流     * 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要 ...

  7. hdu5001 Walk 概率DP

    I used to think I could be anything, but now I know that I couldn't do anything. So I started travel ...

  8. CSS hack 360浏览器 极速模式与兼容模式

    自动切换浏览器模式对于360浏览器7.1版本有效,8.1无效 <%@ Page Language="C#" AutoEventWireup="true" ...

  9. 迅雷磁力链接转BT种子工具

    种子文件目录:C:\Users\jifeng\AppData\Local\Temp\magnetex MagnetEx.exe 从迅雷5.8支持磁力链接的无视受限资源版提取 MagnetEx.exe ...

  10. Mvc项目实例 MvcMusicStore 五

    Mvc项目实例 MvcMusicStore 一Mvc项目实例 MvcMusicStore 二Mvc项目实例 MvcMusicStore 三Mvc项目实例 MvcMusicStore 四Mvc项目实例 ...