zoukankan      html  css  js  c++  java
  • 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、返回状态码:

      {"status_code":100}

      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__方法)

  • 相关阅读:
    消息队列(一)
    Servlet3.1学习(三)
    再弄一片文章凑个4篇文章的数,主要是用于XML和 Binary序列化和反序列化的类
    Entity Framework底层操作封装(3)
    Entity Framework底层操作封装(2)
    Entity Framework底层操作封装(1)
    实现合并区间
    socket简单案例实现
    PostgreSQL11.2数据恢复记录(From Physical Files)
    Spring Data JPA 与 MyBatis 对比分析
  • 原文地址:https://www.cnblogs.com/dongxixi/p/11116899.html
Copyright © 2011-2022 走看看