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. DHU--1247 Hat’s Words && HiHocder--1014 Trie树 (字典树模版题)

    题目链接 DHU--1247 Hat’s Words HiHocder--1014 Trie树 两个一个递归方式一个非递归 HiHocoder #include<bits/stdc++.h> ...

  2. request.getRequestDispatcher 页面跳转,样式丢失。

    在页面中引用样式和其它资源的时候,尽量不要用相对路径,因为"当前路径"这个概念在J2EE中是不稳定的. 所以最好都是绝对路径,类似于: <% String cp = requ ...

  3. java 各种数据类型判断为空

    一,基本数据类型 八种基本类型有默认值 http://www.runoob.com/java/java-basic-datatypes.html 二,String 对象 // 判断String为空 / ...

  4. 纪中2018暑假培训day7提高b组改题记录

    由于今天太颓了,所以没有解释 t1: Description 码零鼠是一只很喜欢mx数学的神犇,上面那个不是ta本人的样子.这天,ta在研究一个神奇的数列,这个数列是这样的:a0 = 1an = ai ...

  5. ImageMagick:获取一行文字的宽与高

    double *fm = MagickQueryFontMetrics(mw_temp, dw_wand, text_utf8); //获取文字在指定字体和字号下的宽度和高度 double textW ...

  6. FluentScheduler定时器计划任务

    http://www.cnblogs.com/lgxlsm/p/6734011.html 用了FluentScheduler后,再也比想用timer计时器了. FluentScheduler 是 .N ...

  7. IDEA或者WebStorm关闭JS文件的黄色提示

    这个编译器虽然好用,但是友好的提醒(语法校验)太多啦 解决: 在右下角有个小人儿 然后更改提示级别

  8. 把本人基于Dubbo的毕业设计分享粗来~

    这个毕业设计不是太让我满意,可能时间关系吧,但是现在工作了我也懒得没时间去完善了[目前也就有一个功能没完成,就是给产品经理送绿帽子的模块] 项目地址:GitHub 技术栈:Spring+SpringM ...

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

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

  10. xp与win7双系统时删除win7启动菜单

    1.提取Win7安装光盘中,boot目录下的[bootsect.exe]到其它盘中,备用! 2 2.启动到WinXP或者WinPE或者Dos中,只要是能执行dos命令的地方就可以 3 3.cmd下进入 ...