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 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数据
字段参数
many=True
参数实例化 序列化器对象的时候,添加
many=True
参数,能实现序列化多个对象。read_only=True
和write_only=True
正向序列化用
read_only=True
反向序列化用write_only=True
source
category = 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版本) 也 ...
随机推荐
- Linux系统状态监控小工具 - Linux Dash
Linux Dash是一个简单易用的Linux系统状态监控工具,项目地址:https://github.com/afaqurk/linux-dash 1.安装Apache服务: [root@local ...
- Go 语言 HTTP Server 源码分析
http://www.codeceo.com/go-http-server-code.html
- Dreamweaver - <!DOCTYPE html>
最近设计网页,很多使用 <!DOCTYPE html> 关于<!DOCTYPE html>的详细介绍: http://www.w3school.com.cn/tags/tag_ ...
- [NOIP2018]旅行(数据加强版)(图论+基环树)
数据范围多了2个0就是不一样,O(n^2)只能68分了.(其中60分是n=m+1和原题一样的做法送的),这题直接从NOIP难度变为NOI Plus难度了不说废话直接写题解:首先dfs一遍找到环,然后和 ...
- GWAS研究可利用的数据库(持续更新)
1.列表包括数据库名称.表型.是否能下载到基因型(genotype).是否能下载到GWAS结果文件(P值.效应值.SNP位点).目前收集到的有如下: 参考到这些数据库的文献:Genome-wide a ...
- Linux之LVS 20180708
LVS负载均衡项目,是Linux开源项目中专门用于负载均衡的,主要应用在client访问server时,通过LVS来分配对应的server来响应client的请求.client访问时,都是访问的LVS ...
- Luogu P4306 [JSOI2010]连通数 传递闭包
正解其实是\(Tarjan\) + \(拓扑拓扑\),但是却可以被\(O(N^3 / 32)\)复杂度的传递闭包水过去.心疼一下写拓扑的小可爱们. 学到一个\(bitset\)优化布尔图的骚操作,直接 ...
- node(基础)_node中的javascript
一.前言 ...
- Shiro进行简单的身份验证(二)
一个Realm数据源: shiro.ini: [users] wp=123456 main方法执行认证: package com.wp.shiro; import org.apache.shiro.S ...
- 强大的 10款 Mac 思维导图和流程图软件推荐
本文首发于[风云社区 SCOEE],想了解更多mac软件相关内容,可到[风云社区 SCOEE] 今天和大家分享思维导图和流程图工具,思维导图软件可以说应用非常的广,无论是设计工作.开发工作.管理工作都 ...