当前位置: 首页 > news >正文

阿里巴巴可以做网站吗大连做网站报价

阿里巴巴可以做网站吗,大连做网站报价,中国建设银行官网站纪念币河南,给网站网站做推广作用: 1. 序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串 2. 反序列化,把客户端发送过来的数据,经过request以后变成字典,序列化器可以把字典转成模型 3. 反序列化,完成数据校验功能 定义序列化器 Django REST framework中的Serializer使用类来定义须继承自rest_framework.serializers.Serializer。 接下来为了方便演示序列化器的使用我们先创建一个新的子应用sers python manage.py startapp sers from django.db import models# Create your models here.class Book(models.Model):title models.CharField(max_length32,verbose_name书籍名称)price models.IntegerField(verbose_name价格)pub_date models.DateField(verbose_name出版日期) 我们想为Book模型类提供一个序列化器可以定义如下 from rest_framework import serializersclass BookSerializer(serializers.Serializer):title serializers.CharField()price serializers.IntegerField()pub_date serializers.DateField() 注意serializer不是只能为数据库模型类定义也可以为非数据库模型类的数据定义。serializer是独立于数据库之外的存在。 创建Serializer对象 定义好Serializer类后就可以创建Serializer对象了。 Serializer的构造方法为Serializer(instanceNone, dataempty, **kwarg) 说明 用于序列化时将模型类对象传入instance参数 用于反序列化时将要被反序列化的数据传入data参数 除了instance和data参数外在构造Serializer对象时还可通过context参数额外添加数据如 serializer AccountSerializer(account, context{request: request}) 通过context参数附加的数据可以通过Serializer对象的context属性获取。 使用序列化器的时候一定要注意序列化器声明了以后不会自动执行需要我们在视图中进行调用才可以。 序列化器无法直接接收数据需要我们在视图中创建序列化器对象时把使用的数据传递过来。 序列化器的字段声明类似于我们前面使用过的表单系统。 开发restful api时序列化器会帮我们把模型数据转换成字典. drf提供的视图会帮我们把字典转换成json,或者把客户端发送过来的数据转换字典. 序列化器的使用 序列化器的使用分两个阶段 处理客户端请求时使用序列化器可以完成对数据的反序列化。 处理服务器响应时使用序列化器可以完成对数据的序列化。 序列化 基本序列化 先查询出一个学生对象 from sers.models import Book book Book.objects.get(pk1) 构造序列化器对象 from .serializers import BookSerializer bookSer BookSerializer(instancebook) 获取序列化数据,通过data属性可以获取序列化后的数据路由 # urls.py path(sers/, include(sers.urls)), # sers.urls path(books/(\d), BookView.as_view()), 视图 from rest_framework.response import Response from rest_framework.views import APIView from .models import Book from .sers import BookSerializerclass BookView(APIView):def get(self, request,id):book Book.objects.get(pkid)bs BookSerializer(instancebook)return Response(bs.data) 如果要被序列化的是包含多条数据的查询集QuerySet可以通过添加manyTrue参数补充说明 class BookView(APIView):def get(self, request):# book Book.objects.get(pk1)books Book.objects.all()bs BookSerializer(instancebooks, manyTrue)return Response(bs.data) 反序列化 数据验证 使用序列化器进行反序列化时需要对数据进行验证后才能获取验证成功的数据或保存成模型类对象。 在获取反序列化的数据前必须调用is_valid()方法进行验证验证成功返回True否则返回False。 验证失败可以通过序列化器对象的errors属性获取错误信息返回字典包含了字段和字段的错误。如果是非字段错误可以通过修改REST framework配置中的NON_FIELD_ERRORS_KEY来控制错误字典中的键名。 验证成功可以通过序列化器对象的validated_data属性获取数据。 在定义序列化器时指明每个字段的序列化类型和选项参数本身就是一种验证行为。 通过构造序列化器对象并将要反序列化的数据传递给data构造参数进而进行验证。 from sers.sers import BookSerializer bs BookSerializer(data{title:小王子,price:100}) bs.is_valid() # 必须先要is_valid,才会有bs.validated_data和bs.errors False bs.validated_data {} bs.errors {pub_date: [ErrorDetail(stringThis field is required., coderequired)]} is_valid()方法还可以在验证失败时抛出异常serializers.ValidationError可以通过传递raise_exceptionTrue参数开启REST framework接收到此异常会向前端返回HTTP 400 Bad Request响应。 validate_字段名对field_name字段进行验证如 class BookSerializer(serializers.Serializer):title serializers.CharField(max_length32)price serializers.IntegerField(requiredTrue)pub_date serializers.DateField(requiredTrue)def validate_title(self, value):if django not in value.lower():raise serializers.ValidationError(图书不是关于Django的)return value 测试 from sers.sers import BookSerializer bs BookSerializer(data{title:小王子,price:100}) bs.is_valid() False bs.errors {title: [ErrorDetail(string图书不是关于Django的, codeinvalid)], pub_date: [ErrorDetail(stringThis field is required., coderequired)]} validate在序列化器中需要同时对多个字段进行比较验证时可以定义validate方法来验证如 class BookSerializer(serializers.Serializer):title serializers.CharField(max_length32)price serializers.IntegerField(requiredFalse)pub_date serializers.DateField(requiredFalse)bread serializers.IntegerField(label阅读量, max_value2147483647, min_value-2147483648, requiredFalse)bcomment serializers.IntegerField(label评论量, max_value2147483647, min_value-2147483648, requiredFalse)def validate_title(self, value):if django not in value.lower():raise serializers.ValidationError(图书不是关于Django的)return valuedef validate(self, data):bread data.get(bread)bcomment data.get(bcomment)if bread bcomment:raise serializers.ValidationError(阅读量小于评论量)return data反序列化-保存数据 前面的验证数据成功后,我们可以使用序列化器来完成数据反序列化的过程.这个过程可以把数据转成模型类对象. 可以通过实现create()和update()两个方法来实现。 在反序列化数据的时候就可以通过save()方法返回一个数据对象实例了book serializer.save() 基于APIView的接口实现 路由 urlpatterns [path(book/, views.BookView.as_view()),re_path(book/(\d), views.BookDetailView.as_view()), ] 视图 # Create your views here. from rest_framework.views import APIView# 设计增删改查查接口# 视图 class BookView(APIView):def get(self, request):books Book.objects.all()bs BookSerializer(instancebooks, manyTrue)return Response(bs.data)def post(self, request):bs BookSerializer(datarequest.data)if bs.is_valid():bs.save()return Response(bs.data)else:return Response(bs.errors)class BookDetailView(APIView):def get(self, request, pk):book Book.objects.get(pkpk)bs BookSerializer(instancebook)return Response(bs.data)def put(self, request, pk):instance Book.objects.get(pkpk)bs BookSerializer(instanceinstance, datarequest.data)if bs.is_valid():bs.save()return Response(bs.data)else:return Response(bs.errors)def delete(self, request, pk):Book.objects.get(pkpk).delete()return Response() serializer # 序列化器 from rest_framework import serializers from rest_framework.response import Response from .models import Bookclass BookSerializer(serializers.Serializer):title serializers.CharField()price serializers.IntegerField()pub_date serializers.DateField()def create(self, validated_data):new_book Book.objects.create(**validated_data)return new_bookdef update(self, instance, validated_data):Book.objects.filter(pkinstance.pk).update(**validated_data)instance Book.objects.get(pkinstance.pk)return instance
http://www.hkea.cn/news/14424123/

相关文章:

  • 网站建设入门教程视频教程网站打开速度规定多长时间
  • 手机可播放的网站建设网站需要多少人
  • 三把火科技网站设计郑州住房城乡建设局
  • 网站开发技术期中试题wordpress广告位设置
  • 重庆网站设计智能 乐云践新网页素材及网站架构制作
  • 文化建设网站网络优化的手段有哪些
  • 沈阳市建设工程项目管理中心网站wordpress和json
  • 上外国网站用什么dns济南天桥区网站建设公司
  • 网站建设开发协议深圳公司画册设计
  • 网站域名做软件好还是做网站好
  • 网站关键词是什么做视频有赚钱的网站有哪些
  • 广州软件网站开发网页设计实训目的
  • 珠海网站建设方案报价郑州制作网页哪家好
  • 岳阳网站开发网站运营哪家好广州网站建设建航科技
  • 移动网站打不开宜昌公司做网站
  • 网站正在建设 下载域名是什么样式的
  • 廊坊app网站制作wordpress完全开发手册
  • 手机商城官方网站爱链
  • 做网站怎么申请域名不得不知道的网站
  • 吉林省白山市建设局官方网站我对网站开发的项目反思
  • 把网站做静态化是什么意思购物网站开发案例教程
  • 电商网站建设外包桐柏微网站建设
  • 心理网站模板免费logo设计网站推荐
  • 免费建手机网站无锡八匹马网站建设
  • 湖南平台网站建设公司全网营销的概念
  • 已有网站备案外贸建站模版
  • 宿迁网站搭建wordpress快速登陆插件
  • 鳌江哪里有做网站吉林省长春市
  • 安庆网站开发小程序开发教程文档
  • 做网站只有搜网址吗SEO网站建设全方位部署