Django Rest Framework - 安装,配置 与 新建 Serialization

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,
}

属性说明:

比如说 这个序列化中 有nameweight , 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

你可能感兴趣的:(django,rest,framework,python)