码迷,mamicode.com
首页 > 其他好文 > 详细

rest_framework 序列化

时间:2018-09-02 11:32:05      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:erro   err   用户   models   request   integer   obj   .sh   序列化   

serializer.py

技术分享图片
#/usr/bin/env python3
# -*- coding:utf-8 -*-
#   mail: infaaf@126.com

from app01.models import UserGroup,UserInfo,Role
from rest_framework import  serializers
from app01 import models

class UserInfoSerializer(serializers.Serializer):
    ut=serializers.CharField(source=get_user_type_display)
    username=serializers.CharField()
    password=serializers.CharField()
    group=serializers.CharField(source=group.title)
    rls=serializers.SerializerMethodField()   # 或models中定制方法source参数引用

    def get_rls(self,row):
        role_obj_list=row.roles.all()
        ret=[]
        for item in role_obj_list:
            ret.append({id:item.id,tile:item.title})
        return ret

class UserInfoSerializer2(serializers.ModelSerializer):
    ut = serializers.CharField(source=get_user_type_display)
    group=serializers.CharField(source=group.title)
    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,tile:item.title})
        return ret

    class Meta:
        model=models.UserInfo
        # fields=‘__all__‘
        fields=[id,username,password,ut,group,rls]


class UserInfoSerializer3(serializers.ModelSerializer):
    class Meta:
        model=models.UserInfo
        # fields=‘__all__‘
        fields=__all__
        depth = 1    #  Foreignkey和manytomany 自动获取详细。 choice仍需手动处理


class XXX:
    def __init__(self,base):
        self.base=base

    def __call__(self, value):
        if not value.startwith(self.base):
            message=false
            raise serializers.ValidationError(message)


class UserInfoSerializerXXX(serializers.Serializer):
    # 校验字段
    name=serializers.CharField(error_messages={required:标题不能为空})
    
    # 利用validators
    XX=serializers.CharField(validators=[XXX(basename)])

    # 利用hook
    xx2=serializers.CharField()
    def validate_xx2(self,value):
        if value:
            return value

        # from rest_framework import exceptions
        # raise exceptions.ValidationError(‘xxx‘)
View Code

views.py

技术分享图片
from django.shortcuts import render,HttpResponse

# Create your views here.
from app01.models import UserGroup,UserInfo,Role
from rest_framework.views import APIView

from rest_framework.versioning import  QueryParameterVersioning,URLPathVersioning
from django.urls import reverse
from rest_framework.parsers import JSONParser,FormParser
from app01.serializer import UserInfoSerializer,UserInfoSerializer2,UserInfoSerializer3,UserInfoSerializerXXX
import json

class D(APIView):

    versioning_class = URLPathVersioning
    parser_classes=[JSONParser,FormParser]   # print(request.data)
    def get(self,request,*args,**kwargs):
        print(kwargs.get(version))
        print("##")
        print(request.version)
        print(request.versioning_scheme.reverse(viewname=userapi,request=request))
        r=reverse(viewname=userapi,kwargs={version:v1})
        print(r)
        print(request.body)
        return HttpResponse(ok)

    def post(self,request,*args,**kwargs):
        # self.dispatch()
        print(request._request)
        pass



class SerView(APIView):
    def get(self, request, *args, **kwargs):
        userinfo_obj=UserInfo.objects.all()
        ser=UserInfoSerializer3(instance=userinfo_obj,many=True)
        ret=json.dumps(ser.data,ensure_ascii=False)
        return HttpResponse(ret)

    def post(self, request, *args, **kwargs):
        ser=UserInfoSerializerXXX(data=request.data)
        if ser.is_valid():
            print(ser.validated_data)
        else:
            print(ser.errors)
        return HttpResponse(wrong)
View Code

models.py

技术分享图片
#/usr/bin/env python3
# -*- coding:utf-8 -*-
#   mail: infaaf@126.com
from django.db import models
from rest_framework import request

class UserGroup(models.Model):
    title=models.CharField(max_length=32)

    def __str__(self):
        return self.title


class UserInfo(models.Model):
    user_type_choice=((1,普通用户),
                      (2,vip),
                      (3,SVIP))
    user_type = models.IntegerField(choices=user_type_choice)
    username=models.CharField(max_length=32)
    password=models.CharField(max_length=64)
    group=models.ForeignKey(UserGroup,on_delete=None)
    roles=models.ManyToManyField(Role)

    def __str__(self):
        return self.username

class UserToken(models.Model):
    user=models.OneToOneField(UserInfo,on_delete=None)
    token=models.CharField(max_length=64)

    def __str__(self):
        return self.token


class Role(models.Model):
    title=models.CharField(max_length=32)

    def __str__(self):
        return self.title
View Code

 

rest_framework 序列化

标签:erro   err   用户   models   request   integer   obj   .sh   序列化   

原文地址:https://www.cnblogs.com/infaaf/p/9573175.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!