serializers.Serializer
class Userinfoserializers(serializers.Serializer):
    username = serializers.CharField()
    passwd = serializers.CharField()
    group = serializers.CharField(source="group.title")
        #使用序列化的原因:
        #因为在传统的前后端不分离后台返回给前端的数据类型为Queryset对象而不是可视化对象所以我们可以通过rest_framework的serializers类将Queryset对象变成我们想要的数据格式
        #当source参数存在的时候会直接通过source的参数作为键到数据库取值,如果不存在则通过变量名为键取值
        #当source参数不存在时,键为变量名,且通过变量名为键取值
        #当source数据源明确时可以自定义变量名为响应数据的键  oooo = serializers.CharField(source=“username”)
        #source参数也可以为一个方法在内部会自动加上括号比如source="get_字段名_display"
        #也可以通过外键取值source="group.title"

class Userinfo_view(APIView):
    def get(self,request,*args,**kwargs):

        #实现的原理如下通过返回的对象调用values方法返回指定的字段值
        #info = models.UserInfo.objects.all().values("id","username","passwd")

        mdl = models.UserInfo.objects.all()

        #many 为传入的数据为多条的话为True 如果不是一个列表只有一条的话则为False
        ser = Userinfoserializers(instance=mdl,many=True)
        info = json.dumps(ser.data,ensure_ascii=False)
        return HttpResponse(info)

自定义显示

class Userinfoserializers(serializers.Serializer):
    username = serializers.CharField()
    passwd = serializers.SerializerMethodField()

    #此处的value为一个Queryser对象get_字段名
    def get_passwd(self,value):
        return value.passwd

class Userinfo_view(APIView):
    def get(self,request,*args,**kwargs):
        mdl = models.UserInfo.objects.all()
        ser = Userinfoserializers(instance=mdl,many=True)
        info = json.dumps(ser.data,ensure_ascii=False)
        return HttpResponse(info)

生成 HyperlinkedIdentityField

生成HyperlinkedIdentityField
url(r"^(?P<version>[v1|v2]+)/group/(?P<group_id>\d+)$",views.Groupinfo_view.as_view(),name="group"),

class Userinfoserializers(serializers.ModelSerializer):
    #lookup_field=此参数必须在路有中出现,view_name="group"找寻的是路由别名,也决定了他的生成格式
    group = serializers.HyperlinkedIdentityField(view_name="group",lookup_field="group_id")
    class Meta:
        model = models.UserInfo
        fields = "__all__"

class Userinfo_view(APIView):
    def get(self,request,*args,**kwargs):
        mdl = models.UserInfo.objects.all()
        #必填参数context={"request":request}
        ser = Userinfoserializers(instance=mdl,many=True,context={"request":request})
        info = json.dumps(ser.data,ensure_ascii=False,)
        return HttpResponse(info)
serializers.ModelSerializer
    #两者也可配合使用
    class Userinfoserializers(serializers.ModelSerializer):
    class Meta:

        #深度控制,此处的值为多少层表默认为0
        depth = 1 #0-10
        model = models.UserInfo

        #显示所有字段
        # fields = "__all__"

        #此处可以自定义显示的字段
        fields = ["id","username","passwd","user_type","group"]

        #此处通过字典的方式也可以取到对应的外键的值
        extra_kwarges = {"group":{"source":"group.title"},}

         #也可以自定义字段
            class MyField(serializers.CharField):
                #此处接收value为Queryset对象
                def to_representation(self,value):
                    return valu
 请求数据校验

class Roleser(serializers.ModelSerializer):    title = serializers.CharField(min_length=3,max_length=5,error_messages={"min_length":"字数不能低于3","max_length":"字数不能大于5"})

    def validate_title(self, attrs):#对指定字段进行自定义校验        print(attrs)#销售2        return attrs    def validate(self, attrs):#对多个字段进行校验        print(attrs)#OrderedDict([('title', '销售2')])        return attrs

class Roles_view(APIView):    def get(self,request,*args,**kwargs):        obj = models.Role.objects.all()        ser = Roleser(instance=obj,many=True)        return Response(ser.data)

    def post(self,request,*args,**kwargs):        ser = Roleser(data=request.data)        if ser.is_valid():            ser.save()            return Response("提交成功")        else:            return Response(ser.errors)
 

 
 
 

restframework序列化使用方法的更多相关文章

  1. rest-framework序列化

    快速实例 Quickstart 序列化 开篇介绍: ---- 一切皆是资源,操作只是请求方式 ----book表增删改查 /books/ books /books/add/ addbook /book ...

  2. JavaScript表单序列化的方法详解

    本文介绍下,在javascript中实现表单序列化的方法,通过实例加深理解,有需要的朋友参考下吧. 在JavaScript中,可以利用表单字段的type属性,连同name和value属性一起实现对表单 ...

  3. Map,List,POJO深拷贝(序列化实现)方法与注意事项

    转载请注明出处,谢谢! 方法1: /*jdk >= 1.5*/ @SuppressWarnings("unchecked") public static <T> ...

  4. 两种序列化的方法 Serializable Parcelable

    原文:https://blog.csdn.net/hacker_crazy/article/details/80840868 一.Serializable 1.Serializable 是java的序 ...

  5. rest-framework 序列化格式Restful API设计规范

    理解RESTful架构 Restful API设计指南 理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式 ...

  6. 从django的序列化到rest-framework 序列化

    1.利用Django的view实现返回json数据 from django.views.generic import View from goods.models import Goods class ...

  7. day 94 RestFramework序列化组件与视图view

    一 .复习 1. CBV流程 class BookView(View): def get(): pass def post(): pass #url(r'^books/', views.BookVie ...

  8. django restframework 序列化

    Serialization 序列化 创建表 from django.db import models from pygments.lexers import get_all_lexers from p ...

  9. Django restframework 序列化之 ModelSerializer 小记

    首先介绍一下相关概念 序列化器(Serializer) 1. 自定义型:  继承rest_framework.serializers.Serializer 2. 模型类型:  继承rest_frame ...

随机推荐

  1. MooseFS安装部署

    环境信息 Master服务器 dev04 chunkserver服务器 dev02.dev03.dev04 metalogger服务器 dev03 mount客户端 dev01.dev02 安装前下载 ...

  2. spring+quarts常见问题

    javax/transaction/UserTransactionCaused by: java.lang.NoClassDefFoundError: javax/transaction/UserTr ...

  3. Jquery使两个Div的滚动条同步滚动

    $("#div").scroll(function(){ $("#div1").scrollTop($(this).scrollTop()); // 纵向滚动条 ...

  4. Mybatis源码解析优秀博文

    最近阅读了许久的mybatis源码,小有所悟.同时也发现网上有许多优秀的mybatis源码讲解博文.本人打算把自己阅读过的.觉得不错的一些博文列出来.以此进一步加深对mybatis框架的理解.其实还有 ...

  5. MySQL 数据库--权限管理

    权限管理 1.创建账号 创建本地账号 create user 'luke'@'localhost' identified by '123'; #mysql -uluke -p123 创建远程账号 cr ...

  6. Android studio ocr初级app开发问题汇总(含工程代码)

    博客第一篇文章,稍作修改,增加文字介绍 开发目的 最近由于某些需求,需要在Android手机端实现OCR功能,大致为通过手机照相,识别出相片中的中文信息字段.但是由于新手光环+流程不熟悉,遇到了各种各 ...

  7. 初始python(二)

    1. 列表list 1.1 切片# 定义一个list.list = [1, 2, 3, 4, 5] 从左往右读取字符(默认步长为 1 ).如:list[-2:-1]  # 返回一个list数据类型,[ ...

  8. 深入浅出SharePoint——定制保存Item按钮

    <script type="text/javascript" src="/_layouts/style/jquery-1.4.4.min.js">& ...

  9. DIY简单功能的torrentkitty种子爬虫

    过完年回公司比较无聊,一不小心看到微博里美尤莉娅的图片,惊为天人,有图为证!!! 百度之原来这货以前叫小泉彩,貌似动了几个小手术换了个马甲重新出道了.你拍AV你家里知道么?.于是乎下了几个种子看了下, ...

  10. Jarsigner签名使用

    转载请标明出处: http://www.cnblogs.com/why168888/p/6548544.html 本文出自:[Edwin博客园] 如何签名: jarsgner-verbose-keys ...