zoukankan      html  css  js  c++  java
  • RESTful API学习Day2

    Django REST framework

    参考文档:
    官方文档:官方文档
    中文文档:中文文档

    一、是什么?

    基于Django开发RESTful API的一个框架

    为什么要用它?

    补充:

    ​ CBV的工作原理

    ​ urls.py里面 CBV.as_view() --> 确定要使用CBV中的哪个方法

    ​ as_view() --> dispath() --> request.method.lower()反射

    二、安装

    pip install djangorestframework
    

    若是安装速度不是很快的话可以用国内的源:

    pip install djangorestframework -i https://pypi.tuna.tsinghua.edu.cn/simple
    

    1547174793507

    三、DRF使用:

    1. 注册app (不是必须)

      INSTALLED_APPS = [
      'django.contrib.admin',
      'django.contrib.auth',
      'django.contrib.contenttypes',
      'django.contrib.sessions',
      'django.contrib.messages',
      'django.contrib.staticfiles',
      'bms.apps.BmsConfig',
      'rest_framework',
      ]
    2. 导入APIView from rest_framewor.views import APIView, CBV继承它

    3. 自己写一个序列化的工具类 BookSerializer

    4. 使用queryset数据实例化得到一个 序列化对象 --》 ser_obj

    5. 使用from rest_framework.response import Response restframework提供的Respoinse`返回上一步的 ser_obj.data

    四、DRF的视图

    from rest_framework.views import APIView
    

    APIView做的事儿:
    1547180224375

    更新具体某本书
    1547192659672

    1547193574614

    五、DRF序列化

    Django ORM对象 --> json格式的数据:序列化
    json格式的数据 --> Django ORM对象:反序列化
    两个工具:

    from rest_framework.serializers import Serializer
    from rest_framework.serializers import ModelSerializer
    

    类似于Django中form组件-form的作用:
    Django form --> HTML表单
    HTML表单 --> ORM数据

    字段参数

    1. many=True参数

      实例化 序列化器对象的时候,添加many=True参数,能实现序列化多个对象。

    2. read_only=Truewrite_only=True

      正向序列化用read_only=True
      反向序列化用write_only=True

    3. source

      category = serializers.CharField(source='get_category_display', read_only=True)
      # Obj                         --> JSON
      # Obj.title --> "书名"
      # Obj.get_category_display() --> "Python"
    4. require=False

      非必须,做校验的时候,该字段可以不填

    校验方法:

    校验规则的三种方式:

    1. 局部的校验方法:

      # 在serializer类中定义局部校验规则
      def validate_title(self, value):
      # value就是需要检验的这个字段的值
      """类似于Form组件的局部钩子"""
      if '红烧牛肉' in value:
      raise serializers.ValidationError('你是魔鬼吗?')
      else:
      return value
    2. 全局的校验方法:

      def validate(self, attrs):
          pass
      
    3. 自定义校验函数

      # 类似于Form组建中的自定义校验规则
      title = serializers.CharField(max_length=32, validators=[my_heiheihei, ])  
      

      校验规则由序列化对象的is_valid()触发

      def post(self, request):
          # 1. 获取前端提交的数据
      # 1.1 APIView
      # self.request是谁? 不是Django原来的哪个request self._request才是原来的request
      print(request.data) # APIView 包装的数据
      # 2. 对数据做有效性校验
      ser_obj = BookModelSerializer(data=request.data)
      if ser_obj.is_valid():
      ser_obj.save() # 调用的是BookSerializer类中的create方法,需要自己去实现
      # 3. 拿到序列化的数据去数据库创建新记录
      return Response("ok")
      else:
      # 返回校验失败的错误提示信息
      return Response(ser_obj.errors)

    六、ModelSerializer

    和model一对一绑定的序列化类
    SerializerMethodField字段:
    1547429217596
    1547429498481
    1547429544364

    七、DRF知识点

    序列化

    ​ 视图

    ​ 版本系统

    ​ 认证

    ​ 权限

    ​ 频率限制

    ​ 解析器

    ​ 渲染器

    ​ 路由

    ​ 分页

  • 相关阅读:
    「考试」省选27
    「考试」省选26
    「考试」省选25
    $dy$讲课总结
    「笔记」$Min\_25$筛
    「考试」省选24
    「总结」多项式生成函数例题(4)
    「总结」多项式生成函数相关(4)
    「考试」省选23
    「总结」后缀3
  • 原文地址:https://www.cnblogs.com/russellyoung/p/RESTful-API-xue-xiDay2--Django-REST-framework-jian.html
Copyright © 2011-2022 走看看