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

三、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做的事儿:

更新具体某本书

五、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字段:


七、DRF知识点

序列化

​ 视图

​ 版本系统

​ 认证

​ 权限

​ 频率限制

​ 解析器

​ 渲染器

​ 路由

​ 分页

RESTful API学习Day2 - Django REST framework的更多相关文章

  1. RESTful API 学习

    /********************************************************************************* * RESTful API 学习 ...

  2. python 全栈开发,Day95(RESTful API介绍,基于Django实现RESTful API,DRF 序列化)

    昨日内容回顾 1. rest framework serializer(序列化)的简单使用 QuerySet([ obj, obj, obj]) --> JSON格式数据 0. 安装和导入: p ...

  3. RESTful架构&简单使用Django rest framework

    RESTful架构 1 什么是REST REST全称是Representational State Transfer,中文意思是表述性状态转移. 它首次出现在2000年Roy Fielding的博士论 ...

  4. RESTful API 学习【第1篇】

    一. 什么是RESTful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” REST从资源的角 ...

  5. Django 学习之Django Rest Framework(DRF)

    一. WEB应用模式 在开发Web应用中,有两种应用模式 1. 前后端不分离 把html模板文件和django的模板语法结合渲染完成以后才从服务器返回给客户. 2. 前后端分离 二. API接口 AP ...

  6. RESTful API学习与实践

    参考文献: 1.Learn About ASP.NET Web API 2.深入浅出REST 3.Infoq上“深入探索REST”系列文章 4.RESTful API设计的一点经验 5.Angular ...

  7. Restful API学习Day5 - DRF之限制 分页 解析器和渲染器

    参考文档: Django REST framework基础:认证.权限.限制 Django REST framework基础:分页 Django REST framework基础:解析器和渲染器 一. ...

  8. Restful API学习Day4 - DRF版本控制和认证

    参考文档: Django REST framework基础:版本控制 Django REST framework基础:认证.权限.限制 为什么要有版本? 某些客户端 使用低版本只维护不开发新功能 v1 ...

  9. Django学习day2——Django安装与环境配置

    安装 Django 文章中python版本为3.65 这里以windows7为例,在pip目录下运行pip install Django就能安装django最新版本(本文为django2.2版本) 也 ...

随机推荐

  1. HDU--4417 Super Mario (主席树模版题)

    题目链接 题目让求 L R区间 不大于H 的数有多少 数据太大需要离散化 #include<bits/stdc++.h> using namespace std; #define maxn ...

  2. 编写高质量代码:改善Java程序的151个建议 --[78~92]

    编写高质量代码:改善Java程序的151个建议 --[78~92] HashMap中的hashCode应避免冲突 多线程使用Vector或HashTable Vector是ArrayList的多线程版 ...

  3. python基础面试常见题

    1.为什么学习Python? Python是目前市面上,我个人认为是最简洁.最优雅.最有前途.最全能的编程语言,没有之一. 2.通过什么途径学习的Python? 通过自学,包括网上查看一些视频,购买一 ...

  4. 测试利器 Postman

    一.安装 官网:https://www.getpostman.com/ Postman是一个Chrome的一个插件工具,我们可以通过Chrome的应用商店进行进行搜索并安装,安装完成会在桌面上显示一个 ...

  5. 每天一个Linux命令 (转)

    一. 文件目录操作命令: 1.每天一个linux命令(1):ls命令 2.每天一个linux命令(2):cd命令  3.每天一个linux命令(3):pwd命令 4.每天一个linux命令(4):mk ...

  6. zlib库交叉编译

    zlib-1.2.11 开发板:arm9 交叉编译器arm-fsl-linux-gnueabihf-gcc 编译方式: ./configure -h可以发现zlib并没有提供CC配置,所以 (1)ex ...

  7. 安装Androidsdudio时

    安装Androidsdudio时,Androidsdudio的路劲可以任意选择,但Androidsdk的路劲就默认到c盘里.然后安装后就可以直接用了

  8. python之路入门篇

    一. Python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,Guido开始写能够解释Python语言语法的解释器.Python这个名字,来 ...

  9. Linux系统centos6.7上安装libevent

    1 下载地址:http://libevent.org/ 2.解压 tar zxvf libevent-2.0.21-stable.tar.gz 安装前请先安装 gcc yum install gcc ...

  10. bzoj2819 DFS序 + LCA + 线段树

    https://www.lydsy.com/JudgeOnline/problem.php?id=2819 题意:树上单点修改及区间异或和查询. 思维难度不高,但是题比较硬核. 整体思路是维护每一个结 ...