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. limits.conf文件工作原理

    1. limits.conf 描述 limits.conf文件实际是Linux PAM(插入式认证模块,Pluggable Authentication Modules)中 pam_limits.so ...

  2. 全面理解虚拟DOM(1)

    最近一两年前端最火的技术莫过于 reactjs,angularJS,vuejs,即便你没用过也可能听过,像ReactJS由业界顶尖的互联网公司facebook提出,其本身有很多先进的设计思路,比如页面 ...

  3. (三)orcale体系结构

    https://www.cnblogs.com/chengxiao/p/5904783.html 一.什么是Oracle数据库? 众所周知,Oracle DataBase是一款关系型数据库管理系统(不 ...

  4. CodeForces - 18A Triangle(数学?)

    传送门 题意: 给出三个点的坐标,初始,这三个点可以构成一个三角形. 如果初始坐标可以构成直角三角形,输出"RIGNT". 如果某个点的 x或y 坐标移动一个单位后可以组成直角三角 ...

  5. js数组歌

    判断是不是数组,isArray最靠谱. 按照条件来判断,every/some给答案 是否包含此元素,includes最快速. find/findIndex很相似,按条件给第一个值. indexOf/l ...

  6. 在gitlab新建空项目,将本地的git仓库的内容上传

    gitlab新建了这个项目. 按照官网的步骤上传代码 一:将本地代码上传到本地仓库 1.进入项目文件夹 git init 2.项目代码添加到本地git git add . 3.提交到stage区域 g ...

  7. (字符串 枚举)The Hardest Problem Ever hdu1048

    The Hardest Problem Ever 链接:http://acm.hdu.edu.cn/showproblem.php?pid=1048 Time Limit: 2000/1000 MS ...

  8. 有时候eclipse 导入maven项目 启动的时候回出现这样一个问题

    严重: A child container failed during start java.util.concurrent.ExecutionException: org.apache.catali ...

  9. Java概念、语法和变量基础整理

    Java概述 J2SE:  Java 2 Platform Standard Edition( 2005年之后更名为Java SE ).包含构成Java语言核心的类 J2EE: Java 2 Plat ...

  10. python 发送邮件模板

    ##发送普通txt文件(与发送html邮件不同的是邮件内容设置里的type设置为text,下面代码为发送普通邮件的另一种方法) import smtplibimport stringfrom emai ...