惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
博客园 - 司徒正美
博客园 - 【当耐特】
爱范儿
爱范儿
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
人人都是产品经理
人人都是产品经理
雷峰网
雷峰网
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
宝玉的分享
宝玉的分享
V
V2EX
S
SegmentFault 最新的问题
V
Visual Studio Blog
阮一峰的网络日志
阮一峰的网络日志
Martin Fowler
Martin Fowler
Jina AI
Jina AI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园_首页
L
LangChain Blog
D
Docker
腾讯CDC

博客园 - 小默同学

C语言文件操作 makefile 文件的写法 tkinter教程 基本黑客技术 window下开机自启动.bat文件和后台启动.bat文件 django 用 uvicorn 部署 python 声音去噪处理 basis of PHP DBMA about mysql 免费文字转语音工具 折半查找python代码实现 c:\windows\temp\ccvjvr7w.o:problemfour.cpp:(.text+0x17): undefined reference to `std::basic_istream< - 小默同学 Android连接第三方模拟器 vscode下搭建springboot python jwt LCD1602代码记录 外部排序 {&quot;detail&quot;:[{&quot;loc&quot;:[&quot;body&quot;],&quot;msg&quot;:&quot;field required&quot;,&quot;type&quot;:&quot;value_error.missing&quot;}]} 防止win10系统把破解软件当成病毒自动删除keil的破解软件 ERROR 1366 (HY000): Incorrect string value: '\xC4\xE3\xBA\xC3' for column 'p - 小默同学
一篇文章极速复习drf知识点
小默同学 · 2023-02-02 · via 博客园 - 小默同学

serializers.py 文件

对象 -> json 序列化
json -> 对象 反序列化

write_only实例:

from rest_framework.serializers import ModelSerializer
from rest_framework import serializers
from myapi.models import User

class UserModelSerialzier(ModelSerializer):
    password_again = serializers.CharField(max_length=255, write_only=True)

    def validate(self, attrs):
        if attrs.get('password') != attrs.pop('password_again'):
            raise serializers.ValidationError("hello world")
        return super().validate(attrs)

    class Meta:
        model = User
        fields = '__all__'

如果添加模型中不存在的字段且不需要传入就用read_only。

视图(认证、权限、分页)

settings.py文件:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES' : (
        'rest_framework.authentication.BasicAuthentication',       # 基本认证
        'rest_framework.authentication.SessionAuthentication',     # session认证
    ),
}

views.py文件:

from rest_framework.viewsets import ModelViewSet
from myapi.serializers import UserModelSerialzier
from myapi.models import User
from rest_framework import permissions
from rest_framework import pagination

class MyPermission(permissions.BasePermission):
    def has_permission(self, request, view):
        return True

class LargeResultSetPagination(pagination.PageNumberPagination):
    page_size = 1000                    # 后端显示默认每页显示几条
    page_size_query_param = 'page_size' # 表示每页多少条
    page_query_param = "page"           # 告诉前端发送页数的关键字名,默认为"page",所以可以不写
    max_page_size = 10000               # 限制前端每页最多显示多少条,如果超过了会显示最大条数
# 这样只用访问127.0.0.1/users/?page=1&page_size=2访问时后,会显示每页两条,第一页的数据

class UserModelViewSet(ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserModelSerialzier
    permission_classes:permissions.BasePermission = (MyPermission,)
    pagination_class = LargeResultSetPagination

限流

settings.py

REST_FRAMWORK = {
    'DEFAULT_THROTTLE_CLASS':(
        'rest_framework.throttling.AnonRateThrottle',
        'rest_framework.throttling.UserRateThrottle'
    ),
    'DEFAULT_THROTTLE_RATES': {
        'anon': '100/day',
        'user': '1000/day'
    }
}