rest_framework 序列化篇

感謝alex和武沛齊老師html

rest_framework中的序列化表示數據庫

from rest_framework import serializersclass RoleSerializer(serializers.Serializer):    id = serializers.IntegerField()    title = serializers.CharField()class RolesView(APIView):    def get(self, request, *args, **kwargs):        #方式1        #roles = models.Role.objects.all().values('id','title')        #roles = list(roles)        #ret = json.dumps(roles, ensure_ascii=False)        #方式2 對queryset的格式進行序列化        roles = models.Role.objects.all()        ser = RolesSerializer(instance=roles, many=True)        ret = json.dumps(ser.data, ensure_ascii=False)        return HttpResponse(ret)        #方式2 單個對象        roles = models.Role.objects.all().first()        ser = RolesSerializer(instance=roles, many=False)        #ser.data 已是完成序列化的結果了        ret = json.dumps(ser.data, ensure_ascii=False)        return HttpResponse(ret)def func(arg):    if callable(arg):        print(arg())    else:        print(arg)func(123)func(lambda:"666")序列化    部分總結:    1.寫類        繼承下面兩種        class RolesSerializer(serializers.Serializer):            id = serializers.IntegerFiled()            title = serializers.CharField()        class UserInfoSerializer(serializers.ModelSerializer):            class Meta:                model = models.UserInfo                #fileds = "__all__"                fields = ['id', 'username', 'password']        2.字段            a. title = serializers.CharField(source = 'group.title')            b. title = serializers.SerializerMethodField()                class UserInfoSerializer(serializers.ModelSerializer):                    rls = serializers.SerializerMethodField() #自定義顯示                    class Meta:                        model = models.UserInfo                        fields = ['id', 'username', 'password', 'rls',]                     #自定義方法                    def get_rls(self, row)                        role_obj_list = row.roles.all()                        ret = []                        for item in role_obj_list:                            ret.append({'id':item.id, 'title':item.title})                        return ret            c.自定義類  不過用得少視圖函數中from cmdb import modelsfrom rest_framework import serializers#方式1 序列化# class UserInfoSerializer(serializers.Serializer):#     username = serializers.CharField()#     password = serializers.CharField()#     xxxx = serializers.CharField(source="user_type")  #source表示對應數據庫的某個字段 此時就能夠改變變量了 row.get_user_type_display 不可執行#     oooo = serializers.CharField(source="get_user_type_display")  #對choices數據進行獲取中文   可執行##     group = serializers.CharField(source="group.title") #foreignkey 進行.操做 跨表#     #rls = serializers.CharField(source='roles.all')#     #若是是單個表和foreignkey能夠經過source去指定 不能指定manytomany##     rls = serializers.SerializerMethodField()#自定義顯示#     def get_rls(self, row):#         role_obj_list = row.roles.all()#         ret = []#         for item in role_obj_list:#             ret.append({'id':item.id,"title":item.title})#         return ret#方式2  #地址  www.cnblogs.com/wupeiqi/articles/7805382.html#方式2能夠與方式1中的數據混合着使用class UserInfoSerializer(serializers.ModelSerializer):    oooo = serializers.CharField(source="get_user_type_display")    rls = serializers.SerializerMethodField()    group = serializers.CharField(source='group.title')    class Meta:        model = models.UserInfo        #fields = "__all__"   #這一步已經能夠完成基本的全部數據的顯示        fields = ['id','username','password','oooo','rls','group']    def get_rls(self, row):        role_obj_list = row.roles.all()        ret = []        for item in role_obj_list:            ret.append({'id':item.id, 'title':item.title})            return retimport jsonclass UserInfoView(APIView):    def get(self, request, *args, **kwargs):        users = models.UserInfo.objects.all()        ser = UserInfoSerializer(instance=users,many=True)        print(ser.data)        ret = json.dumps(ser.data, ensure_ascii=False)        return HttpResponse(ret) urls.py中 from django.conf.urls import url,includefrom cmdb import viewsurlpatterns = [    url(r'^(?P<version>[v1|v2]+)/userinfo/$',views.UserInfoView.as_view()),]models.py中from django.db import models# Create your models here.class UserGroup(models.Model):    title = models.CharField(max_length=32)class UserInfo(models.Model):    user_type_choices = (        (1,'普通用戶'),        (2,'VIP'),        (3,'SVIP'),   )    user_type = models.IntegerField(choices=user_type_choices)    group = models.ForeignKey(to="UserGroup", on_delete=models.CASCADE)    username = models.CharField(max_length=32, unique=True)    password = models.CharField(max_length=64)    roles = models.ManyToManyField(to="Role")class UserToken(models.Model):    user = models.OneToOneField(to="UserInfo", on_delete=models.CASCADE)    token = models.CharField(max_length=64)class Role(models.Model):    title = models.CharField(max_length=32)
相關文章
相關標籤/搜索