restframeword之APIview

一, CBV(class based view) 與  FBV(function based view)

class LoginView(View):html

 

    def get(self,request):django

 

        return render(request,"login.html")json

 

    def post(self,request):服務器

        user=request.POST.get("user")restful

        pwd=request.POST.get("pwd")架構

 

        if 1:app

            return HttpResponse("OK")框架

 

url(r'^index/', views.index)  # 用戶一旦訪問:index(request) 函數變量函數

 

# url(r'^login/', views.LoginView.as_view()),# 用戶一旦訪問login進入視圖執行class方法post

# url(r'^login/', View.as_view()), # 調用View 裏面的as_view方法,

# url(r'^login/', View.view),          #  view裏面的view方法

 

# 用戶一旦訪問get請求login-----》

 

    view(request):

    return self.dispatch(request, *args, **kwargs)  #self.dispatch 看執行結果是什麼就返回什麼,self:誰調用就是誰的實例對象,

 

        dispatch(self, request, *args, **kwargs):   

if request.method.lower() in self.http_method_names:#請求方法在不在裏面

handler = getattr(self, request.method.lower()) # 從反射拿到用什麼方法

 

return handler(request, *args, **kwargs)             # 若是都沒有就返回這個

     

 

 

例:

    # def dispatch(self, request, *args, **kwargs):  # dispatch本身有就以本身的沒有找父類

    #     print("dispatch")

    #     ret=super().dispatch(request, *args, **kwargs) # 若是是get請求不返回就調用父類,不出頁面,可是get是執行的

    #     return ret

果 

 

 

RESTful:(面向資源架構(ROA:Resource Oriented Architecture))# 是一種規範

REST與技術無關,表明的是一種軟件架構風格,RESTRepresentational State Transfer的簡稱,中文翻譯爲表徵狀態轉移(一種規範)

1   一切皆資源  url裏面不能有動詞:

   books            books

   book/add/        addbook

   book/1/change    changebook

   book/1/delete    changebook

   

   restful:     

                  get       查看

         books  ------------>

                  post      添加

      

              get        查看

 book/1/-------------                          

                  delete     刪除

  put        更新

  

2

GET     :從服務器取出資源(一項或多項)

POST    :在服務器新建一個資源

PUT     :在服務器更新資源(客戶端提供改變後的完整資源)

PATCH   :在服務器更新資源(客戶端提供改變的屬性)

DELETE  :從服務器刪除資源

序列化

沒有restframework咱們同樣能夠序列化,只是restframework更簡單

例1

from app01.models import Course

class CourseView(View):

 

    def get(self,request):

 

        ret=Course.objects.all()

        import json

        # temp=[]

        # for i in ret:

        #     temp.append({

        #         "title":i.title

        #     })

       #   return HttpResponse (json.dumps(temp.emsure_ascil=False))能夠顯示出來對象

 

例2

        # from django.core.serializers import serialize序列化

        # ret=serialize("json",ret)

        return HttpResponse(ret)

 

二,restframework框架:

幫助咱們快速的開發符合restful規範的接口

 

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple djangorestframework   下載

 

 

(1)  APIView    (******)

 class PublishView(APIView):  # 繼承APIView  

 

def get(self,request):

publish_list=Publish.objects.all()

ret=serialize("json",publish_list)

 

return HttpResponse(ret)

 

def post(self,request):

pass

     #url(r'^publishes/', views.PublishView.as_view()),

     #url(r'^publishes/', APIView.as_view()),

     #url(r'^publishes/', APIView.as_view()),

     #url(r'^publishes/', View.view),

 

 用戶一旦訪問get請求

     APIView 裏面繼承view,有view功能以外又添加本身的新功能,和上面view不同

 View.view(request):

      return self.dispatch(request, *args, **kwargs)

        ---- APIView.dispatch(request, *args, **kwargs):

if request.method.lower() in self.http_method_names:

handler = getattr(self, request.method.lower())

 

response = handler(request, *args, **kwargs)

return response

 

 

 

流程:

 

 

 

(2)  序列化組件 ******)

(3)  視圖組件   (******)

(4)  解析器     

(5)  認證組件

(6)  權限組件

(7)  頻率組件

(8)  分頁器

(9)  響應器

(10) url控制器

(11) 版本控制

相關文章
相關標籤/搜索