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

网站建设课程有哪些收获2021百度热搜年度榜

网站建设课程有哪些收获,2021百度热搜年度榜,wordpress虚拟资源交易平台,dw制作网页步骤1. 序列化器 REST framework提供了一个serializer类,它可以非常方便的序列化模型实例和查询集为JSON或者其他内容形式。它还提供反序列化,允许在验证传入数据后将解析的数据转换回复杂类型。 2. 定义序列化器 在crm应用目录下创建serializers.py文件&a…

1. 序列化器

REST framework提供了一个serializer类,它可以非常方便的序列化模型实例和查询集为JSON或者其他内容形式。它还提供反序列化,允许在验证传入数据后将解析的数据转换回复杂类型。

2. 定义序列化器

crm应用目录下创建serializers.py文件,编写代码如下:

from rest_framework import serializersfrom crm.models import Studentclass StudentSerializer(serializers.Serializer):"""学生序列化器"""id = serializers.IntegerField(label='学生id', read_only=True)name = serializers.CharField(label='姓名')sex = serializers.IntegerField(label='性别', default=1)age = serializers.IntegerField(label='年龄', required=False, allow_null=True)qq = serializers.CharField(label='qq号码', required=False, allow_null=True)phone = serializers.CharField(label='手机号码', required=False, allow_null=True)channel = serializers.CharField(label='渠道', read_only=True)c_time = serializers.DateTimeField(label='创建时间', read_only=True)def create(self, validated_data):"""创建对象:param validated_data::return:"""return Student.objects.create(**validated_data)def update(self, instance, validated_data):"""更新对象:param instance: :param validated_data: :return: """for key, value in validated_data.items():setattr(instance, key, value)instance.save()return instance

 序列化器类的第一部分定义了要序列化/反序列化的字段。create()update()方法定义了在调用serializer.save()时如何创建或修改实例。

3. 使用序列化器

序列化 

进入Django Shell

python manage.py shell

先导入一些需要用到的对象

from crm.models import Student
from crm.serializers import StudentSerializer
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParserobj = Student.objects.first()

序列化这个实例

s = StudentSerializer(obj)
s.data
# {'id': 3, 'name': '赵六', 'sex': 1, 'age': 22, 'qq': '1111', 'phone': '18684720553', 'channel': '抖音', 'c_time': '2022-01-14T21:45:06.037745+08:00'}

我们已经将模型实例转换为Python原生数据类型。为了完成序列化过程,我们将数据呈现为json。

JSONRenderer().render(s.data)
# b'{"id":3,"name":"\xe8\xb5\xb5\xe5\x85\xad","sex":1,"age":22,"qq":"1111","phone":"18684720553","channel":"\xe6\x8a\x96\xe9\x9f\xb3","c_time":"2022-01-14T21:45:06.037745+08:00"}'

我们还可以序列化查询集而不是模型实例。为此,我们只需many=True向序列化程序参数添加一个标志。

ss = StudentSerializer(Student.objects.all(), many=True)
ss.data
# [OrderedDict([('id', 3), ('name', '赵六'), ('sex', 1), ('age', 22), ('qq', '1111'), ('phone', '18684720553'), ('channel', '抖音'), ('c_time', '2022-01-14T21:45:06.037745+08:00')]), OrderedDict([('id', 15), ('name', '心蓝'), ('sex', 1), ('age', 20), ('qq', '111'), ('phone', '1111123'), ('channel', '百度'), ('c_time', '2022-02-08T21:59:54.743096+08:00')]), OrderedDict([('id', 21), ('name', '西瓜'), ('sex', 1), ('age', 20), ('qq', '123456789'), ('phone', '987654321'), ('channel', '抖音'), ('c_time', '2022-02-09T21:15:37.199509+08:00')])]

反序列化

反序列化是相似的,首先将序列化数据(json)解析为原生python数据类型(省略),然后将其填充到一个序列器对象中。

里面要注意的是 当执行serializer.save()的时候,会看有没有instance这个对象 有的话就是更新,没有的话就是创建。

In [1]: from crm.serializers import StudentSerializerIn [2]: from crm.models import *In [3]: data = {'name': '李晨', 'sex':1, 'age':18}In [4]: serializer = StudentSerializer(data=data)In [5]: serializer.is_valid()
Out[5]: TrueIn [6]: serializer.validated_data
Out[6]: OrderedDict([('name', '李晨'), ('sex', 1), ('age', 18)])In [7]: stu = serializer.save()In [8]: stu
Out[8]: <Student: 李晨>

4. 使用模型序列化器

我们的StudentSerializer类复制了大量Student模型中的的信息。RESTframework提供了一个ModelSerializer,它可以根据模型自动创建Serializer类,让我们的代码更简洁。再次打开crm/serializers.py模块,并用以下代码替换StudentSerializer类。

class StudentSerializer(serializers.ModelSerializer):class Meta:model = Studentfields = ['id', 'name', 'sex', 'age', 'phone', 'qq', 'c_time']

序列化器的一个很好的属性是,您可以通过打印序列化器实例的表示形式来检查它的所有字段。进入Django shell然后尝试如下操作:

In [1]: from crm.serializers import StudentSerializer
In [2]: s = StudentSerializer()
In [3]: print(s)
StudentSerializer():id = IntegerField(label='ID', read_only=True)name = CharField(help_text='姓名', label='姓名', max_length=20)age = IntegerField(allow_null=True, help_text='年龄', label='年龄', max_value=32767, min_value=-32768, required=False)sex = IntegerField(help_text='性别', label='性别', max_value=32767, min_value=-32768, required=False)qq = CharField(allow_blank=True, allow_null=True, help_text='qq号码', label='Qq号码', max_length=20, required=False, validators=[<UniqueValidator(queryset=Student.objects.all())>])phone = CharField(allow_blank=True, allow_null=True, help_text='手机号码', label='手机号码', max_length=20, required=False, validators=[<UniqueValidator(queryset=Student.objects.all())>])c_time = DateTimeField(label='创建时间', read_only=True)channel = PrimaryKeyRelatedField(allow_null=True, help_text='渠道来源', label='渠道', queryset=Channel.objects.all(), required=False)

ModelSerializer类并没有做什么特别神奇的事情,它们只是创建serializer类的一个快捷方式:

  • 一组自动确定的字段。
  • create()和update()方法的简单默认实现。

5. 使用序列化器编写普通的Django视图

让我们看看如何使用我们新的序列化器类来编写一些API视图。目前我们不会使用任何REST框架的其他特性,我们只会把视图写成普通的Django视图。

编辑crm/views.py添加如下内容:

def student_list(request):"""学生列表,创建学生视图:param request::return:"""if request.method == 'GET':objs = Student.objects.all()serializer = StudentSerializer(objs, many=True)return JsonResponse(serializer.data, safe=False)elif request.method == 'POST':data = JSONParser().parse(request)serializer = StudentSerializer(data=data)if serializer.is_valid():serializer.save()return JsonResponse(serializer.data, status=201)else:return JsonResponse(serializer.errors, status=400)def student_detail(request, pk):"""检索,更新或者删除一个学生:param request::param pk::return:"""try:obj = Student.objects.get(pk=pk)except Student.DoesNotExist:return HttpResponse(status=404)if request.method == 'GET':serializer = StudentSerializer(obj)return JsonResponse(serializer.data)elif request.method == 'PUT':data = JSONParser().parse(request)serializer = StudentSerializer(obj, data=data)if serializer.is_valid():serializer.save()return JsonResponse(serializer.data)return JsonResponse(serializer.errors, status=400)elif request.method == 'DELETE':obj.delete()return HttpResponse(status=204)

 路由配置如下:

urlpatterns = [path('projects/', views.project_list),path('projects/<int:pk>/', views.project_detail)
]

那么通过/projests//projects/id/就可以访问对应的接口了。

http://www.zhongyajixie.com/news/13813.html

相关文章:

  • 南阳专业做网站公司品牌策划设计
  • 大方县住房城乡建设局网站谷歌优化推广
  • 淘宝天猫做网站咨询百度竞价渠道代理
  • 竞价网站制作网站seo设置是什么
  • 上虞做网站数据分析师培训
  • 烟台电商网站建设高端企业网站建设
  • 重庆建设委员会官方网站app推广拉新渠道
  • 做网站编辑需要看什么书优化英语
  • 惠州住房和城乡建设局网站网络推广软件有哪些
  • 有什么网站可以做微信支付天津推广的平台
  • 公司建站详细步骤b站视频推广app
  • 阳泉营销型网站建设网络营销的目的和意义
  • 网站制作优势百度认证证书
  • 我国婚纱网站建设的现状seo索引擎优化
  • 杭州定制网站建设安徽网络推广
  • 赤峰做企业网站公司市场调研报告范文3000字
  • 工商注册平台官网郑州seo网站管理
  • 企业做网站的注意什么问题如何实施网站推广
  • wordpress笑话类模板免费seo优化工具
  • 泗泾做网站公司成都网站制作维护
  • 淮南网站制作公司搜索引擎优化代理
  • 深圳网站建设工作室百度教育app
  • 温州做美食网站什么是搜索引擎优化的核心
  • 石家庄大的网站开发公司快速排名程序
  • 网站开发的测试推广手段有哪些
  • 做律师网站电销常见的搜索引擎有哪些?
  • 宝安区网站建设互联网广告平台代理
  • cnzz网站代做上海搜索seo
  • 怎么做网站广告赚钱西地那非片能延时多久有副作用吗
  • 网站软件定制开发公司营销推广的形式包括