python中view的用法_APIview使用

ModelVIewSet 是对 APIView 封装

ModelSerializer 是对 Serializer

1.1 在user/urls.py中添加路由

urlpatterns = [    path('apiview/', views.UserInfoViewSet.as_view()), ]

1.2 创建user/serializers.py写序列化器

serializers.ModelSerializer 和 serializers.Serializer field参数说明

''' 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:字段出错时,信息提示

创建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)

2.测试接口

2.1 查询所有用户

8dedac345f661cc3b420e9a85c06d5f5.png

2.2 创建用户

917f32b763aa4407309e3ba9cf557262.png

2.3 更新用户信

57595c960f261fb387c2a48deab51c68.png

2.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',

},

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring mvc 教程_Spring MVC开发–快速教程

spring mvc 教程这是我们的JCG合作伙伴之一,来自Manoj的有关使用Spring开发Web应用程序的简短教程, 网址为“ The Khangaonkar Report ”。 (注意:对原始帖子进行了少量编辑以提高可读性) Spring MVC使用基于模型视图…

实时监听输入框值变化的完美方案:oninput onpropertychange

实时监听输入框值变化的完美方案:oninput & onpropertychange 原文:实时监听输入框值变化的完美方案:oninput & onpropertychange在 Web 开发中经常会碰到需要动态监听输入框值变化的情况,如果使用 onkeydown、onkeypress、onkeyup 这…

R语言对矩阵按某一列排序

[plain] view plaincopy a <- c(5,4,3,2,1) b <- c(1,2,3,4,5) c <- cbind(a,b) [plain] view plaincopyc[order(c[,1]),] #按第一列递增排序 转载于:https://www.cnblogs.com/jamesf/p/4751573.html

java 是用什么写的_java用什么写的

java用什么写的JAVA本身就是一门编程语言&#xff0c;它编译生成的文件运行在JVM上(java虚拟机)。JVM是由c语言和汇编语言开发的。基于此之上就是java了&#xff0c;虚拟机是起到解析执行的作用。JVM是java语言最大的特点&#xff0c;java的优缺点也是缘于JVM技术。JVM是一个可…

java properties 保存_Java 读写Properties配置文件

转自&#xff1a;https://www.cnblogs.com/xudong-bupt/p/3758136.html1.Properties类与Properties配置文件Properties类继承自Hashtable类并且实现了Map接口&#xff0c;也是使用一种键值对的形式来保存属性集。不过Properties有特殊的地方&#xff0c;就是它的键和值都是字符…

java垃圾回收机制优化_JVM性能优化--Java的垃圾回收机制

一、Java内存结构1、Java堆(Java Heap)java堆是java虚拟机所管理的内存中最大的一块&#xff0c;是被所有线程共享的一块内存区域&#xff0c;在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例&#xff0c;这一点在Java虚拟机规范中的描述是&#xff1a;所有的对象实…

《linux 网卡别名的添加和绑定》RHEL6

网卡别名的配置&#xff1a; 这个和ifconfig临时修改网卡ip 差不多&#xff0c;但是不一样。都是临时的&#xff0c;只要重启电脑就没了。 配永久的ip别名&#xff1a; cp ifcfg-eth0 ifcfg-eth0:0 vim ifcfg-eth0:0 这样做也能出来&#xff0c;对不对就不知道了 重启网络就ok…

NGUI中UILabel使用url标签的一个bug

在NGUI里&#xff0c;UILabel控件可以支持一些简单功能的标签&#xff0c;使文本显示更丰富及实现类似超链接的功能。但是在使用的时候发现了NGUI3.5.9版本里存在着一个bug。不过还好修复这个bug也很简单。 在UILabel中支持[urllink]text[/url]的方式来定义类超链接的文本。bug…

[转]Oracle DB管理内存

• 描述SGA 中的内存组件• 实施自动内存管理• 手动配置SGA 参数• 配置自动PGA 内存管理内存管理&#xff1a;概览DBA 必须将内存管理视为其工作中至关重要的部分&#xff0c;因为&#xff1a;• 可用内存空间量有限• 为某些类型的功能分配更多内存可提高整体性能• 自动优化…

servlet 3.0异步_Servlet 3.0异步处理可将服务器吞吐量提高十倍

servlet 3.0异步Servlet是Java中处理服务器端逻辑的主要组件&#xff0c;新的3.0规范引入了一些非常有趣的功能&#xff0c;其中异步处理是最重要的功能之一。 可以利用异步处理来开发高度可伸缩的Web应用程序。 使用此功能可以有效地构建Web 2.0站点和AJAX应用程序。 我们的JC…

smartgwt_SmartGWT入门,提供出色的GWT界面

smartgwtSmartGWT简介 我最近开始使用SmartGWT &#xff0c;它是一个基于GWT的框架&#xff0c;该框架为您的应用程序UI提供了一个全面的小部件库&#xff0c;并为服务器端的数据管理提供了帮助。 您可以在SmartGWT展示柜上查看其漂亮的功能。 我准备了一个简短的“入门”指南…

Beaglebone Back学习五(PWM测试)

PWM测试 参考链接 1 Enable PWM on BeagleBone with Device Tree overlays 2 Using PWM on the Beaglebone Black 3 Beaglebone Coding 101: Buttons and PWM 4 Using PWM outputs 5 beaglebone-black-cpp-PWM 6 Enabling PWM Support in the kernel 7转载于:https://www.cnblo…

CUBA平台的理念

最近发生了很多事。 在CUBA于6月1日正式发布之后&#xff0c;我们推出了一个新版本&#xff0c;在一些Java网站上发布了我们的第一篇文章&#xff0c;并在伦敦的Devoxx UK会议上介绍了该平台 。 但是在热潮继续之前&#xff0c;大约是时候阐明CUBA背后的哲学了。 与企业软件开…

Android 绘制动态图

最近准备技能大赛&#xff0c;需要将从传感器中读出的数据在移动客户端以图的形式绘制出来&#xff0c;因为平时很少绘图&#xff0c;于是各种查资料&#xff0c;算是勉强做出来了。 以下是大赛理论效果图&#xff08;左&#xff09;和实际效果图&#xff08;右&#xff09;&am…

$(document).ready() 和 window.onload 方法比较

说明 页面加载文档完毕后&#xff0c;浏览器会通过 Javascript 为 DOM 元素添加事件。 Javascript 使用 window.onload 方法&#xff0c;而 jQuery 使用 $(document).ready() 方法。 $(document).ready() 方法可以极大的提高 Web 应用程序的相应速度&#xff0c;因为该方法可以…

java undo_用JAVA实现Undo、Redo,Copy、Paste、Cut_java

programlover原作package clipborad;import javax.swing.JTextArea;import java.awt.datatransfer.*;import java.awt.*;import javax.swing.*;import java.io.*;import javax.swing.undo.*;http://www.gaodaima.com/64851.html用JAVA实现Undo、Redo,Copy、Paste、Cut_javaimpo…

项目管理控件Project Management Library

Project Management Library是一款项目管理控件&#xff0c;包含了项目管理相关的Windows客户端控件,如&#xff1a;ProjectView, ResourcesView, ScheduleView, StatisticsView。支持所有.NET语言&#xff0c;可以用于Windows桌面应用程序,具有标准的界面和操作自定义设置、拖…

ios 查询mysql数据库操作系统_iOS数据库FMDB--增删改查(模糊查询)详细介绍

简介&#xff1a;很早就想整理一下数据库的使用了&#xff0c;刚好最近接触较多&#xff0c;加之可以安排出空余的时间&#xff0c;所以瓜子我贡献出自己喝咖啡的时间整理一下FMDB的使用&#xff0c;以下是对FMDB的介绍以及基本使用 --- insert、delete、update、select。其中s…

SQL Server 2008 R2如何生成带数据的数据库脚本

1.对想要复制的数据库右键&#xff0c;“任务”&#xff0c;“生成脚本” 2.下面需要注意的是&#xff0c;默认情况下&#xff0c;只会生成仅架构的脚本&#xff0c;也就是说仅仅有表结构&#xff0c;而没有数据的空壳。所以需要额外的设置。 在设置脚本编写选项&#xff0c;选…

java分页 jar_零基础学java之javaEE,分页

【分页】一 分页1.1分页概念引入什么是分页?分页(英语&#xff1a;Paging)&#xff0c;是一种操作系统里存储器管理的一种技术&#xff0c;可以使电脑的主存可以使用存储在辅助存储器中的数据。操作系统会将辅助存储器(通常是磁盘)中的数据分区成固定大小的区块&#xff0c;称…