zoukankan      html  css  js  c++  java
  • restful规范与rest_framework

    restful规范与rest_framework
    django两种开发模式:

    一、前后端不分离项目

    二、前后端分离项目

    什么是restful规范?

    在前后端不分离的项目中,网页所需要的数据可以直接通过模板渲染的方式传递到前端页面,并且可以很好的支持django自带的各种验证工具,比如csrfmiddleware

    但在前后端分离的项目中,前后端的数据通信普遍通过json字符串的形式通信,那么我们就需要有个标准去定义前后端沟通方式或者说格式

    restful就是来干这件事情的,它是一种面向资源的架构,规定API如何编写,通过它我们可以让api更加简洁可维护,是对于我们写程序的一些规范

    再次强调,restful规范只是一种规范,并不是强制性的,各公司可以结合自身需要去做适配和调整

    它对于接口规范的影响深刻,绝大多数公司开发都沿用了这项规范,所以这往往也是面试官喜欢问的问题之一

    restful规范10条:

      1、API与用户的通信协议,总是使用HTTPS协议--数据更安全

      2、域名有区分:

        -https://api.example.com
       -https://example.org/api/      
    

      3、版本:

        可以放在路径中

          -https://api.example.com/v1/zoos 这里的v1即是表示接口版本

        也可以放在请求头中

      4、通过method区分是什么操作

        -get 表示获取资源

        -post 表示新增

        -put/patch表示更新

        -delete表示删除

      5、路径、视网络上的所有东西都是资源,用名词表示

          -https://api.example.com/v1/zoos 这里的zoo即是名词,不再出现动词表示操作了

        例如获取id为1的书籍

          https://api.example.com/v1/books/1 # 这是用get请求表示请求资源,如果是delete请求即表示将这本书删除
      6、过滤,在路径上传参的形式传递搜索条件

          https://www.baidu.com/s?wd=python&rsv_spt=1
      7、返回状态码:

      8、正确错误与否都应返回相应信息

      {"status_code":100,"message":"登陆成功!"}
      {"status_code":101,"message":"登陆失败!密码错误!"}
    

      9、返回结果,针对不同的请求,服务器向用户返回结果

                #    -get获取所有资源/get获取一个资源
                请求    -127.0.0.1/api/vi/books  获取所有图书
                结果    {"status_code":100,'msg':'获取成功',data:[{},{}]}
                请求    -127.0.0.1/api/vi/books/3  获取id为3的图书
                结果    {"status_code":100,'msg':'获取成功',data:{name:xx,....}}
                #    -新增数据,把新增的数据再返回
                #    -修改了数据,返回完整的资源对象
                #    -删除数据,返回一个空文档            
    

      10、返回结果中提供链接

    什么是rest_framework?

    它是基于Django的一种服务框架,可以帮助我们快速开发符合RESTful规范的接口框架。

    功能:

    1.路由

    2.视图

    3.版本

    4.认证

    5.权限

    6.频率

    7.解析器

    8.序列化

    9.分页

    10.渲染器

    drf (django rest_framework):

    APIView 的源码,Requset的源码
      -安装:

        -pip3 install djangorestframework
        -pycharm中安装
    

        -使用
      -第一步,再写视图,都写cbv

    
        from rest_framework.views import APIView
        class Books(APIView):
        pass
    

      -第二步,在setting中配置,rest_framework实质上是一个app,需要注册才可以使用

      INSTALLED_APPS= [
        。。。。。
        'rest_framework'
      ]
    

      -源码分析:
      视图类继承了APIView 之后:

        -1 所有的请求都没有csrf的认证了
        -2 在APIView中as_view本质还是调用了父类的as_view(View的as_view)
        -3 as_view中调用dispatch ----->>>这个dispatch是APIView的dispatch
    

      -APIVIew的dispatch方法:

        1 对原生request对象做了一层包装(面向对象的封装),以后再用的request对象都新的request对象
        -2 在APIView中self.initial(request, *args, **kwargs),里面有频率控制,权限控制和认证相关
        -3 根据请求方法执行咱们写的视图类中的相应方法
    

        --视图类中方法的request对象,已经变成了封装后的request
      -Request类:

        -1 原生的request是self._request
        -2 取以post形式提交的数据,从request.data中取(urlencoded,formdata,json格式)
        -3 query_params 就是原生request的GET的数据
        -4 上传的文件是从FILES中取
        -5 (重点)其他的属性,直接request.属性名(因为重写了__getattr__方法)
    

    引自希希大队长,侵删

  • 相关阅读:
    86. Partition List
    2. Add Two Numbers
    55. Jump Game
    70. Climbing Stairs
    53. Maximum Subarray
    64. Minimum Path Sum
    122. Best Time to Buy and Sell Stock II
    以场景为中心的产品设计方法
    那些产品经理犯过最大的错
    Axure教程:如何使用动态面板?动态面板功能详解
  • 原文地址:https://www.cnblogs.com/luowenConnor/p/11708118.html
Copyright © 2011-2022 走看看