Django rest framework 框架

  • 開發(fā)模式
    • 普通開發(fā)模式(前后端放一起)
    • 前后端分離
      • 后端開發(fā)

        為前端提供URL(API/接口的開發(fā))

    • Django中的 FBV和 CBV
      • FBV:function base view 基于函數(shù)的視圖 view.py
        def users(request):
            user_list = ['xxx', 'yyy']
            return HttpResponse(json.dumps((user_list), ))
        
      • CBV:class base view 基于類的視圖 view.py
        from django.views import View 
        
        class StudentsView(View):
             def get(self, requeset, *args, **kwargs):
                  return HttpResponse('GET')
             def post(self, requeset, *args, **kwargs):
                  return HttpResponse('POST')  
             def put(self, requeset, *args, **kwargs):
                  return HttpResponse('PUT') 
             def delete(self, requeset, *args, **kwargs):
                  return HttpResponse('DELETE')                      
        
        注意:使用CBV,則在 url.py 要寫入類名.as_view()這種方式
        from django.config.urls import url
        from app01 import views
        
        urlpatterns = [
            url('users/', views.users),
            url('students/'), views.StudentView.as_view()),
        ]                
        
    • 若有相同功能的可以寫在基類中:
       from django.views import View 
      
       class MyBaseView(object):
            def dispatch(self, request, *args, **kwargs):
                print('before')
                ret = super(MyBaseView, self).dispatch(request, *args, **kwargs)
                print('after')
                return ret
       class StudentsView(MyBaseView, view):
            def get(self, request, *args, **kwargs):
                print('get方法')
                return HttpResponse('GET')
      
      圖片.png

總結:
默認是開啟全站csrf認證的,
在FBV模式中,
方案一,注釋掉django.middleware.csrf.CsrfViewMiddleware中間件;
方案二,在views.py中導入from Django.decorators.csrf import csrf_exempt, csrf_protect然后添加裝飾器@csrf_exempt不使用認證,添加@csrf_protect使用認證
在CBV模式中,
方案一:導入from django.utils.decorators import method_decorator,from Django.decorators.csrf import csrf_exempt, csrf_protect,在方法上添加裝飾器@method_decorator(csrf_exempt)不使用認證,加裝飾器@method_decorator(csrf_protect)使用認證
方案二:在類中添加@method_decorator(csrf_exempt, name='dispatch')

 from django.views import View 

 class MyBaseView(object):
      @method_decorator(csrf_exempt)
      def dispatch(self, request, *args, **kwargs):
          print('before')
          ret = super(MyBaseView, self).dispatch(request, *args, **kwargs)
          print('after')
          return ret
 # @method_decorator(csrf_exempt, name='dispatch') # 方案二
 class StudentsView(MyBaseView, view):
      def get(self, request, *args, **kwargs):
          print('get方法')
          return HttpResponse('GET')
  • restful 規(guī)范
    • 1.根據(jù)method的不同做不同的操作,只寫一個URL
    • 2.推薦使用HTTPS
    • 3.命名規(guī)范:www.xxxx.com/api/v1/名詞名稱
    • 4.方法method:
      • GET :從服務器取出資源(一項或多項)
      • POST :在服務器新建一個資源
      • PUT :在服務器更新資源(客戶端提供改變后的完整資源)
      • PATCH :在服務器更新資源(客戶端提供改變的屬性)
      • DELETE :從服務器刪除資源
    • 過濾
    • 狀態(tài)碼
      • 200 OK - [GET]:服務器成功返回用戶請求的數(shù)據(jù),該操作是冪等的(Idempotent)。
      • 201 CREATED - [POST/PUT/PATCH]:用戶新建或修改數(shù)據(jù)成功。
      • 202 Accepted - [*]:表示一個請求已經(jīng)進入后臺排隊(異步任務)
      • 204 NO CONTENT - [DELETE]:用戶刪除數(shù)據(jù)成功。
      • 400 INVALID REQUEST - [POST/PUT/PATCH]:用戶發(fā)出的請求有錯誤,服務器沒有進行新建或修改數(shù)據(jù)的操作,該操作是冪等的。
      • 401 Unauthorized - [*]:表示用戶沒有權限(令牌、用戶名、密碼錯誤)。
      • 403 Forbidden - [*] 表示用戶得到授權(與401錯誤相對),但是訪問是被禁止的。
      • 404 NOT FOUND - [*]:用戶發(fā)出的請求針對的是不存在的記錄,服務器沒有進行操作,該操作是冪等的。
      • 406 Not Acceptable - [GET]:用戶請求的格式不可得(比如用戶請求JSON格式,但是只有XML格式)。
      • 410 Gone -[GET]:用戶請求的資源被永久刪除,且不會再得到的。
      • 422 Unprocesable entity - [POST/PUT/PATCH] 當創(chuàng)建一個對象時,發(fā)生一個驗證錯誤。
      • 500 INTERNAL SERVER ERROR - [*]:服務器發(fā)生錯誤,用戶將無法判斷發(fā)出的請求是否成功。
    • 錯誤處理,狀態(tài)碼是4xx時,應返回錯誤信息,error當做key。
      {
          error: "Invalid API key"
      }
      
    • 返回結果,針對不同操作,服務器向用戶返回的結果應該符合以下規(guī)范。
      • GET /xxx:返回資源對象的列表(數(shù)組)
      • GET /xxx/id:返回單個資源對象
      • POST /xxx:返回新生成的資源對象
      • PUT /xxx/id:返回完整的資源對象
      • PATCH /xxx/id:返回完整的資源對象
      • DELETE /xxx/id:返回一個空文檔
    • 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"
      }}
      
    摘自:http://www.ruanyifeng.com/blog/2014/05/restful_api.html
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容