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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM