cbv、resful、APIView和序列化组件
CBV的源码分析
-Class Base View(基于类的视图)
-Function Base View( 基于函数的视图)
-def as_view 类方法
-def view:类方法内部,闭包函数定义:内层函数包含对外部作用域的引用
-python中一切皆对象:函数也是对象
-hasattr(self, 'get')--判断self类中是不是有该(get)方法
-反射 setattr(self,get,get_all):相当于把get函数,变成了get_all
-getattr(self, 'get'):拿到get函数的内存地址
- def view(request, *args, **kwargs):self = cls(**initkwargs)if hasattr(self, 'get') and not hasattr(self, 'head'):self.head = self.getself.request = requestself.args = argsself.kwargs = kwargs#执行:dispatch:谁的dispatch方法?写的cbv的那个c,视图中的那个视图类#我这个类如果没有写dispatch,会执行View中的dispatch方法return self.dispatch(request, *args, **kwargs)
-def dispatch(self, request, *args, **kwargs):#request.method 前台请求的方法,转成了小写#http_method_names View中定义的一个列表:是一堆请求方式if request.method.lower() in self.http_method_names:#getattr的第三个参数是默认值:self.http_method_not_allowed#拿到get方法的内存地址handler = getattr(self, request.method.lower(), self.http_method_not_allowed)else:handler = self.http_method_not_allowed#get(request,*args, **kwargs)return handler(request, *args, **kwargs)总结:*******请求来了--->as_view---->view---->dispatch--->分发到不同的函数,执行函数,拿到结果,然后返回
1、1 阅读源码:
左侧工具栏----》设置图标---->点击-----》show menbers(能看到py文件,类的方法)
2 resful规范(是什么)-什么是resful(定义)-是一个规范-面向资源编程:把网络中所有东西,想象成资源-规范:-10条规范-API与用户的通信协议,总是使用HTTPs协议:https比http安全-域名 https://api.example.com 尽量将API部署在专用域名(会存在跨域问题)https://example.org/api/ API很简单例如写一个查询所有图书的api接口:https://api.example.com/bookshttps://127.0.0.1/api/books-版本:每个接口都应该有版本URL,如:https://api.example.com/v1/ https://127.0.0.1/api/v2/books(推荐用这种)请求头 跨域时,引发发送多次请求-路径,视网络上任何东西都是资源,均使用名词表示(可复数)https://api.example.com/v1/bookshttps://api.example.com/v1/animalshttps://api.example.com/v1/employees不能这么写:-获取所有图书:https://127.0.0.1/api/get_all_books-新增一本书:https://127.0.0.1/api/add_book同一都用这个:https://api.example.com/v1/books-methodGET :从服务器取出资源(一项或多项)POST :在服务器新建一个资源PUT :在服务器更新资源(客户端提供改变后的完整资源)PATCH :在服务器更新资源(客户端提供改变的属性)DELETE :从服务器删除资源-过滤,通过在url上传参的形式传递搜索条件https://api.example.com/v1/zoos?limit=10:指定返回记录的数量-状态码请求回去,需要有状态码自定义状态码status: 100表示成功101表示用户名密码错误102我也不知道什么错误-错误处理,应返回错误信息,error当做key。-{status:100,error:'错误信息写上'}-返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范。GET /books:返回资源对象的列表(数组)GET /books/1:返回单个资源对象POST /books:返回新生成的资源对象 -新增,传数据,一旦新增完成,把新的资源对象返回PUT /books/1:返回完整的资源对象PATCH /books/1:返回完整的资源对象DELETE /books/1:返回一个空文档-Hypermedia API,RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API 方法,使得用户不查文档,也知道下一步应该做什么。{status:100msg:成功url:127.0.0.1/books/1}核心:返回结果中提供链接
2.1 django写resful规范的接口 2.2 postman软件:模拟发请求的软件 2.3 格式化json格式数据-https://www.json.cn/ 2.4 put请求,django不会帮我解析body内的数据,需要自己处理3 drf(django rest framework)框架(django的app)安装:djangorestframework-它是一个app,要在咱的项目中用-只是快速的构建resful规范的接口-csrf_exempt:局部禁用csrf(csrf是可以局部使用,局部禁用)-以后再执行的dispatch方法是APIView的dispatch方法-getattr和setattr-重点掌握这三点:-request.data 是个方法,包装成了属性,前台传过来body体中数据的数据,放在里面-request.query_params 这个是原来GET中的数据-request把原来的request包装进去了 4 APIView源码分析5 序列化-1 自己写for循环来处理(麻烦)-2 django提供的序列化组件(不可控)from django.core import serializersret=serializers.serialize('json','queryset对象')ret就是序列化之后的字符串了,不需要再序列化了-3 drf给咱提供的序列化组件-1 先导入from rest_framework.serializers import Serializerfrom rest_framework import serializers-2 写一个类,继承Serializer-3 在类内部写属性:name=serializers.CharField()-4 使用:-先生成对象,需要传参数 instance:要序列化的对象(可能是queryset,也可能是单个对象) many:如果是queryset---True,,如果是单个对象--False-5 对象.data --->是一个字典
转载于:https://www.cnblogs.com/zhouhao123/p/10098093.html
cbv、resful、APIView和序列化组件相关推荐
- APIView与序列化组件使用
APIView基本使用 1.什么是APIView Django中视图views.py有两种一种是基于类的实现另一种是函数的实现,而APIView就是REST framework提供的所有视图的基类,继 ...
- Rest Framework:序列化组件
Django内置的serializers(把对象序列化成json字符串 from django.core import serializersdef test(request):book_list = ...
- drf3 Serializers 序列化组件
为什么要用序列化组件 做前后端分离的项目,我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 给前端数据的时候都要转成json格式,那就需要对从数据库拿到的数据进行序列化. ...
- Django框架(十九)—— drf:序列化组件(serializer)
序列化组件 # 模型层 from django.db import modelsclass Book(models.Model): nid = models.AutoField(primary_key ...
- DAY97 - Rest Framework(二)- 序列化组件之Serializer和ModelSerializer
一.序列化组件之Serializer from django.http import JsonResponse from rest_framework.views import APIView fro ...
- Rest Framework:二、序列化组件
一.序列化组件 环境配置: 使django支持Mysql(前面已有介绍,这里不再重复) 使django支持 framework 在settings.py中的INSTALLED_APPS字段添加: &q ...
- Django rest framework 序列化组件
在笔者认为,在Django rest framework中最重要的是序列化组件,通过序列化我们可以将我们后台数据通过一定格式发送到我们的前端,然后通过一定的方法展示我们的数据. 那么我们就开始介绍我们 ...
- Django DRF认证组件/权限组件/序列化组件综合总结(完整版)
本代码完成的功能是: 1.根据token判断用户登录状态,然后提示用户是否登陆, 2.用户登录后,根据用户类型判断用户是否有权限查看资料 使用rest_framework一定要在配置文件设置先设置 ' ...
- Django-rest-framework框架之APIView与序列化详解
今日内容概要 基于APIView+Response写视图类 APIView的执行流程(源码分析) Request类的源码分析 验证不同编码格式提交数据(request.POST) 序列化类的序列化的使 ...
- Rest Framework第二天-序列化组件(下)、解析器
序列化组件(下) 一.rest-framework序列化之ModelSerializer class BookSerializers(serializers.ModelSerializer):clas ...
最新文章
- php过滤非法字符函数,利用php怎么对非法字符进行过滤
- 第16届东北赛区线上比赛斯赛点时间安排+直播链接
- to make target ‘../../lib/aaaaa.so‘, needed by ‘ xxx ‘
- 【技术短文】基于深度负相关学习的人群计数方法
- mysql的引擎讲解
- json的格式和简单例子
- 岗位推荐 | 清华大学CoAI实验室招聘博士后
- 天气预报如何得获得?
- 网易云 计算机,网易云音乐电脑版2.7.4.198336_网易云音乐 - 系统之家
- 秒杀系统的设计思维导图
- 花生壳覆盖安装,完全卸载,注册表
- 真实案例,现场的MOS管大面积烧毁,百思不得其姐,求大神们分析原因
- 什么是资本运营的核心?
- 微信小程序 收起键盘 wx.hideKeyboard()
- 使用WinRE向Windows10中添加新的本地管理员账户
- 石墨烯粉末, 是否导电?
- wormhole make 问题
- HTML那些可爱的“表情包”
- 如何用标准IO逆序输出文件
- 1993年的台湾工厂SOP解读,依旧经典!