理解Django REST_FRAMEWORK

什么是RESTFUL?

API规范

1.什么是API? —>API就是接口,那什么是接口?接口就是url,在我练习django框架的时候,我们首先就是需要将MVC框架的映射做好,M就是model,V就是View,那model和view之间就需要url作为连接器一样将他们关联起来。当你访问一个地址的时候,我在url路由表中进行映射找到相关联的view视图中的函数或者类,然后进行一个数据的返回,这就是接口的作用,后台工作者将url告诉给前端工作者,前端工作人员在进行数据交互时,利用后端人员的url进行传参。

2 .API十大规范:

	1.API与用户的通讯协议应该为https
	
	2.域名的设计(同源策略)(JSONP跨域问题)

    3.版本问题
    
	4.路径资源问题(任何名词都可以作为资源)

    5.method(传数据方式)——> GET(获取服务器资源)/POST(向服务器新建资源)/PUT(服务器全局更新资源)/
                             PATCH(服务器局部更新资源)/Delete(服务器删除资源)
              
    6.在url上传参、https://example.org/api/v1/animals?id=1
                  https://example.org/api/v1/(?p<pk>\d+)
                  
    7.状态码和code(状态码是给浏览器的,而code可以是程序员自己定义用来细分异常的)
                   常见的状态码有:200 连接成功 /201 created/post/put/patch用户新建或者修改成功
                                  202 异步任务 /204 删除数据成功 /  400 用户请求错误 /401 用户无权限
                                  403(Forbidden)访问被禁止 / 404 页面未找到 / 410用户请求资源被永久删除
                                  500服务器发生错误用户将无法判断请求是否成功
                         
    8.错误处理 应返回错误信息 error作为返回字典数据的key值
                    {
                         error:"Invalid API key"
                    }
    9.返回结果,根据不同的method操作,服务器向用户返回不同的结果
               Get/connection:返回资源对象(列表)
               Get/connection/resource:返回单个资源对象
               Post/connection:返回新生成的资源对象
               Put/connection/resource:返回完整的资源对象
               Patch/connection/resource:返回完成的资源对象
               Delete/connection/resource:删除一个空文档
         
    10.Hypermedia:将一个对象的结果以超链接的方式返回,利用这个链接在做一个url映射,
                  在serializers序列化时可以进行实现、

略谈CBV/FBV

1.FBV:即(Function Base View) 它是基于函数的视图,在python中def定义的就是函数,在url中写完路由后可以直接写,views.Xxx,适合新入手Django框架的同志编写,有一个缺点就是需要自己去if判断method的类型,比如if method==GET/POST/DELETE:等
2.CBV:即(Class Base View)它是基于类的视图,在url后的编写中一定要加上Views.Xxx.as_view()方法,它的优点就是基于self.dispatch的反射,可以自身去查找数据的method方式在视图类中进行比较、以self.dispatch为入口:

def dispatch(self, request, *args, **kwargs):
    if request.method.lower() in self.http_method_names:
         handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
    else:
         handler = self.http_method_not_allowed
         return handler(request, *args, **kwargs)

这是视图继承于View的操作,最主要进行判断的函数就是getattr()、如果继承APIView则有更多的功能集,比如认证、权限、节流、版本、序列化等、因为APIView也是继承于View,所以相当于丰富了父类的功能。

CBV实现源码分析

1.请求进来,路由找到视图类并执行as_view()方法,执行这个方法时,返回一个view函数
2.执行view函数,其实就是返回一个self.dispatch()方法
3.如果继承于View或者APIView的自写类没有重写dispatch方法,则到父类中去找,如上图所示、
父类中的dispatch会根据请求方式的不同基于python类的反射去找相应的方法然后执行。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值