rest_framework常用设置
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')
# method 内置的方法不能满足时候,我们可以自己写自己的规则, 通过method指定函数名称 通过top_category自己定的的字段搜索- top_category = django_filters.NumberFilter(method='top_category_filter')
name = django_filters.CharFilter(name='name', lookup_expr='icontacts')
- 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)
2.获取user
- # 获取user模型
- user = self.context['request'].user
- user = request.user
- user = serializers.HiddenField(
- default=serializers.CurrentUserDefault()
- )
- from django.contrib.auth import get_user_model
- User = get_user_model()
3.返回数据
- class IndexCategorySerializer(serializers.ModelSerializer):
# 在model字段中加 related_name='brands'- brands = BrandSerializer(many=True)
- # 自己定义模型里没有的字段返回
- goods = serializers.SerializerMethodField()
- sub_cat = CategorySerializer2(many=True)
- ad_goods = serializers.SerializerMethodField()
- def get_ad_goods(self, obj):
- goods_json = {}
- ad_goods = IndexAd.objects.filter(category_id=obj.id, )
- if ad_goods:
- good_ins = ad_goods[0].goods
- goods_json = GoodsSerializer(good_ins, many=False, context={'request': self.context['request']}).data
- return goods_json
- # 已get_字段名称 自己定义方法返回数据
- def get_goods(self, obj):
- all_goods = Goods.objects.filter(Q(category_id=obj.id) | Q(category__parent_category_id=obj.id) | Q(
- category__parent_category__parent_category_id=obj.id))
- goods_serializer = GoodsSerializer(all_goods, many=True, context={'request': self.context['request']})
- return goods_serializer.data
- class Meta:
- model = GoodsCategory
- fields = "__all__"
4.rest framework关闭csrf_token认证
- 1.创建middleware.py
- 2.写入
- from django.utils.deprecation import MiddlewareMixin
- class DisableCSRFCheck(MiddlewareMixin):
- def process_request(self, request):
- setattr(request, '_dont_enforce_csrf_checks', True)
- 3.在setting中注册中间件
- 'database.middleware.DisableCSRFCheck'
aa
rest_framework常用设置的更多相关文章
- pycharm快捷键及一些常用设置
pycharm快捷键及一些常用设置,有需要的朋友可以参考下. Alt+Enter 自动添加包 Ctrl+t SVN更新 Ctrl+k SVN提交 Ctrl + / 注释(取消注释)选择的行 Ctrl+ ...
- PLSQLDeveloper 常用设置
PLSQL Developer常用设置及快捷键 1.登录后默认自动选中My Objects (已验证可用) 默认情况下,PLSQL Developer登录后,Brower里会选择All obj ...
- 百度编辑器UEditor常用设置函数大全
在线文档对UEditor说明不够全面,收集了一些常用的方法和基本设置,以供参考.1.创建编辑器UE.getEditor('editor', { initialFrameWidth:"100% ...
- IntelliJ IDEA 常用设置讲解
说明 IntelliJ IDEA 有很多人性化的设置我们必须单独拿出来讲解,也因为这些人性化的设置让我们这些 IntelliJ IDEA 死忠粉更加死心塌地使用它和分享它. 常用设置 IntelliJ ...
- pycharm快捷键、常用设置、包管理
pycharm快捷键.常用设置.包管理 在PyCharm安装目录 /opt/pycharm-3.4.1/help目录下可以找到ReferenceCard.pdf快捷键英文版说明 or 打开pychar ...
- 《Pro Express.js》学习笔记——Express框架常用设置项
Express 设置 系统设置 1. 无须再定义,大部分有默认值,可不设置 2. 常用设置 env view cache view engine views trust pro ...
- Source Insight 常用设置和快捷键大全
Source Insight 常用设置和快捷键大全 退出程序 : Alt+F4 重画屏幕 : Ctrl+Alt+Space 完成语法 : Ctrl+E 复制一行 : Ctrl+K 恰好复制该位置右边的 ...
- eclipse 常用设置,常用快捷键修改
eclipse 常用设置,常用快捷键,myeclipse和eclipse类似' 首先打开eclipse的首选项-->搜索 keys' 常用的一些快捷键: Ctrl+1 快速修复(最经典的快捷键, ...
- UIButton、UILabel、UITextField 初学者需要了解的基本定义和常用设置
以下是三个IOS开发中最常用的控件,作为IOS基础学习教程知识 ,初学者需要了解其基本定义和常用设置,以便在开发在熟练运用. UIButton按钮 第一.UIButton的定义 UIButton * ...
随机推荐
- ASP.NET中出现内存溢出错误System.OutOfMemoryException
原因1:数据库服务器性能问题导致内存不够用,从而引起内存溢出 原因2:在IIS的应用程序池中进行配置,引起IIS服务器的内存分配问题,从而引起内存溢出 分析: 32位操作系统的寻址空间是 ...
- Java六大必须理解的问题
Java六大必须理解的问题 对于这个系列里的问题,每个学Java的人都应该搞懂.当然,如果只是学Java玩玩就无所谓了.如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列.内容 ...
- SpringMVC + MyBatis分库分表方案
mybatis作为流行的ORM框架,项目实际使用过程中可能会遇到分库分表的场景.mybatis在分表,甚至是同主机下的分库都可以说是完美支持的,只需要将表名或者库名作为动态参数组装sql就能够完成.但 ...
- 通过父元素的hover控制子元素的显示
.searbar_content_box:hover .searchBar_checked_detail_box{ display:block}
- php环境和使用方法
下载好所需要的软件 (含phpmywind phpstudy navicat for my sql ) 如果Navicat 的试用期过期,请使用通杀navicat 的通杀Navica11_2-XX ...
- java-IO流-字符流-FileReader、FileWriter、自定义小数组的拷贝、BufferedReader、BufferedWriter、readLine()和newLine()方法、LineNumberReader、使用指定的码表读写字符
###21.01_IO流(字符流FileReader) * 1.字符流是什么 * 字符流是可以直接读写字符的IO流 * 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要 ...
- 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 ...
- CSS hack 360浏览器 极速模式与兼容模式
自动切换浏览器模式对于360浏览器7.1版本有效,8.1无效 <%@ Page Language="C#" AutoEventWireup="true" ...
- 迅雷磁力链接转BT种子工具
种子文件目录:C:\Users\jifeng\AppData\Local\Temp\magnetex MagnetEx.exe 从迅雷5.8支持磁力链接的无视受限资源版提取 MagnetEx.exe ...
- Mvc项目实例 MvcMusicStore 五
Mvc项目实例 MvcMusicStore 一Mvc项目实例 MvcMusicStore 二Mvc项目实例 MvcMusicStore 三Mvc项目实例 MvcMusicStore 四Mvc项目实例 ...