Django RestFramework (DRF)
准备:
下载 pip install djangorestframework
一 APIView源码解析
1 预备知识
CBV(class based view)
FBV(function based view)
2 CBV源码
class LoginView(View):
def get(self,request):
return render(request,"login.html")
url(r'^index/', views.index),
#url(r'^login/', views.LoginView.as_view()),
#url(r'^login/', View.view),
一旦用户get访问login:
#login-----》view(request):
self = cls(**initkwargs)
return self.dispatch(request, *args, **kwargs):
# 分发
handler = getattr(self, request.method.lower())
return handler(request, *args, **kwargs):
def get(self,request):
return render(request,"login.html")
3 restful协议
1 所有的数据,不过是通过网络获取的还是操作(增删改查)的数据,都是资源,将一切数据视为资源是REST区别与其他架构风格的最本质属性
2 面向资源架构(ROA:Resource Oriented Architecture)
3
不符合规范:
127.0.0.1:8000/books
127.0.0.1:8000/books/add/
127.0.0.1:8000/books/change/1
127.0.0.1:8000/books/delete/1
http协议请求方式:GET POST,DELETE,PUT,PATCH,OPTION.HEAD
GET:查看数据
POST:提交数据添加数据库
GET
books-------->查看数据--------------------> 返回所有数据列表 :[{},{},{}]
POST
books-------->添加数据--------------------->返回添加数据 :{}
PUT
books/1------->更新pk=1的数据--------------->返回更新后的数据: {}
Delete
books/1-------> 删除pk=1的数据-------------->返回空
GET
books/1------->查看单条数据 --------------->返回查看的单条数据 {}
4 Django RestFramework (DRF)--------------app
(1) APIView (*****)
(2) 序列化组件(*****)
(3) 视图类(mixin)(*****)
(4) 认证组件
(5) 权限组件
(6) 频率组件
(7) 分页组件
(8) 解析器组件(*****)
(9) 响应器组件
(10) url控制器
class CourseView(APIView):
def get(self,request):
course_list=Course.objects.all()
ret=[]
for course in course_list:
ret.append({
"title":course.title,
"desc":course.desc,
})
return HttpResponse(json.dumps(ret,ensure_ascii=False))
----APIView:
# url(r'^courses/', views.CourseView.as_view()),
# url(r'^courses/', APIView.as_view()),
# url(r'^courses/', APIView.as_view()),
# url(r'^courses/', View.view),
一旦用户访问:
courses--------> view(reqeust):
self = cls(**initkwargs)
return self.dispatch(request, *args, **kwargs) # APIView.dispatch()
def dispatch(request, *args, **kwargs):
# 1 重装一个新的request对象
# 2 认证组件,权限组件,频率组件
handler = getattr(self, request.method.lower())
response = handler(request, *args, **kwargs)
return response
csrf_exempt(view)
如果有csrf_token则,正常返回数据
没有则返回空数据
二 解析器组件
http协议的数据发送:
问题:如何发送json数据服务器
基于http协议
BS架构: Browser ------------------ Server
b'''
POST /login/ HTTP/1.1
...
...
contentType:application/x-www-form-urlencoded
user=yuan&pwd=123&a=1
contentType:application/json
{"user":"yuan","pwd"}
'''
JS Python
JSON.Stringfy(data) ============ json.dumps(data)
JSON.parser(data) ============ json.loads(data)
Django默认解析器:
if contentType:application/x-www-form-urlencoded:
user=yuan&pwd=123&a=1 -----》request.POST={"user":"yuan","pwd"}
else:
request.POST={}
解析器组件功能:
预备知识
1 request.body:可以得到请求体中的原生数据
2 django自带的解析只支持,不支持json等其他类型
contentType:application/x-www-form-urlencoded
contentType:multipart/form-data
3 ajax中定义发送数据的类:contentType
4 js的json序列化:JSON.stringify({name:'alex',pwd:'122'})
解析器组件:
可以解析json等各种类型的数据
Django RestFramework (DRF)的更多相关文章
- Django REST framework(DRF)
Django REST framework(DRF) FBV与CBV CBV源码分析 Restful接口规范 DRF简单配置使用和源码解析 DRF序列化器 DRF10大接口 DRF视图集 三大组件 j ...
- Django学习(2)数据宝库
数据库是一所大宝库,藏着各种宝贝.一个没有数据库的网站,功能有限.在Django中,支持的数据库有以下四种: SQLite3 MySQL PostgreSQL Oracle 其中SQLite3为Dja ...
- Django学习(4)表单,让数据库更美好
表单,在HTML中的标签为<form></form>,在网页中主要负责数据采集功能.我们在浏览网站时,常常会碰到注册账号.账号登录等,这就是表单的典型应用. 在Django学习 ...
- Django学习(3)模板定制
在Django学习(一)一首情诗中,views.py中HTML被直接硬编码在代码之中,虽然这样便于解释视图是如何工作的,但直接将HTML硬编码到视图却不算一个好主意.因为: 对页面设计进行的任何改变都 ...
- Django分页(一)
Django分页(一) 手动实现简单分页 HTML <!DOCTYPE html> <html lang="en"> <head> <me ...
- Python Django 学习 (二) 【Django 模型】
注: 由于自己排版确实很难看,本文开始使用markdown编辑,希望有所改善 官方定义 A model is the single, definitive source of information ...
- pycharm平台下的Django教程(转)
本文面向:有python基础,刚接触web框架的初学者. 环境:windows7 python3.5.1 pycharm专业版 Django 1.10版 pip3 一.Django简介 百度百 ...
- Django 模型(数据库)
Django 模型(数据库) ) email = models.EmailField() memo = models.TextField() def __unico ...
- Django视图(一)
Django视图(一) 一. 概述 作用:视图接受web请求,并相应请求 本质:视图是自定义的一个python中的函数 响应内容:正常视图,重定向视图,错误视图(404,500,400) 响应过程: ...
随机推荐
- 使用Struts2实现图片上传和拦截器
今天来分享一个图片上传 现在很多小项目里面基本上都有要显示图片的功能,所以呢图片上传是基本要掌握的啦 一般的图片上传原理就是从本地选择一张图片然后通过io流发布到服务器上去 上传方案基本有三种: 1. ...
- JS使用MD5加密
MD5加密JS代码 /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algor ...
- C# Combox控件绑定自定义数据
DataTable dt = new DataTable(); dt.Columns.Add("name"); dt.Columns.A ...
- Tomcat 和web 服务器配置
mkdir /usr/local/tomcat # cd /usr/local/tomcat # tar -zxvf /software/apache-tomcat-7.0.54.tar.gz 生成链 ...
- Linux基本命令 vi操作和插件
基本命令 vim命令 常用插件 基本命令 查看Tomcat日志: tail -n 20 -f catalina.out 查看指定列表: find ./ -name 'ser*' 搜索指定文件: loc ...
- [NOIP2018模拟赛10.25]瞎搞报告
闲扯 最近有点颓,都修到好晚,早上起来和吔shi一样难受 忍着困意把题面看完,发现啥也不会,又是一场写暴力的模拟赛 T1发现似乎可以DP,顺手码了个 T2像个最小瓶颈路板子,但是只做过N^2算法的.. ...
- 南宁AI项目
1.能了解并对项目整体进度情况有清晰的认识,什么时间点需要完成什么工作项. 2.认识了解项目干系人,能和客户独立沟通交流,理解现场业务,不要一问三不知,什么情况都不了. 3.能推动项目进展和问题及时处 ...
- 让网站支持老版本IE6、7、8、9浏览器的3种解决方案
1.htmlshiv.js Remy的 HTML5shiv通过JavaScript 来创建HTML5元素(如 main, header, footer等).在某种程度上通过JavaScript 创建的 ...
- js对象转数组
1.Array.from() 方法,用于数组的浅拷贝.就是将一个类数组对象或者可遍历对象转换成一个真正的数组.eg: let obj = { 0: ‘nihao‘, 1: ‘haha‘, 2: ‘ga ...
- K2 工作流_【解决方案】车企CAL应用解决方案,攻克新车质检环节管理难题_全球领先的工作流引擎
截止去年,中国已连续第九年成为全球最大汽车市场,与此同时关于乘用车新车售前检查(PDI)相关的诉讼纠纷案件也逐年呈上升趋势(PDI全称为Pre-Delivery Inspection,是经销商对乘 ...