RESTful规范(10条),djangorestframework规范接口,(djangorestframework)CBV源码的执行流程,安装djangorestframework 框架(app),(djangorestframework) 返回字典携带数据
(一)什么是RESTful
是一种规范
面向资源编程:把网络上的所有东西都想象成资源
(二)RESTful的 10 条规范
1. API与用户的通信协议,总是使用HTTPs协议 2. 域名 携带域名 tps://api.example.com :尽量将API部署在专用域名(会存在跨域问题) https://example.org/api/:API很简单(推荐) 3. 版本 携带版本 -https://api.example.com/v1/ -把版本号放在请求头中 127.0.0.1/book/1
4. 路径 均使用名词表示(把网络上所有东西都看作资源) (优先说出) -127.0.0.1/get_all_book/ 以前写法 -127.0.0.1/books/ 现在这么写 5. method 方法 通过请求方式来表示进行的操作 (优先说出) get 取(得到资源) post 增加 delete 删除 put 刷新 客户端提供改变后的完整资源
patch 刷新 客户端提供的改变后的属性
6. 过滤 通过在url上传参的形式传递搜索条件 7. 状态码 返回数据中携带状态码 1 开头:服务器正在处理 2 开头:服务器处理成功 3 开头:重定向 4 开头:客户端错误 5 开头:服务器错误 8 错误处理 返回数据中携带错误信息 9 返回结果针对不同操作,返回数据格式要求
10 返回结果中提供链接 核心:返回结果中提供链接
{ status:100 msg:成功 url:127.0.0.1/books/1 }
CBV源码执行流程:请求来了———》触发as_view()函数的执行———》dispatch方法的执行———》分发到不同请求函数
django启动就已经是请求的函数地址放在路由上了
url(r'^admin/', admin.site.urls), url(r'^books/$', views.Books.as_view()), # as_view()就已经是请求函数的内存地址
djangorestframework 规范接口
from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^books/$', views.Books.as_view()), # 查所有书 url(r'^get/(\d+)$', views.get), # 取 url(r'^post/', views.post), # 新增 url(r'^put/(\d+)', views.put), # 改 url(r'^patch/(\d+)', views.put), # 改 url(r'^delete/(\d+)', views.delete), # 删 ]
安装djangorestframework
pip3 install djangorestframework
-csrf_exempt:局部禁用 csrf(csrf是可以局部使用,局部禁用)
注册rest_framework
![](https://img2018.cnblogs.com/blog/1445702/201903/1445702-20190325163345498-121695059.png)
(djangorestframework)CBV源码的执行流程
CBV源码的执行流程:
1.执行父类APIView的dispacth方法
2.APIView 在调用父类的dispatch方法
3.dispatch方法得到的是请求函数的结果
from rest_framework.views import APIView 最终由dispatch总路由方法做分发到不同函数上 class Book(APIView): # 继承了APIView的类都是禁用csrf的 def get(self, request, pk): data = json.loads(str(request.body,encoding='utf-8')) name = data.get('name') price = data.get('price') models.Book.objects.filter(pk=pk).update(name=name,price=price) return JsonResponse({"status":100,'msg':'修改成功'})
(djangorestframework) 返回字典携带数据
# Create your views here. from app01 import models from django import views import json class Test(views.View): # 查 def get(self,request,*args,**kwargs): response = {'status':100,'data':None} # 前后台分离响应回去携带字典
books = models.Book.objects.all()
# 方法1 l1 = [{"name":book.name,"price":book.price} for book in books] response['data'] = l1
# 方法2
ret = models.Book.objects.all().values("name","price")
list(ret)
response['data'] = l1
response["status":200]
return JsonResponse(response,safe=False) # eg:{ "status":200,"data":[ {"name":"银瓶梅”}{"name":"铁瓶梅"}] }
def post(self,request,pk,): name = request.POST.get('name') price = request.POST.get('price') models.Book.object.create(name=name,price=price) return JsonResponse({'status':100,'msg':'创建成功'})
from rest_framework.request import Request
-重点掌握这三点: -request.data 是个方法,包装成了属性,前台传过来body体中数据的数据,放在里面 -request.query_params 这个是原来GET中的数据 -request把原来的request包装进去了