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

怎么做体育直播网站百度搜索页

怎么做体育直播网站,百度搜索页,app网站模板,简单网页制作成品代码【django framework】ModelSerializerGenericAPIView,如何在提交前修改某些字段值 我们经常会遇到下面这种情况: 序列化器用的是ModelSerializer,写视图的时候继承的是generics.CreateAPIView。现在我想在正式提交到数据库(perform_create)之…

【django framework】ModelSerializer+GenericAPIView,如何在提交前修改某些字段值

我们经常会遇到下面这种情况:
序列化器用的是ModelSerializer,写视图的时候继承的是generics.CreateAPIView。现在我想在正式提交到数据库(perform_create)之前,修改几个字段的值,应该怎么去做呢?


在这里插入图片描述


目录

  • 【django framework】ModelSerializer+GenericAPIView,如何在提交前修改某些字段值
  • 1 在Serializer序列化器中重写create
  • 2 继承generics.CreateAPIView后,重写perform_create()


1 在Serializer序列化器中重写create

我们知道序列化器承担了部分视图的作用,但是它主要的作用有两个:
对序列化进来的数据进行校验,比如validate一下手机号格式是不是正确
写入一些默认或者不需要前端传递的字段
// 如果说执意要在Serializer中写业务逻辑,也可以。只不过这种写法会和rest_framework的设计理念相违背,增加了序列化器和视图的耦合性

from rest_framework import serializers
from .models import *
import reclass YourModelSerializer(serializers.ModelSerializer):"""YourModel 创建 序列化器"""class Meta:model = YourModelfields = '__all__'def validate(self, kwargs):"""校验校验前端传过来的用户手机号格式对不对"""MOBILE = kwargs.get('mobile').mobileREGEX_MOBILE = '1[3475698]\d{9}$|^147\d{8}$|^176\d{8}|^198\d{8}$'# 客户手机号格式if not re.match(REGEX_MOBILE, MOBILE):raise serializers.ValidationError("客户手机号格式有误")return kwargsdef create(self, validated_data):"""重写create方法// 添加唯一序列号序列号不需要前端传递"""# 唯一序列号validated_data['serial'] = 'serial102356478'# 可以在此写业务逻辑,但是并不推荐return super().create(validated_data)

2 继承generics.CreateAPIView后,重写perform_create()

秉承着谁的活由谁来干的原则,第一种方法虽然可行,但是增加了序列化器与视图之间的耦合性,所以并不是一个好方法。
所以我们通过重写perform_create()方法来修改我们想要修改的字段
而视图本就是写业务逻辑的,这也符合rest_framework设计初衷。

from rest_framework import generics
from .models import YourModel
from .serializers import YourModelSerializerclass YourModelCreateAPIView(generics.CreateAPIView):queryset = YourModel.objects.all()serializer_class = YourModelSerializerdef perform_create(self, serializer):# 获取需要修改的字段的值some_field_value = serializer.validated_data.get('field_name')# 修改字段的值modified_field_value = some_field_value + '_modified'# 更新字段的值serializer.validated_data['some_field'] = modified_field_value# 继续调用serializer的save方法保存对象serializer.save()

如此,即完成了功能,又不破坏框架功能模块间的耦合性,而代码的质量也由此而提升,皆大欢喜。

http://www.15wanjia.com/news/47007.html

相关文章:

  • 我现在有域名怎么做网站郑州seo外包平台
  • 金融门户网站模版网上卖产品怎么推广
  • 网站建设我要自学网网站链接查询
  • 网站建成后 再添加小功能麻烦吗百度分公司
  • 网站怎么做的qq邮件订阅昆山seo网站优化软件
  • 抚州网站seo怎么找推广渠道
  • 推广网站详细教程优化关键词方法
  • 网站推广公司招聘百度榜
  • 做执法设备有哪些网站全国免费信息发布平台
  • 做wow宏的网站网络营销的专业知识
  • wordpress注册验证青岛seo网络优化公司
  • 网站建设的工作视频人的吗外包公司软件开发
  • 如何打开网站网页网络推广策划书
  • 涿州网站建设有限公司精品成品网站1688
  • 网站开发岗位就业分析百度推广个人能开户吗
  • 广州公司网站开发seo怎么做教程
  • 网站建设不包括哪个阶段百度客服中心人工在线
  • 山西做网站运营的公司百度竞价推广开户联系方式
  • 域名备案期间 网站访问天津搜索引擎优化
  • 西安网站制作百亿科技市场营销师报名官网
  • 怎么自己做网站模板十大搜索引擎入口
  • 全国住房和城乡建设厅证书查询网网络优化网站
  • 贵阳网站托管百度账号登陆入口
  • 广州外贸公司排名前十深圳市网络seo推广平台
  • 景翔物流网站建设公司安徽百度推广怎么做
  • 网站开发和广告制作陕西网站建设网络公司
  • 南山网站设计训怎么建自己的网站?
  • 企查查官网在线查询排名优化软件点击
  • 商务平台网站建设合同企业培训考试平台官网
  • 出口外贸论坛排名优化软件