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--1540 Tunnel Warfare(线段树区间更新)

    题目链接:1540 Tunnel Warfare 以为单组输入 这个题多组输入 结构体记录每个区间左边和右边的连续区间 ms记录最大 在查询操作时: 1.这个点即将查询到右区间 看这个点 x 是否存在 ...

  2. Git中撤销提交

    Git的几种状态 未修改 原始内容 已修改 ↓ 工 作 区 已暂存 ↓ git add 暂 存 区 已提交 ↓ git commit 本地仓库 已推送 ↓ git push 远程仓库 注意:下面所有命 ...

  3. Ubuntu更改主目录文件名为英文

    Ubuntu的语言设置成中文之后,自己主目录下的桌面.下载.文档等文件夹全部为中文汉字,使用终端时,输入十分不方便.需要把文件夹改成英文,而不更改系统语言. 在终端中输入以下命令 export LAN ...

  4. (转)Java并发编程:线程池的使用

    背景:线程池在面试时候经常遇到,反复出现的问题就是理解不深入,不能做到游刃有余.所以这篇博客是要深入总结线程池的使用. ThreadPoolExecutor的继承关系 线程池的原理 1.线程池状态(4 ...

  5. bouncing-balls

    效果如下: 代码目录如下: <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charse ...

  6. poj 2385 Apple Catching(记录结果再利用的动态规划)

    传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 题意: 有两颗苹果树,在每一时刻只有其中一棵苹果树会掉苹果,而Bessie可以在很短的时 ...

  7. 记cccc天梯赛第三届决赛

        首先我很想知道,为什么我没有参加初赛,就可以去决赛,这个究竟有没有初赛,这真是未解之谜.     其次,会长说得不错,菜是原罪.不知道这次的表现能不能把我送去湘潭挑战赛....     我身边 ...

  8. HTML学习笔记Day9

    一.宽高自适应 网页布局中经常要定义元素的宽和高:但很多时候我们希望元素的大小能够根据窗口或父元素自动调整,这就是自适应,元素自适应在网页布局中非常重要,tanenggou它能够使网页显示更灵活,可以 ...

  9. Java运算符和引用数据类型(Scanner、Random)

    运算符 算术运算符: 运算符 运算规则 范例 结果 + 正号 +3 3 + 加 2+3 5 + 连接字符串 “中”+“国” “中国” - 负号 int a=3;-a -3 - 减 3-1 2 * 乘 ...

  10. Redis分布式锁----悲观锁实现,以秒杀系统为例

    摘要:本文要实现的是一种使用redis来实现分布式锁. 1.分布式锁 分布式锁在是一种用来安全访问分式式机器上变量的安全方案,一般用在全局id生成,秒杀系统,全局变量共享.分布式事务等.一般会有两种实 ...