DRF框架入门
在新建的serialize.py文件创建序列化器
#定义一些序列化程序
from rest_framework import serializers
from user.models import UserInfo
class UserInfoSerilalizer(serializers.ModelSerializer):
'''创建序列化器'''
class Meta:
model = UserInfo
# 所有字段都要
fields = '__all__'
view.py文件编写视图类
from rest_framework.viewsets import ModelViewSet
from user.models import UserInfo
from user.serializers import UserInfoSerilalizer
class UserInfoView(ModelViewSet):
#queryset查询数据的查询集,存储所有数据的查询数据
queryset = UserInfo.objects.all()
#serializer_class用来指定在当前的视图里面进行 序列化与反序列化时使用的序列化器
serializer_class = UserInfoSerilalizer
urls.py定义路由
from user import views
from rest_framework.routers import DefaultRouter
#定义视图对应的路由器
router = DefaultRouter()
#在路由器中注册视图集
router.register('users',views.UserInfoView,base_name='')
urlpatterns = [
]
urlpatterns += router.urls
定义路由时router = DefaultRouter()后面一定要加(),否则报错
终端中运行测试
python manage.py runserver
序列化与反序列化
序列化
Django模型与串行器的一一对应
serializer.py文件中编写的串行器
class UserInfoNewSerializer(serializers.Serializer):
#定义序列化与反序列化所需要的字段
id = serializers.IntegerField(label='主键',read_only=True)#默认false
#read_only这个字段,用来表示序列化输出
name = serializers.CharField(label='用户名',max_length=20)
phone = serializers.CharField(label='号码',max_length=11)
addinfo = serializers.StringRelatedField(label='外键地址id', read_only=True)
# addinfo = serializers.StringRelatedField(label='外键地址id', required=True)
#required表示在反序列化的过程中必须要传递值
#read_only这个字段,用来表示序列化输出
注意:如果上面代码用了required=True这回发生错误,如下
原因:required()表示在反序列化的过程中必须要传递值
read_only这个字段,用来表示序列化输出
model.py文件
class UserInfo(models.Model):
# 类属性
name = models.CharField(max_length=20)
phone = models.CharField(max_length=11)
addinfo = models.ForeignKey(AddressInfo,on_delete=models.CASCADE)
#这个是两张表之间的关系,关系写在从表身上,
终端 测试查询字段的状态
ModelSerializer序列化器类支持全面检查它们字段的状态。这在使用modelserialalizer时特别有用,如果您想要确定您创建了哪些字段和验证器集。打开Django shell,然后导入序列化器类,实例化它,并打印对象