美文网首页
Django----djagorestframwork使用

Django----djagorestframwork使用

作者: 优秀的人A | 来源:发表于2019-07-22 09:43 被阅读0次
    • restful(表者征状态转移,面向资源编程)------------------------------------------->约定
      从资源的角度审视整个网络,将分布在网络中某个节点的资源通过url进行标识,客户端通过url获取资源的表征,
      获得这些表征使应用转变状态。-----------------------------------------------------------是一种软件架构风格。
      所有数据是通过网络获取的是操作的数据(增删改查),都是资源-------------------------------互联网上的一切东西都视为资源。

    restf规则:
    API与用户的通信协议,使用的是http协议
    1:域名尽量部署在专有域名之下,若API很简单,不会进一步扩展,可以考虑放在主域名下。

    2:应将api的版本号放入url,还可以将版本号放入Http请求头信息中,但不如放在url中方便。

    3:在RESTful架构中,每个网址代表一种资源(resource),所以网址中应该有动词,应该使用名词,
    而且所用的名词往往与数据库的表格名对应。一般来说,数据库中的表都是同种记录的"集合"(collection),所以API中的名词也应该使用复数。

    4:用于区别url接口应将API加入到url.

    5: 如果记录数量很多,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回结果。

    6: 服务器向用户返回的状态码和提示信息。

    7 : 如果状态码是4xx,就应该向用户返回出错信息。一般来说,返回的信息中将error作为键名,出错信息作为键值即可。

    8: 请求方式的不同,进行不同的操作。post----get----put----patch----delete


    restful-api:
    API与用户的通行协议,总是使用HTTPs协议
    api:---------------------------------------------------------------------------------------接口

    用途:
    1:为别人提供服务----------发送短信
    2:前后端分离--------------前后端分离
    规范:

    1:url+api
    https://api.example.com------------------------------------------------------------尽量将API部署在专用域名(会存在跨域问题)
    https://example.org/api/-----------------------------------------------------------API很简单

    2:名词
    资源名必须是名词,不能是动词.....

    3:版本

    URL-------------------------------------------------------------------------------如:https://api.example.com/v1/

    请求头------------------------------------------------------------------------------跨域时,引发发送多次请求

    4:提交方式------------------------------------------------------------method

    GET:-------------------------------------------------------------------------------从服务器取出资源(一项或多项)
    POST:------------------------------------------------------------------------------在服务器新建一个资源
    PUT:-----------------------------------------------------------------------------在服务器更新资源(客户端提供改变后的完整资源)
    PATCH :----------------------------------------------------------------------------在服务器更新资源(客户端提供改变的属性)
    DELETE:---------------------------------------------------------------------------从服务器删除资源
    5:json数据------------------------------------------------------------返回json数据

    6:status--------------------------------------------------------------状态码

    • 200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。

    • 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。

    • 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)

    • 204 NO CONTENT - [DELETE]:用户删除数据成功。

    • 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。

    • 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。

    • 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。

    • 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。

    • 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。

    • 410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。

    • 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。

    • 500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

    更多看这里:https://www.jianshu.com/p/e3a2f31b0d7d

    7:aypermedia link-----------------------------------------------------返回链接

    • Hypermedia API,RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么。

                   {"link": {
                     "rel":   "collection https://www.example.com/zoos",
                     "href":  "https://api.example.com/zoos",
                     "title": "List of zoos",
                     "type":  "application/vnd.yourformat+json"
                   }}         
      

    8:错误处理
    错误处理,状态码是4xx时,应返回错误信息,error当做key。

                {
                    error: "Invalid API key"
                }
    

    为什么做前后端分离?
    数据的解耦,提高开发效率。

    安装:
    pip3 install djangorestframework -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com

    继承关系:

    • class View(object):-------------------------------------------------view

    • class APIView(View):------------------------------------------------APIview

    • class GenericAPIView(views.APIView):--------------------------------GenericAPIView

    • class GenericViewSet(ViewSetMixin, generics.GenericAPIView)---------GenericViewSet

    • class ModelViewSet(mixins.CreateModelMixin,-------------------------ModelViewSet(增删改查,genericViewset)
      mixins.RetrieveModelMixin,
      mixins.UpdateModelMixin,
      mixins.DestroyModelMixin,
      mixins.ListModelMixin,
      GenericViewSet):

    Django Rest Framework 的的请求生命周期:
    hTTP请求 —> wsgi —> 中间件 —> 路由分发 —> 执行对应类的dispatch方法 —> 视图函数 —>返回
    采用CBV的请求方式。

    相关文章

      网友评论

          本文标题:Django----djagorestframwork使用

          本文链接:https://www.haomeiwen.com/subject/idqilctx.html