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. spring boot集成ehcache 2.x 用于hibernate二级缓存

    https://www.jianshu.com/p/87b2c309b776 本文将介绍如何在spring boot中集成ehcache作为hibernate的二级缓存.各个框架版本如下 spring ...

  2. ubuntu 百度云

    下载链接:https://pan.baidu.com/s/1HBu5T3PZ8JsS93PgOKnUYw提取密码:6J1A 在终端中输入命令: sudo dpkg -i bcloud_3..1_all ...

  3. JavaScript深入系列(一)--原型和原型链详解

    构造函数创建对象 首先我们先使用构造函数创建一个对象: function Person(){} var person = new Person(); person.name = 'tom'; cons ...

  4. 面试集——redis

    背景:该贴主要用来记面试过程中redis相关的问题,方便后期回顾. 为什么说Redis是单线程的以及Redis为什么这么快! https://blog.csdn.net/xlgen157387/art ...

  5. 最短路 次短路 k短路(k很小)

    最短路 luogu 3371 https://www.luogu.org/problemnew/show/P3371 #include <cstdio> #include <cstd ...

  6. Xml一(基本语法和约束)、

    XML:eXtensible Markup Language 可扩展标记语言 version="1.0" * 可扩展:所有的标签都是自定义的. * 功能:数据存储 * 配置文件 * ...

  7. pytest 2.测试用例setup和teardown

    之前我写的unittest的setup和teardown,还有setupClass和teardownClass(需要配合@classmethod装饰器一起使用),接下来就介绍pytest的类似于这类的 ...

  8. ES6学习:Map结构的目的和基本用法

    Map结构的目的和基本用法 JavaScript的对象(Object)本质上是键值对的集合(Hash结构),但是只能用字符串作为键.这给它的使用带来了很大的限制.   1 2 3 4 5 6 7 8 ...

  9. POJ3662 SPFA//二分 + 双端队列最短路

    https://cn.vjudge.net/problem/12427/origin 题意:求1到N第K + 1大条边权最小的路径 首先想到dp递推,dp[x][y]表示到x这个点经过y条免费边的最小 ...

  10. sklearn—特征工程

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...