RESTful API学习Day2 - Django REST framework
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使用:
注册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',
]
导入APIView
from rest_framewor.views import APIView, CBV继承它自己写一个序列化的工具类
BookSerializer使用queryset数据实例化得到一个 序列化对象 --》 ser_obj
使用
from rest_framework.response import Responserestframework提供的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数据
字段参数
many=True参数实例化 序列化器对象的时候,添加
many=True参数,能实现序列化多个对象。read_only=True和write_only=True正向序列化用
read_only=True
反向序列化用write_only=Truesourcecategory = serializers.CharField(source='get_category_display', read_only=True)
# Obj --> JSON
# Obj.title --> "书名"
# Obj.get_category_display() --> "Python"
require=False非必须,做校验的时候,该字段可以不填
校验方法:
校验规则的三种方式:
局部的校验方法:
# 在serializer类中定义局部校验规则
def validate_title(self, value):
# value就是需要检验的这个字段的值
"""类似于Form组件的局部钩子"""
if '红烧牛肉' in value:
raise serializers.ValidationError('你是魔鬼吗?')
else:
return value
全局的校验方法:
def validate(self, attrs):
pass
自定义校验函数
# 类似于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的更多相关文章
- RESTful API 学习
/********************************************************************************* * RESTful API 学习 ...
- python 全栈开发,Day95(RESTful API介绍,基于Django实现RESTful API,DRF 序列化)
昨日内容回顾 1. rest framework serializer(序列化)的简单使用 QuerySet([ obj, obj, obj]) --> JSON格式数据 0. 安装和导入: p ...
- RESTful架构&简单使用Django rest framework
RESTful架构 1 什么是REST REST全称是Representational State Transfer,中文意思是表述性状态转移. 它首次出现在2000年Roy Fielding的博士论 ...
- RESTful API 学习【第1篇】
一. 什么是RESTful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” REST从资源的角 ...
- Django 学习之Django Rest Framework(DRF)
一. WEB应用模式 在开发Web应用中,有两种应用模式 1. 前后端不分离 把html模板文件和django的模板语法结合渲染完成以后才从服务器返回给客户. 2. 前后端分离 二. API接口 AP ...
- RESTful API学习与实践
参考文献: 1.Learn About ASP.NET Web API 2.深入浅出REST 3.Infoq上“深入探索REST”系列文章 4.RESTful API设计的一点经验 5.Angular ...
- Restful API学习Day5 - DRF之限制 分页 解析器和渲染器
参考文档: Django REST framework基础:认证.权限.限制 Django REST framework基础:分页 Django REST framework基础:解析器和渲染器 一. ...
- Restful API学习Day4 - DRF版本控制和认证
参考文档: Django REST framework基础:版本控制 Django REST framework基础:认证.权限.限制 为什么要有版本? 某些客户端 使用低版本只维护不开发新功能 v1 ...
- Django学习day2——Django安装与环境配置
安装 Django 文章中python版本为3.65 这里以windows7为例,在pip目录下运行pip install Django就能安装django最新版本(本文为django2.2版本) 也 ...
随机推荐
- HDU--1540 Tunnel Warfare(线段树区间更新)
题目链接:1540 Tunnel Warfare 以为单组输入 这个题多组输入 结构体记录每个区间左边和右边的连续区间 ms记录最大 在查询操作时: 1.这个点即将查询到右区间 看这个点 x 是否存在 ...
- Git中撤销提交
Git的几种状态 未修改 原始内容 已修改 ↓ 工 作 区 已暂存 ↓ git add 暂 存 区 已提交 ↓ git commit 本地仓库 已推送 ↓ git push 远程仓库 注意:下面所有命 ...
- Ubuntu更改主目录文件名为英文
Ubuntu的语言设置成中文之后,自己主目录下的桌面.下载.文档等文件夹全部为中文汉字,使用终端时,输入十分不方便.需要把文件夹改成英文,而不更改系统语言. 在终端中输入以下命令 export LAN ...
- (转)Java并发编程:线程池的使用
背景:线程池在面试时候经常遇到,反复出现的问题就是理解不深入,不能做到游刃有余.所以这篇博客是要深入总结线程池的使用. ThreadPoolExecutor的继承关系 线程池的原理 1.线程池状态(4 ...
- bouncing-balls
效果如下: 代码目录如下: <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charse ...
- poj 2385 Apple Catching(记录结果再利用的动态规划)
传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 题意: 有两颗苹果树,在每一时刻只有其中一棵苹果树会掉苹果,而Bessie可以在很短的时 ...
- 记cccc天梯赛第三届决赛
首先我很想知道,为什么我没有参加初赛,就可以去决赛,这个究竟有没有初赛,这真是未解之谜. 其次,会长说得不错,菜是原罪.不知道这次的表现能不能把我送去湘潭挑战赛.... 我身边 ...
- HTML学习笔记Day9
一.宽高自适应 网页布局中经常要定义元素的宽和高:但很多时候我们希望元素的大小能够根据窗口或父元素自动调整,这就是自适应,元素自适应在网页布局中非常重要,tanenggou它能够使网页显示更灵活,可以 ...
- Java运算符和引用数据类型(Scanner、Random)
运算符 算术运算符: 运算符 运算规则 范例 结果 + 正号 +3 3 + 加 2+3 5 + 连接字符串 “中”+“国” “中国” - 负号 int a=3;-a -3 - 减 3-1 2 * 乘 ...
- Redis分布式锁----悲观锁实现,以秒杀系统为例
摘要:本文要实现的是一种使用redis来实现分布式锁. 1.分布式锁 分布式锁在是一种用来安全访问分式式机器上变量的安全方案,一般用在全局id生成,秒杀系统,全局变量共享.分布式事务等.一般会有两种实 ...