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版本) 也 ...
随机推荐
- limits.conf文件工作原理
1. limits.conf 描述 limits.conf文件实际是Linux PAM(插入式认证模块,Pluggable Authentication Modules)中 pam_limits.so ...
- 全面理解虚拟DOM(1)
最近一两年前端最火的技术莫过于 reactjs,angularJS,vuejs,即便你没用过也可能听过,像ReactJS由业界顶尖的互联网公司facebook提出,其本身有很多先进的设计思路,比如页面 ...
- (三)orcale体系结构
https://www.cnblogs.com/chengxiao/p/5904783.html 一.什么是Oracle数据库? 众所周知,Oracle DataBase是一款关系型数据库管理系统(不 ...
- CodeForces - 18A Triangle(数学?)
传送门 题意: 给出三个点的坐标,初始,这三个点可以构成一个三角形. 如果初始坐标可以构成直角三角形,输出"RIGNT". 如果某个点的 x或y 坐标移动一个单位后可以组成直角三角 ...
- js数组歌
判断是不是数组,isArray最靠谱. 按照条件来判断,every/some给答案 是否包含此元素,includes最快速. find/findIndex很相似,按条件给第一个值. indexOf/l ...
- 在gitlab新建空项目,将本地的git仓库的内容上传
gitlab新建了这个项目. 按照官网的步骤上传代码 一:将本地代码上传到本地仓库 1.进入项目文件夹 git init 2.项目代码添加到本地git git add . 3.提交到stage区域 g ...
- (字符串 枚举)The Hardest Problem Ever hdu1048
The Hardest Problem Ever 链接:http://acm.hdu.edu.cn/showproblem.php?pid=1048 Time Limit: 2000/1000 MS ...
- 有时候eclipse 导入maven项目 启动的时候回出现这样一个问题
严重: A child container failed during start java.util.concurrent.ExecutionException: org.apache.catali ...
- Java概念、语法和变量基础整理
Java概述 J2SE: Java 2 Platform Standard Edition( 2005年之后更名为Java SE ).包含构成Java语言核心的类 J2EE: Java 2 Plat ...
- python 发送邮件模板
##发送普通txt文件(与发送html邮件不同的是邮件内容设置里的type设置为text,下面代码为发送普通邮件的另一种方法) import smtplibimport stringfrom emai ...