restful规范与rest_framework
django两种开发模式:
一、前后端不分离项目
二、前后端分离项目
什么是restful规范?
在前后端不分离的项目中,网页所需要的数据可以直接通过模板渲染的方式传递到前端页面,并且可以很好的支持django自带的各种验证工具,比如csrfmiddleware
但在前后端分离的项目中,前后端的数据通信普遍通过json字符串的形式通信,那么我们就需要有个标准去定义前后端沟通方式或者说格式
restful就是来干这件事情的,它是一种面向资源的架构,规定API如何编写,通过它我们可以让api更加简洁可维护,是对于我们写程序的一些规范
再次强调,restful规范只是一种规范,并不是强制性的,各公司可以结合自身需要去做适配和调整
它对于接口规范的影响深刻,绝大多数公司开发都沿用了这项规范,所以这往往也是面试官喜欢问的问题之一
restful规范10条:
1、API与用户的通信协议,总是使用HTTPS协议--数据更安全
2、域名有区分:
-https://api.example.com
-https://example.org/api/
3、版本:
可以放在路径中
-https://api.example.com/v1/zoos 这里的v1即是表示接口版本
也可以放在请求头中
4、通过method区分是什么操作
-get 表示获取资源
-post 表示新增
-put/patch表示更新
-delete表示删除
5、路径、视网络上的所有东西都是资源,用名词表示
-https://api.example.com/v1/zoos 这里的zoo即是名词,不再出现动词表示操作了
例如获取id为1的书籍
https://api.example.com/v1/books/1 # 这是用get请求表示请求资源,如果是delete请求即表示将这本书删除
6、过滤,在路径上传参的形式传递搜索条件
https://www.baidu.com/s?wd=python&rsv_spt=1
7、返回状态码:
{"status_code":100}
8、正确错误与否都应返回相应信息
{"status_code":100,"message":"登陆成功!"}
{"status_code":101,"message":"登陆失败!密码错误!"}
9、返回结果,针对不同的请求,服务器向用户返回结果
# -get获取所有资源/get获取一个资源
请求 -127.0.0.1/api/vi/books 获取所有图书
结果 {"status_code":100,'msg':'获取成功',data:[{},{}]}
请求 -127.0.0.1/api/vi/books/3 获取id为3的图书
结果 {"status_code":100,'msg':'获取成功',data:{name:xx,....}}
# -新增数据,把新增的数据再返回
# -修改了数据,返回完整的资源对象
# -删除数据,返回一个空文档
10、返回结果中提供链接
什么是rest_framework?
它是基于Django的一种服务框架,可以帮助我们快速开发符合RESTful规范的接口框架。
功能:
1.路由
2.视图
3.版本
4.认证
5.权限
6.频率
7.解析器
8.序列化
9.分页
10.渲染器
drf (django rest_framework):
APIView 的源码,Requset的源码
-安装:
-pip3 install djangorestframework
-pycharm中安装
-使用
-第一步,再写视图,都写cbv
from rest_framework.views import APIView
class Books(APIView):
pass
-第二步,在setting中配置,rest_framework实质上是一个app,需要注册才可以使用
INSTALLED_APPS= [
。。。。。
'rest_framework'
]
-源码分析:
视图类继承了APIView 之后:
-1 所有的请求都没有csrf的认证了
-2 在APIView中as_view本质还是调用了父类的as_view(View的as_view)
-3 as_view中调用dispatch ----->>>这个dispatch是APIView的dispatch
-APIVIew的dispatch方法:
1 对原生request对象做了一层包装(面向对象的封装),以后再用的request对象都新的request对象
-2 在APIView中self.initial(request, *args, **kwargs),里面有频率控制,权限控制和认证相关
-3 根据请求方法执行咱们写的视图类中的相应方法
--视图类中方法的request对象,已经变成了封装后的request
-Request类:
-1 原生的request是self._request
-2 取以post形式提交的数据,从request.data中取(urlencoded,formdata,json格式)
-3 query_params 就是原生request的GET的数据
-4 上传的文件是从FILES中取
-5 (重点)其他的属性,直接request.属性名(因为重写了__getattr__方法)
restful规范与rest_framework的更多相关文章
- DjangoRestFramework 学习之restful规范 APIview 解析器组件 Postman等
DjangoRestFramework学习一之restful规范.APIview.解析器组件.Postman等 本节目录 一 预备知识 二 restful规范 三 DRF的APIView和解析器组件 ...
- 一、restful规范 二、CBV(View)源代码执行流程 三、drf框架安装和简单使用
一.restful规范 ''' 它是一个规范,面向资源架构 十条规范 1.API与用户的通讯协议,总是使用HTTPs协议,确保了网络传输的安全性 2.域名 --https://api.example. ...
- django rest framework restful 规范
内容回顾: . django请求生命周期 -> 执行遵循wsgi协议的模块(socket服务端) -> 中间件(路由匹配) -> 视图函数(业务处理:ORM.模板渲染) -> ...
- day89 DjangoRsetFramework学习---restful规范,解析器组件,Postman等
DjangoRsetFramework学习---restful规范,解析器组件,Postman等 本节目录 一 预备知识 二 restful规范 三 DRF的APIView和解析 ...
- 001---CBV和restful规范
CBV 和 restful规范 知识点准备: django的view FBV:基于函数的视图 CBV:基于类的视图 urls.py from django.urls import path from ...
- django中的restful规范
基于django的原生restful规范 主路由:url.py from django.conf.urls import url, include from django.contrib import ...
- 18.DjangoRestFramework学习一之restful规范、APIview、解析器组件、Postman等
一 预备知识 预备知识:django的CBV和FBV CBV(class based view):多用,简单回顾一下 FBV(function based view): CBV模式的简单操作:来个登陆 ...
- Django框架(十七)-- CBV源码分析、restful规范、restframework框架
一.CBV源码分析 1.url层的使用CBV from app01 import views url(r'book/',views.Book.as_view) 2.as_view方法 as_view是 ...
- Django框架深入了解_01(Django请求生命周期、开发模式、cbv源码分析、restful规范、跨域、drf的安装及源码初识)
一.Django请求生命周期: 前端发出请求到后端,通过Django处理.响应返回给前端相关结果的过程 先进入实现了wsgi协议的web服务器--->进入django中间件--->路由f分 ...
随机推荐
- 28、[源码]-AOP原理-@EnableAspectJAutoProxy
28.[源码]-AOP原理-@EnableAspectJAutoProxy
- P1578 奶牛浴场 有障碍点的最大子矩形
这题咕咕了很久终于写了\(QwQ\) 思路:扫? 提交:2次 错因:数据差评,第一次把矩形的长宽搞反了竟然只有一个点没有\(A\). 题解: 显然能成为答案的矩形的边界一定有障碍点或者与大矩形边界重合 ...
- 001_linuxC++之_类的引入
(一) C++类的引入,图片的程序比较好看,文中程序不贴出来 (二) 知识点 1. 成员函数的存取权限:公有的(public),保护的(protectd),私有的(private) 2. 第27行th ...
- F. Make Them Similar ( 暴力折半枚举 + 小技巧 )
传送门 题意: 给你 n 个数 a[ 1 ] ~ a[ n ], n <= 100: 让你找一个 x , 使得 a[ 1 ] = a[ 1 ] ^ x ~ a[ n ] = a[ n ] ^ ...
- leetcode解题报告(2):Remove Duplicates from Sorted ArrayII
描述 Follow up for "Remove Duplicates": What if duplicates are allowed at most twice? For ex ...
- Django—Ajax
Ajax-get url url(r'^ajax_add/', views.ajax_add), url(r'^ajax_demo1/', views.ajax_demo1), 视图 def ajax ...
- codeforces1213F tarjan缩点+拓扑排序
题意 给定两个长度为n的排列p和q,构造一个字符串s满足\(s[p_i]<=s[p_{i+1}]\)和\(s[q_i]<=s[q_{i+1}]\),且满足字符串中不同字符的个数不少于k. ...
- php foreach 中使用&时注意
结果: 没看懂的可以参考 :https://blog.csdn.net/ghostyusheng/article/details/79925351
- npm传参技巧
博主今天遇到一个问题,使用vue-cli-serve,想要用shelljs来执行vue-cli-serve,动态给它传“--port xxxx"但是发现”--port“怎么传都穿不进去,后面 ...
- mysql 运行中 偶尔 报错 2002 也许是这个问题,内存不足导致的
配置都是正常,最终发现内存使用率高达90%多,加配置后解决问题(升级服务器配置) 加之前是2核4g ,升级配置后 4核8g