ApiView 的使用
- urlpatterns = [ path('apiview/', views.UserInfoViewSet.as_view()), ]
- #创建user/serializers.py写序列化器
- # class User(AbstractUser):
- # phone = models.CharField('手机号',max_length=20)
- # img = models.ImageField(upload_to='user',null=True)
- # nick_name = models.CharField('昵称',max_length=20)
- # address = models.CharField('地址',max_length=255)
- 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_name(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)
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=' ...
随机推荐
- 面试官:谈一下你对DDD的理解?我:马什么梅?
领域模型(domain model)是对领域内的概念类或现实世界中对象的可视化表示.领域模型也称为概念模型.领域对象模型和分析对象模型. ——<UML和模式应用> 我们在日常开发中,经常针 ...
- [ASP.NET Core开发实战]基础篇06 配置
配置,是应用程序很重要的组成部分,常常用于提供信息,像第三方应用登录钥匙.上传格式与大小限制等等. ASP.NET Core提供一系列配置提供程序读取配置文件或配置项信息. ASP.NET Core项 ...
- laravel5学习并搭建网站【更新至2020-09-03】
之前一直不清楚 php artisan 要如何使用,有朋友推荐使用phpstorm可以进行命令行执行, 现在发现其实如果真的不喜欢phpstorm的加载缓慢,可以试试计算机原有的命令行 记住需要跳转到 ...
- Winform TextBox 数据绑定空值校验问题
问题: using System; using System.ComponentModel.DataAnnotations; public class Cost { /// <summary&g ...
- Brackets(括号最大匹配问题(区间dp))
We give the following inductive definition of a “regular brackets” sequence: the empty sequence is a ...
- java初探(1)之静态页面化——客户端缓存
利用服务端缓存技术,将页面和对象缓存在redis中,可以减少时间浪费,内存开销.但在每次请求的过程中,仍然会有大量静态资源的请求和返回. 使用静态页面技术,页面不必要使用页面交互技术,比如thymel ...
- [BUUOJ记录] [强网杯 2019]随便注(三种方法)
本题主要考察堆叠注入,算是比较经典的一道题,在i春秋GYCTF中也出现了本题的升级版 猜测这里的MySQL语句结构应该是: select * from words where id='$inject' ...
- vue实现侧边导航栏
<div class="sidebar"> <el-menu class="sidebar-el-menu" :default-active= ...
- ELK入门及基本使用
预备知识-Restful 起源 在没有前后端分离概念之前,一个网站的完成总是“all in one”,在这个阶段,页面.数据.渲染全部在服务端完成,这样做的最大的弊端是后期维护,扩展极其痛苦,开发人员 ...
- IEDA使用Tomcat后控制台中文出现乱码
如下图所示,Intellij IDEA显示中文为乱码, 根据Intellij IDEA控制台输出,Tomcat Log出现乱码,因此可以将问题定位到Tomcat上,具体解决方法: 第一步:打开Tom ...