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版本) 也 ...
随机推荐
- window无法启动mongodb服务:系统找不到指定的文件错误的解决方法
原文:http://www.phperz.com/article/15/0530/131534.html 错误描述 错误2:系统找不到指定文件 思考过程 昨天做测试的时候,先后安装了两次MongoDB ...
- 如何刻录cd音乐
用nero,选择cd,音乐光盘(第一个)可以添加入wav,MP3等.刻录即可.
- spring boot 连接mysql mongodb with jpa
https://github.com/bigben0123/gs-accessing-data-mysql-mongo-jpa
- java ee Concurrency 并发编程
https://www.javacodegeeks.com/2014/07/java-ee-concurrency-api-tutorial.html This is a sample chapter ...
- tyvj/joyoi 1374 火车进出栈问题(水水版)
我受不了了. Catalan数第100项,30000项,50000项,cnm 这tm哪里是在考数学,分明是在考高精度,FFT...... 有剧毒! 我只得写高精度,只能过100的那个题,两个进化版超时 ...
- vue2.0获取自定义属性的值
最近在项目中使用了vue.js.在爬坑的路上遇到了很多问题.这里都会给记录下来,今天要说的是怎么获取自定义属性的值. HTML <!DOCTYPE html> <html> & ...
- 第四篇:记录相关操作 SQL逻辑查询语句执行顺序
http://www.cnblogs.com/linhaifeng/articles/7372774.html 一 SELECT语句关键字的定义顺序 SELECT DISTINCT <selec ...
- 关于react-native项目在MacBookPro环境下打包成IPA
苹果开发者打包是需要接入公司的开发者账户里面的.看是企业账户还是什么,具体我不太清楚. 不过打包的方法倒是大同小异. 我们一起新建项目,先跑起来这个项目 npm install -g yarn rea ...
- 开源的电商 B2C、B2B2C 电商系统-关于shopnc版权问题处处是陷阱啊
最近有好多人收到过shopnc的律师函,关于这可能大部分人都是在淘宝购买的,或者直接在33hao购买的.很多人可能没注意版权的问题,以为在33hao购买就没问题,但这只是陷阱,大家一定要注意 来源:h ...
- 【优秀的Sketch插件】PaintCode for Sketch for Mac 1.1
[简介] PaintCode for Sketch 是一款结合了PaintCode和Sketch两款软件强大功能的插件,今天和大家分享最新的1.1版本,支持Sketch 40+版本,这个插件能够让你的 ...