rest_framework项目准备

1.需要在INSTALLED_APPS里面添加'rest_framework'
2.所有跟framework相关的设置都要放到REST_FRAMEWORK里面
REST_FRAMEWORK={
    'DEFAULT_PERMISSION_CLASSES':[
        'rest_framework.permissions.IsAdminUser',
    ],
    'PAGE_SIZE':10
}
将数据库里的数据对象转换成json
def publisher_list(request):
    queryset=Pbulisher.objects.all() #查找出所有的数据
	"""第一种普通定义"""
    # data=[]
    # for i in queryset:
    #     p_tmp={
    #         "name":i.name,
    #         "address":i.address
    #     }
    #     data.append(p_tmp)
	"""第二种通过model_to_dict"""
    # data=[]
    # from django.forms.models import model_to_dict
    # for i in queryset:
    #     data.append(model_to_dict(i))
    
	"""第三种通过django内置的序列化"""
    # from django.core import serializers
    # data=serializers.serialize("json",queryset)

    import json
    #如果使用了django内置的序列化就不用把data转成json了
    #return HttpResponse(data,content_type='application/json')
"""如果单单是提供信息的话可以使用django自带的序列化。"""
"序列化做API不仅仅是把数据库里面的数据转化成json字符串,它还要实现一种当客户端给你通过API传过来一个字符串你要把他转换成"
"数据库里的数据也就是说你需要一个json 和model 他们两直接的互相的转换 这时候不能用django自带的序列化了 需要用framework里面更高级的序列化"
//首先要新建一个serializers.py的文件
from rest_framework import serializers
from app001 import models

#自定义序列化的类字段和数据库字段一致,重写一些方法就可以了。名字就是表名后加序列化
class PublisherSerializer(serializers.Serializer):
    id=serializers.IntegerField(read_only=True)
    name=serializers.CharField(max_length=32)
    address=serializers.CharField(max_length=128)

    def create(self, validated_data):
        return models.Pbulisher.objects.create(**validated_data)

    def update(self, instance, validated_data):
        instance.name=validated_data.get("name",instance.name)
        instance.address=validated_data.get("address",instance.address)
        instance.save()
        return instance
 //如何在视图中用到它呢
from app001 import serializers
serializer=serializers.PublisherSerializer(queryset,many=True)#因为queryset是多个对象所以要使用many=True
import json
return HttpResponse(json.dumps(serializer.data),content_type='application/json')
#可以使用上面那种方式自己写每一个字段是什么也可以ModelSerializer表示和Model里面一一对应的一个类
class PublisherSerializer(serializers.ModelSerializer):
    class Meta:
        model=models.Pbulisher #说明model用的是哪个model
        fields=(#说明字段有哪些
            "id",
            "name",
            "address"
        )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值