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與技術無關,表明的是一種軟件架構風格,REST是Representational 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)
幫助咱們快速的開發符合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) 版本控制