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

网站 模板下载网站策划报告

网站 模板下载,网站策划报告,建设公司网站需要准备什么,logo设计免费在线生成以下案例由浅到深&#xff0c;逐步深入&#xff0c;通过实例介绍了序列化器的使用方法&#xff0c;和遇到的常见问题的解决方法。 一、序列化器serializers.Serializer 1、urls.py urlpatterns [path("api/<str:version>/depart/",views.DepartView.as_vie…

以下案例由浅到深,逐步深入,通过实例介绍了序列化器的使用方法,和遇到的常见问题的解决方法。

一、序列化器serializers.Serializer

1、urls.py

urlpatterns = [path("api/<str:version>/depart/",views.DepartView.as_view(),name="depart")
]

2、models.py

class Depart(models.Model):title = models.CharField(verbose_name="部门",max_length=32)order = models.IntegerField(verbose_name="顺序")count = models.IntegerField(verbose_name="人数")

3、views.py

from rest_framework import serializers# 自定义模型序列化器1:Serializer
class DepartSerializer(serializers.Serializer):# 字段名要与模型中的字段一致,需要哪个字段写哪个;title = serializers.CharField()count = serializers.IntegerField()class DepartView(APIView):def get(self,request,*args,**kwargs):# 1.数据库中获取数据queryset = models.Depart.objects.all()# 2.转换成JSON格式,mang=True表示有多个值,默认为False,有一个值;ser = DepartSerializer(instance=queryset,many=True)# 3.返回给用户,这里对数据进行了在包装,返回了一个状态值:statuscontext = {"status":True,"data":ser.data}return Response(context)

4、自定义模型序列化器时,可以继承ModeSerializer,操作起来就更方便;

# 自定义模型序列化器2:ModelSerializer
class DepartSerializer(serializers.ModelSerializer):class Meta:model = models.Depart# 模型中所有的字段都会拿过来,fields = "__all__"

二、模型中特殊字段序列化方法,如模型中的choices、ForeignKey、Datetime

1、urls.py

    path("api/<str:version>/user/", views.UserView.as_view(), name="user")

2、models.py,这个表中模拟了常见的各种数据类型字段

class User(models.Model):name = models.CharField(verbose_name="姓名",max_length=32)age = models.IntegerField(verbose_name="年龄")gender = models.SmallIntegerField(verbose_name="性别",choices=((1,'男'),(2,'女')))depart = models.ForeignKey(verbose_name='部门',to='Depart',on_delete=models.CASCADE)ctime = models.DateTimeField(verbose_name="时间",auto_now_add=True)

3、views.py

# 自定义模型序列化器
class UserSerializer(serializers.ModelSerializer):# gender字段显示出来是整型,要想显示对应的string类型,需要自定义字段,字段名可以自己定义;# 这里主要是介绍 source的用法;用来解决模型中choices的问题;gender_text = serializers.CharField(source='get_gender_display')# 解决ForeignKey显示对应字段的问题;depart = serializers.CharField(source='depart.title')# 解决Datatime字段显示时间的问题,不设定格式显示的带毫秒ctime = serializers.DateTimeField(format='%Y-%m-%d')class Meta:model = models.User# fields = "__all__" # 显示所有字段fields = ['name','age','gender','gender_text','depart','ctime'] # 指定显示字段class UserView(APIView):def get(self,request,*args,**kwargs):# 1.获取数据;queryset = models.User.objects.all()# 2.序列化;ser = UserSerializer(instance=queryset,many=True)# 3.返回数据;context = {'status':True,'data':ser.data}return Response(context)

4、通过postman测试返回数据

三、在自定义模型序列化器中,通过自定义方法实现定制的返回值,get_xxx方法中return返回什么,xxx字段就会显示什么,后期开发中使用的还是比较多。

注:model.py、urls.py和上例相同,这里不再重复。

1、views.py

# 自定义模型序列化器
class UserSerializer(serializers.ModelSerializer):# gender字段显示出来是整型,要想显示对应的string类型,需要自定义字段,字段名可以自己定义;# 这里主要是介绍 source的用法;用来解决模型中choices的问题;gender_text = serializers.CharField(source='get_gender_display')# 解决ForeignKey显示对应字段的问题;depart = serializers.CharField(source='depart.title')# 解决Datatime字段显示时间的问题,不设定格式显示的带毫秒ctime = serializers.DateTimeField(format='%Y-%m-%d')# 自定义方法xxx = serializers.SerializerMethodField()class Meta:model = models.User# fields = "__all__" # 显示所有字段fields = ['name','age','gender','gender_text','depart','ctime','xxx'] # 指定显示字段def get_xxx(self,obj):return '{}-{}-{}'.format(obj.name,obj.age,obj.gender)class UserView(APIView):def get(self,request,*args,**kwargs):# 1.获取数据;queryset = models.User.objects.all()# 2.序列化;ser = UserSerializer(instance=queryset,many=True)# 3.返回数据;context = {'status':True,'data':ser.data}return Response(context)

2、返回数据展示 

四、序列化中的嵌套,一般用来解决模型中ManyToMany和ForeignKey的处理

1、urls.py

    path("api/<str:version>/depart/",views.DepartView.as_view(),name="depart"),path("api/<str:version>/user/", views.UserView.as_view(), name="user")

2、models.py

class Depart(models.Model):title = models.CharField(verbose_name="部门",max_length=32)order = models.IntegerField(verbose_name="顺序")count = models.IntegerField(verbose_name="人数")class Tag(models.Model):caption = models.CharField(verbose_name='标签',max_length=32)class User(models.Model):name = models.CharField(verbose_name="姓名",max_length=32)age = models.IntegerField(verbose_name="年龄")gender = models.SmallIntegerField(verbose_name="性别",choices=((1,'男'),(2,'女')))depart = models.ForeignKey(verbose_name='部门',to='Depart',on_delete=models.CASCADE)ctime = models.DateTimeField(verbose_name="时间",auto_now_add=True)# 创建多对多的关系tags = models.ManyToManyField(verbose_name='标签',to='Tag')

3、views.py

# 序列化器的嵌套,主要针对ForeignKey和ManyToMany# 自定义序列化器,序列化Depart表
class D1(serializers.ModelSerializer):class Meta:model = models.Departfields = ['id','title']# 自定义序列化器,序列化Tag表
class D2(serializers.ModelSerializer):class Meta:model = models.Tagfields = ['caption']class UserSerializer(serializers.ModelSerializer):depart = D1()# 标签这里是多对多的关系,所以还是要加上mangy=Truetags = D2(many=True)class Meta:model = models.User# fields = "__all__" # 显示所有字段fields = ['name','age','depart','tags']class UserView(APIView):def get(self,request,*args,**kwargs):# 1.获取数据;queryset = models.User.objects.all()# 2.序列化;ser = UserSerializer(instance=queryset,many=True)# 3.返回数据;context = {'status':True,'data':ser.data}return Response(context)

4、返回数据展示

五、序列化器的继承

1、urls.py

    path("api/<str:version>/depart/",views.DepartView.as_view(),name="depart"),path("api/<str:version>/user/", views.UserView.as_view(), name="user")

2、models.py

class Depart(models.Model):title = models.CharField(verbose_name="部门",max_length=32)order = models.IntegerField(verbose_name="顺序")count = models.IntegerField(verbose_name="人数")class Tag(models.Model):caption = models.CharField(verbose_name='标签',max_length=32)class User(models.Model):name = models.CharField(verbose_name="姓名",max_length=32)age = models.IntegerField(verbose_name="年龄")gender = models.SmallIntegerField(verbose_name="性别",choices=((1,'男'),(2,'女')))depart = models.ForeignKey(verbose_name='部门',to='Depart',on_delete=models.CASCADE)ctime = models.DateTimeField(verbose_name="时间",auto_now_add=True)# 创建多对多的关系tags = models.ManyToManyField(verbose_name='标签',to='Tag')

3、views.py,Base是自定义的一个类,里面有一个字段是XX,source=‘name’,当UserSerializer继承了Base类的时候,可以直接使用XX字段。

class Base(serializers.Serializer):xx = serializers.CharField(source='name')class UserSerializer(serializers.ModelSerializer,Base):class Meta:model = models.User# fields = "__all__" # 显示所有字段fields = ['name','age','xx']class UserView(APIView):def get(self,request,*args,**kwargs):# 1.获取数据;queryset = models.User.objects.all()# 2.序列化;ser = UserSerializer(instance=queryset,many=True)# 3.返回数据;context = {'status':True,'data':ser.data}return Response(context)

4、返回数据展示 

http://www.ds6.com.cn/news/100508.html

相关文章:

  • 对接空间站揭阳百度seo公司
  • 国内网站做国外服务器安徽百度推广怎么做
  • 网站内链设计网络营销所学课程
  • 网站建设公司正规吗seo查询爱站网
  • 武汉网站建设电话多少一键优化是什么意思
  • 平乡企业做网站俄罗斯网络攻击数量增长了80%
  • 郑州北环附近网站建设海南seo顾问服务
  • wordpress 表单附件东莞网站推广优化公司
  • wordpress微网站如何做好一个网站
  • seo教程技术整站优化百度客服24小时电话
  • 公司策划推广诊断网站seo现状的方法
  • 做心理咨询的网站搜索引擎优化的主要工作有
  • 南阳旅游网站建设新开网站
  • 网站空间商拿不回数据nba最新新闻消息
  • 网站解决方案最新的全国疫情
  • 网站开发简单优化大师怎么提交作业
  • 重庆做网站个人全国各城市疫情搜索高峰进度
  • 网站建设预算申请seo推广是做什么
  • 亚马逊网站建设案例凡科建站多少钱
  • php做门户网站今日nba比赛直播
  • 一流的哈尔滨网站建设seo从入门到精通
  • 网站要跟换域名怎么做东莞网络营销优化
  • 科学城做网站公司seo分析师
  • 鸡西做网站域名注册查询网站
  • 9元包邮网站怎么做网站优化有哪些类型
  • 怎么用外国的服务器做网站营销方式和渠道有哪些
  • 自己做衣服的网站引流获客工具
  • 网站目录怎么做301重定向全网模板建站系统
  • 厦门企业网站推广黑帽seo培训网
  • net framework可以用来做网站吗软文营销步骤