Restframework(一)

7 篇文章 0 订阅
3 篇文章 0 订阅

Restframework

Restframework 简介

  • drf是一个能快速提供API接口,方便变成的框架。遵循restful规范,常用于前后端分离的应用模式中,通常将后端开发的每个视图都称之为一个接口,前端通过访问接口来对数据进行增删改查。
  • 特点
    • DRF提供了定义序列化器Serializer的方法,可以快速的根据ORM 或者其他库自动序列化/反序列化
    • 提供了丰富的类视图和Minxin扩展类,监护了视图的编写
    • 丰富的定制层级: 函数,类视图等,满足各种需求
    • 丰富的权限验证和身份验证支持,以及内置系统和较好的APIweb页面, 具有超强的可扩展性和从丰富的的插件。

安装

  • 通过 pip install djangorestframework 或git clone https://github.com/encode/django-rest-framework命令安装
  • 并在setting.py文件配置, 分页配置
    INSTALLED_APPS = [
        'rest_framework',
    ]
    # 分页
    REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAdminUser',
    ],
    'PAGE_SIZE': 10
    }
    

序列化

  • Serializers是一个REST框架提供的一个序列化组件类,提供了一种通用的方法来控制响应的输出以及ModelSerializer类,他为创建处理模型实例和查询集的序列化程序提供了有用的快捷键方式。它的工作方式是和Django中的form和modelForm是类似的,都是对获取的字段进行验证,并进行序列化,获得需要的数据格式(json或xml),同时也提供了反序列化程序。

  • Serializers分为两种,一种是继承自rest_framework.serializers.Serializer类,类是以form,;另一种是继承自继承自rest_framework.serializers.ModelSerializer类,类似于modelForm。

  • ModelSerializer类
    • ModelSerializer的使用需要依赖与模型,常用于编写api
    • 功能
      • 序列化queryset数据

      • 反序列化json数据,将反序列化后的数据转换成model对象

      • 反序列化的时,可以对数据进行校验,若数据等合法可以进行save()方法或者进行post,get请求操作,不合法,将返回错误。

        from rest_framework import serializers
        
        class UserInfo(serializers.ModelSerializer):
        # 多对多时添加many=true
            username = serializers.CharField(source='hh', read_only=False,queryset=Book.objects.all())    # 自定义字段
            '''创建序列化器'''
            class Meta:
                model = Book                # 表示对应的模型
                fields = '__all__'          # 输出序列化全部字段
                # fields = ['id', 'title']    # 自定义输出的字段
                # exclude = ['id', 'title']   # 排除某些输出字段
                # depth = 1                   # depth代表显示嵌套关系的第几层, 并且使用depth时引用外键的字段,会自动变为只读
        
        
        # 反序列化
        class User(serializers.ModelSerializer):
            model = Book
            fields = ('id')         # 表示参与反序列化字段
            extra_kwargs = {        # 表示参与反序列化字段的各种约束
                'username': {
                    'required': True,
                    'min_length': 3,
                    'read_only': True,   # 只读
                    'write_only': True   # 只写
                }
            }
        
  • Serializer类
    • Serializer的使用可以不依赖于模型,直接编写serializer文件。

    • 它也是rest_framework中最简单的序列化类,封装也最低,但却非常灵活,实现这个类需要重写create和update两个方法。

    • create()方法对应POST请求

    • update()方法对应PUT/PATCH来访问API,这取决于数据库是否需要更新。

      from rest_framework import serializers
      模型类
      
      class BookInfo(models.Model):
          btitle = models.CharField(max_length=20, verbose_name='名称')
          bpub_date = models.DateField(verbose_name='发布日期', null=True)
          bread = models.IntegerField(default=0, verbose_name='阅读量')
          bcomment = models.IntegerField(default=0, verbose_name='评论量')
          image = models.ImageField(upload_to='booktest', verbose_name='图片', null=True
      
      序列化器
      
      class BookInfoSerializer(serializers.Serializer):
          """图书数据序列化器"""
          id = serializers.IntegerField(label='ID', read_only=True)
          btitle = serializers.CharField(label='名称', max_length=20)
          bpub_date = serializers.DateField(label='发布日期', required=False)
          bread = serializers.IntegerField(label='阅读量', required=False)
          bcomment = serializers.IntegerField(label='评论量', required=False)
          image = serializers.ImageField(label='图片', required=False)
      
      视图中使用
      from django.http import HttpResponse
      from books.models import BookInfo,HeroInfo
      from .serializers import BookInfoSerializers,HeroInfoSerializers
      
      
      def books(request):
          # # 单一对象的序列化
          # book = BookInfo.objects.get(pk=1)
          # book_serializers = BookInfoSerializers(book)
          # book_dict = book_serializers.data
          # print(book_dict)
      
          # 多对象的序列化
          # book_dict= BookInfoSerializers(BookInfo.objects.all(),many=True).data
          # print(book_dict)
      
      
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值