Restful是目前流行的设计规范,是一组架构约束条件和原则。
GET:获取资源
POST:新建资源
PUT:整体更新资源(列表横列所有字段都需要传入参数)
DELETE:局部更新资源(列表横列指定某一个字段传入参数)
DELETE:删除资源
DRF框架的安装和介绍
安装: pip install djangorestframework
- 注册应用
INSTALLED_APPS = [
...
# DRF框架应用
'rest_framework',
]
ERF序列化和反序列化:
- JSON序列化:将一个python对象,转换为一个json对象(JSON字符串)
- JSON反序列化:将一个json对象(JSON字符串),转换为python对象
序列化器的字段和约束
定义模型类
from django.db import models
# Create your models here.
class UserInfoModel(models.Model):
# 用户信息模型类
logo = models.CharField(max_length=20, default=None, verbose_name='软件名', help_text='软件名')
pwd = models.CharField(max_length=20, default=None, verbose_name='密码', help_text='密码')
phone = models.CharField(max_length=20, default=None, verbose_name='手机号', help_text='手机号')
day = models.IntegerField(default=18, verbose_name='天数', help_text='天数')
def __str__(self):
return self.logo
# 指定建表名
class Meta:
db_table = 'userinfo'
verbose_name = '用户信息'
定义序列化器
# 定义DRF框架的序列化器类
from rest_framework import serializers
class UserInfoSerializers(serializers.Serializer):
# 用户信息序列化器模型类
logo = serializers.CharField(max_length=20)
pwd = serializers.CharField(max_length=20)
phone = serializers.CharField(max_length=20)
day = serializers.IntegerField(min_value=0, max_value=365)
微信截图_20240527120524.png
关联字段序列化操作
在序列化时,会数据转换为模型类的对象
- 关联字段序列化方式
# 关联字段序列化的方式
# 返回关联模型对象的主键
user1 = serializers.PrimaryKeyRelatedField()
# 返回关联字段模型类__str__方法返回的内容
user2 = serializers.StringRelatedField()
# 返回关联对象序列化器返回的所有字段
user3 = UserInfoSerializers()
# 返回关联对象某一个具体字段
user4 = serializers.SlugRelatedField(read_only=True, slug_field='logo')
- 定义一个模型类
from django.db import models
# Create your models here.
class UserInfoModel(models.Model):
# 用户信息模型类
logo = models.CharField(max_length=20, default=None, verbose_name='软件名', help_text='软件名')
pwd = models.CharField(max_length=20, default=None, verbose_name='密码', help_text='密码')
phone = models.CharField(max_length=20, default=None, verbose_name='手机号', help_text='手机号')
day = models.IntegerField(default=18, verbose_name='天数', help_text='天数')
def __str__(self):
return self.logo
# 指定建表名
class Meta:
db_table = 'userinfo'
verbose_name = '用户信息'
class RelevanceModel(models.Model):
# 关联UserInfoModel
user = models.ForeignKey('UserInfoModel', on_delete=models.CASCADE, verbose_name='关联用户表', help_text='关联用户表')
facility = models.CharField(max_length=20, verbose_name='使用设备', help_text='使用设备')
machine = models.CharField(max_length=200, verbose_name='机器码', help_text='机器码')
info = models.CharField(max_length=20, verbose_name='备注信息', help_text='备注信息')
def __str__(self):
return self.facility
- 定义一个序列化器模型类
# 定义DRF框架的序列化器类
from rest_framework import serializers
class UserInfoSerializers(serializers.Serializer):
# 用户信息序列化器模型类
logo = serializers.CharField(max_length=20)
pwd = serializers.CharField(max_length=20)
phone = serializers.CharField(max_length=20)
day = serializers.IntegerField(min_value=0, max_value=365)
id = serializers.IntegerField()
class RelevanceSerializers(serializers.Serializer):
facility = serializers.CharField(max_length=20)
machine = serializers.CharField(max_length=200)
info = serializers.CharField(max_length=20)
id = serializers.IntegerField()
# 关联字段序列化的方式
# 返回关联字段模型类__str__方法返回的内容
user1 = serializers.StringRelatedField()
反序列化操作
在反序列化时,会先对对象数据进行验证,验证通过再进行保存
把数据转换为模型类的对象
# 定义DRF框架的序列化器类
from rest_framework import serializers
class UserInfoSerializers(serializers.Serializer):
# 用户信息序列化器模型类
logo = serializers.CharField(max_length=20)
pwd = serializers.CharField(max_length=20)
phone = serializers.CharField(max_length=20)
day = serializers.IntegerField(min_value=0, max_value=365)
# read_only=True是不需要校验的字段
id = serializers.IntegerField(read_only=True)
备注:
# 定义DRF框架的序列化器类
class UserInfoSerializers(serializers.ModelSerializer):
# 用户信息序列化器模型类
class Meta:
# 指明参照哪个模型类
model = UserInfoModel
# 指明为模型类的哪些字段生成,__all__是所有字段
fields = '__all__'
# 可以指明只读的字段,不参与反序列化
# read_only_fields = ('id', 'pwd')
# 指定序列化字段,反序列化的时候只会对指定序列化字段操作
# fields = ('logo', 'pwd')
# 修改字段的校验规则(反序列化的校验规则)
extra_kwargs = {
'phone': {'max_length': 11, 'min_length': 11, 'required': True}
}
# 可以排除指定字段,指定不参与序列化
exclude = ('logo', 'pwd')
网友评论