1.安装
安装 Rest FrameWork 使用的是 pip 安装, Linux 与 Mac OS可以 安装pip进行直接操作下面命令:
pip install djangorestframework #安装框架
windows 的话,可以通过 Anaconda 中的pip命令进行安装配置;
包管理工具安装可以看:
windows 下安装 anaconda 与 linux 下安装pip配置
2.配置
mysite/setting.py
配置INSTALLED_APPS
INSTALLED_APPS = [
...
'rest_framework', #配置 rest_framework app
...
]
e.g
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'testapp',
'testrestapi',
'rest_framework', #配置 rest_framework app
]
好吧,配置如此简单。更多 REST_FRAMEWORK 的配置 将在后面使用到的时候,进行列举。
3. 开启api工程
api工程 和django中的app一样,使用命令新建即可。
比如我们新建 名为 testrestapi 的 app:
python manage.py startapp testrestapi #新建app
更多内容 : Django - 创建工程 和 APP 与 开发工具,别忘记在 setting.py 和 urls.py 中进行配置。
4. 新建model
testrestapi/model.py
新建实体 Party ,添加ordering 以 创建日期排序;
class Party(models.Model):
create_date = models.DateTimeField(auto_now_add=True)
content = models.TextField()
title = models.CharField(max_length=50, default='this is a party')
address = models.CharField(max_length=50, default="ShangHai")
is_off = models.BooleanField(default=False)
link = models.CharField(max_length=200, default="http://www.baidu.com")
class Meta:
ordering = ('create_date',)
4. 新建Serializer
在testrestapi 下新建 serializer.py ,实现 PartySerializer
testrestapi/serializer.py
Serializer 实现,这里列举2种简单的实现方式: 继承 ModelSerializer
1)指定部分字段
class PartySerializer(serializers.ModelSerializer):
class Meta:
model = Party
fields = ('id', 'create_date', 'content', 'title', 'address', 'is_off', 'link')
2)指定全部字段
class PartySerializer(serializers.ModelSerializer):
class Meta:
model = Party
fields = '__all__'
5. Serializer 进阶
这里以Person及其Serializer进行说明
实体 Person
class Person(models.Model):
name = models.CharField(max_length=20, default='Lao')
weight = models.FloatField()
height_cm = models.IntegerField()
序列化 Person1Serializer
class Person1Serializer(serializers.ModelSerializer):
name = serializers.CharField(max_length=20)
weight = serializers.FloatField()
height = serializers.IntegerField()
# validate_fieId : 验证name是否符合需求
def validate_name(self, value):
print('validate_name', type(value), value)
return value
def validate(self, attrs):
print('validate', type(attrs), attrs)
if attrs['weight'] > 100:
raise serializers.ValidationError('your weight is too fat')
return attrs
def create(self, validated_data):
print('create', type(validated_data), validated_data)
height = validated_data['height']
weight = validated_data['weight']
name = validated_data['name']
print(height)
person = Person(name=name, weight=weight, height=height)
person.save()
return person
def update(self, instance, validated_data):
print('update', type(instance), instance, validated_data)
instance.name = validated_data.get('name', instance.name)
instance.weight = validated_data.get('weight', instance.weight)
instance.height_cm = validated_data.get('height', instance.height_cm)
instance.save()
return instance
class Meta:
model = Person
fields = ('name', 'weight', 'height')
提交的json
Content - type : application/json
{
"name": "test",
"weight": 123,
"height": 12,
}
属性说明:
比如说 这个序列化中 有name
, weight
, height
三个属性,必须对应的是Class Meta
中的fieIds
中的固定值,而fieIds最好与表单中的或json中提交的参数一致,当然还有实体中的属性,见上面的Person实体
,PsersonSerializer
, 提交的 Json
。
方法说明 :
validate_fieId
可以验证某个字段是否符合条件validate
通过attrs参数,可以拿到表单或json提交的数据,以验证数据create
方法 可以进行查询/存储操作 ,参数validated_data
是验证后的数据update
执行修改的时候将要执行操作 参数validated_data
是验证后的数据 ,instance
是model对应的实体
6. 总结
参考 : Tutorial 1: Serialization
源码 : django-mysite-frist