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里面更高级的序列化"
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"
)