restframeword之APIview
一, CBV(class based view) 与 FBV(function based view)
class LoginView(View):
def get(self,request):
return render(request,"login.html")
def post(self,request):
user=request.POST.get("user")
pwd=request.POST.get("pwd")
if 1:
return HttpResponse("OK")
url(r'^index/', views.index) # 用户一旦访问:index(request) 函数变量
# url(r'^login/', views.LoginView.as_view()),# 用户一旦访问login进入视图执行class方法
# 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)
二,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) 版本控制