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

来源:互联网 发布:淮阴师范学院网络课程 编辑:程序博客网 时间:2024/04/28 16:34

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

0 0