APIview的使用
大牛博客: h'ttp://www.cnblogs.com/xiaonq/p/10124104.html
1.ModelViewSet 是对 APIView 封装
2.ModelSerializer 是对 Serializer
1.1 在 user/urls.py 中添加路由
urlpatterns = [
path('apiview/', views.UserInfoViewSet.as_view()),
]
1.2 创建user/serializers.py写序列化器
''' field参数 '''
# 1.read_only
read_only=True 表示不允许用户自己上传,只能用于api的输出,序列化的时候也不用对这个数据进行验
证,序列化返回是有改字段
# 2.write_only
write_only=True 表示在更新或创建实例时可以使用该字段,但在序列化返回时不包括该字段。
# 3.required:该字段是必需的,不能为空
required=True 反序列化(前端返回数据必须包含此字段)的时候必须提供这个字段 设置False 可以不提供
# 4.allow_null/allow_blank:该字段允许为null/空
allow_null=True 可以为null 设置False则不能为null
# 5.label:标签,用于对字段显示设置
# 6.help_text:对字段进行解释的一段文本,用于提示
# 7.style:说明字段的类型
# 8.error_messages:字段出错时,信息提示
serializers.ModelSerializer和serializers.Serializer field参数说明
创建user/serializers.py写序列化器
class UserInfoSerializer(serializers.Serializer):
id = serializers.CharField(read_only=True)# 普通字段,设置id为只读字段,不能修改
username = serializers.CharField(min_length=3,max_length=20,error_messages= {'required': '该字段必填'})# 显示普通字段
img = serializers.ImageField(required=False)
nick_name = serializers.CharField(max_length=20)
address = serializers.CharField(max_length=255)
xxx = serializers.SerializerMethodField(read_only=True)# 自定义显示(显示多对
class Meta:
model=User
# 自定义显示 多对多 字段
def get_xxx(self,row):
'''row: 传过来的正是 User表的对象'''
users = row.username # 获取用户名
return users
# 定义创建语法:ser.save()执行,就会立刻调用create方法用来创建数据
def create(self, validated_data):
'''validated_data: 表单或者vue请求携带的json:
{"username":"zhangsan","password":"123456"}'''
# https://www.cnblogs.com/xiaonq/p/7978409.html
return User.objects.create(**validated_data)
# 定义更新方法
def update(self, instance, validated_data):
''' instance : 查询的对象 "validated_data: postman提交的json数据
{""username": "zhangsan", "password": "123456"}'''
if validated_data.get('username'):
instance.username = validated_data['username']
instance.save()
return instance
# 定义单一字段验证的方法 def validate_username(self, value):
if value == 'root':
raise serializers.ValidationError('不能创建root管理员账号')
return value
# 定义多字段验证方法
def validate(self, attrs):
print(attrs)
if attrs.get("username") == 'admin':
raise serializers.ValidationError('不能创建admin用户')
return attrs
1.3 在 user/views.py 中添加视图函数^
from user.serializers import UserInfoSerializer
class UserInfoViewSet(APIView):
# 查询用户信息
def get(self, request, *args, **kwargs):
# 一对多、多对多查询都是一样的语法
obj = User.objects.all()
ser = UserInfoSerializer(instance=obj,many=True) # 关联数据多个
# ser = UserInfoSerializer(instance=obj[0]) # 关联数据一个
return Response(ser.data, status= 200 )
# 创建用户
'''创建用户'''
def post(self,request):
ser = UserInfoSerializer(data=request.data)
# 判断提交数据是否合法
if ser.is_valid():
ser.save()
return Response(data=ser.data, status= 201 )
return Response(data=ser.errors,status= 400 )
# 更新用户信息
def put(self, request):
pk = request.query_params.get('pk')
try:
userinfo = User.objects.get(id = pk)
except Exception as e:
return Response(data='用户不存在', status= 201 )
# 创建序列化对象,并将要反序列化的数据传递给data构造参数,进而进行验证
ser = UserInfoSerializer(userinfo,data=request.data)
if ser.is_valid():
ser.save()
return Response(data=ser.data, status= 201 )
return Response(data=ser.errors,status= 400 )
3.测试接口
3.1 查询所有用户

3.2 创建用户

3.3 更新用户信息

3.4限流功能测试
http://192.168.56.100:8888/user/apiview/
'''修改syl/settings.py配置限速设置'''
REST_FRAMEWORK = {
#3.1 限流策略
'DEFAULT_THROTTLE_RATES': {
'user': '3/hour', # 认证用户每小时 10 次
'anon': '3/day',
},
}
APIview的使用的更多相关文章
- Django生命周期 URL ----> CBV 源码解析-------------- 及rest_framework APIView 源码流程解析
一.一个请求来到Django 的生命周期 FBV 不讨论 CBV: 请求被代理转发到uwsgi: 开始Django的流程: 首先经过中间件process_request (session等) 然后 ...
- DjangoRestFramework 学习之restful规范 APIview 解析器组件 Postman等
DjangoRestFramework学习一之restful规范.APIview.解析器组件.Postman等 本节目录 一 预备知识 二 restful规范 三 DRF的APIView和解析器组件 ...
- APIView源码简单分析图
APIView源码简单分析 !声明:下面这个dispatch分发方法不在是父类View里的dispatch了,APIView重新封装了这个dispatch.(整个核心就是initialize_requ ...
- rest-framework之APIView 序列化组件
rest-framework之APIView 一 安装djangorestframework 方式一:pip3 install djangorestframework 方式二:pycharm图形化界面 ...
- Django Rest framework基础使用之View:APIView, mixins, generic, viewsets
先看一张图,对DRF的各个APIView,Mixin,Viewset等有个基本印象: 具体使用方法: 1.APIView: DRF 的API视图 有两种实现方式: 一种是基于函数的:@api_view ...
- CBV源码分析+APIVIew源码分析
{drf,resful,apiview,序列化组件,视图组件,认证组件,权限组件,频率组件,解析器,分页器,响应器,URL控制器,版本控制} 一.CBV源码分析准备工作: 新建一个Django项目 写 ...
- Django通用视图APIView和视图集ViewSet的介绍和使用
原 Django通用视图APIView和视图集ViewSet的介绍和使用 2018年10月21日 14:42:14 不睡觉假扮古尔丹 阅读数:630 1.APIView DRF框架的视图的基类是 ...
- $Django cbv源码分析 djangorestframework框架之APIView源码分析
1 CBV的源码分析 #视图 class login (View): pass #路由 url(r'^books/$', views.login.as_view()) #阅读源码: #左侧工程栏--- ...
- mixins,generics(ApiView)
#生成序列化对象class BookModelSerizter(serializers.ModelSerializer): class Meta: model=Book fields='__all__ ...
- ModelSerializer序列化(Apiview)
url部分: url(r'^book/$',views.book.as_view()),url(r'^books/(\d+)/$', views.bookdetail.as_view(),name=' ...
随机推荐
- NIO 实现简单群聊功能
服务端: package com.yang.runnable; import java.io.IOException; import java.net.InetSocketAddress; impor ...
- RabbitMQ小记(三)
1.RabbitMQ中mandatory和immediate以及备份交换机 (1)mandatory为true时,若交换机无法根据自身类型和路由键找到符合条件的对列,那么RabbitMQ会回调Basi ...
- 零基础小白必看篇:从0到1构建Python Web框架
造轮子是最好的一种学习方式,本文尝试从0开始造个Python Web框架的轮子,我称它为ToyWebF. 本文操作环境为:MacOS,文中涉及的命令,请根据自己的系统进行替换. ToyWebF的简单特 ...
- P5035金坷垃题解(快速幂的讲解)
首先经过读题,我们发现找到合格的金坷垃,怎么样的金坷垃才是合格的呢?(我们不难发现1肯定是合格的[题目已经给出了]) 然后我们开始手推一下之后合格的金坷垃: 2-1=1(合格) 3-1-1=1(不 ...
- CSG:清华大学提出通过分化类特定卷积核来训练可解释的卷积网络 | ECCV 2020 Oral
论文提出类特定控制门CSG来引导网络学习类特定的卷积核,并且加入正则化方法来稀疏化CSG矩阵,进一步保证类特定.从实验结果来看,CSG的稀疏性能够引导卷积核与类别的强关联,在卷积核层面产生高度类相关的 ...
- 主厨(第4部分)- ASP. netNET Core和Angular 2 CRUD SPA
下载source - 79.7 KB 介绍 在Master Chef(第1部分)和Master Chef(第2部分)中,我介绍了如何使用ASP.Net Core和Angular JS.在Master ...
- centos 7 安装docker 常用指令
什么是docker l 使用最广泛的开源容器引擎 l 一种操作系统级的虚拟化技术 l 依赖于Linux内核特性:Namespace和Cgroups l 一个简单的应用程序打包工具 docker ...
- 第1天 | 12天搞定Python,告诉你有什么用?
掌握多一门编程语言,多一种选择,多一份机遇,更何况学的是人见人爱,花见花开的Python语言.它目前可占据编程语言排行榜的第3名,是名副其实的"探花郎",无论用它做什么(网络爬虫. ...
- docker-管理容器常用命令
1. docker-管理容器常用命令 2. docker管理容器常用命令 1) docker ps 显示当前正在运行的容器 [root@test-1 ~]# docker ps CONTAINER ...
- python实现自动生成小学四则运算题目(软工第二次项目作业)
前言 软件工程 传送带 作业要求 传送带 作业目标 结对编程:代码实现.性能分析.异常处理说明.记录PSP表格 代码见: github 个人信息:朱育清 3118005437 信安二班 我的partn ...