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


(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包装进去了

 


 














posted @ 2018-12-10 21:27  星牧  阅读(448)  评论(0编辑  收藏  举报