day 96

CBV与FBV

restful协议

---- 一切皆是资源,操作只是请求方式

----book表增删改查
/books/ books
/books/add/ addbook
/books/(\d+)/change/ changebook
/books/(\d+)/delete/ delbook

----book表增删改查
/books/ -----get books ----- 返回当前所有数据
/books/ -----post books ----- 返回提交数据

/books/(\d+)-----get bookdetail ----- 返回当前查看的单条数据
/books/(\d+)-----put bookdetail ----- 返回更新数据
/books/(\d+)-----delete bookdetail ----- 返回空

class Books(View):
def get(self,request):
pass # 查看所有书籍

def post(self,request):
pass # 添加书籍

class BooksDetail(View):
def get(self,request,id):
pass # 查看具体书籍

def put(self,request,id):
pass # 更新某本书籍

def delete(self,request,id):
pass # 删除某本书籍

restframework(Django)

----针对数据:json

(1)Django的原生request:

浏览器 ------------- 服务器

"GET url?a=1&b=2 http/1.1\r\user_agent:Google\r\ncontentType:urlencoded\r\n\r\n"
"POST url http/1.1\r\user_agent:Google\r\ncontentType:urlencoded\r\n\r\na=1&b=2"

request.body: a=1&b=2
request.POST:
if contentType:urlencoded:
a=1&b=2----->{"a":1,"b":2}

(2)restframework 下的APIView:

(3)
class PublishSerializers(serializers.Serializer):
name=serializers.CharField()
email=serializers.CharField()

PublishSerializers(queryset,many=true)
PublishSerializers(model_obj)

总结:
1 reuqest类----源码

2 restframework 下的APIView--源码

url(r'^books/$', views.BookView.as_view(),name="books")# View下的view

books/一旦被访问: view(request) ------APIView: dispatch()

3 def dispatch():

构建request对象
self.request=Request(request)
self.request._request
self.request.GET # get
self.request.data # POST PUT

分发----if get请求:
if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower(),
self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed

response = handler(request, *args, **kwargs) # self.get(request, *args, **kwargs)

return response

4 序列化类
# from django.core import serializers
# ret=serializers.serialize("json",publish_list)

restframework下的序列类 BookModelSerializers
将queryset或者model对象序列成一json数据
bs=BookModelSerializers(book_list,many=True,context={'request': request})
bs=BookModelSerializers(book,context={'request': request})

还可以做校验数据,json-------》queryset/model-->记录

bs=BookModelSerializers(data=request.data)
if bs.is_valid():
print(bs.validated_data)
bs.save() # 重写create方法
5 操作数据:

以Book表为例
class BookView(APIView):
# 查看所有书籍
def get(self,request):
book_list=Book.objects.all()
bs=BookModelSerializers(book_list,many=True,context={'request': request})
return Response(bs.data)

# 添加一本书籍
def post(self,request):
# post请求的数据
bs=BookModelSerializers(data=request.data)
if bs.is_valid():
print(bs.validated_data)
bs.save()# create方法
return Response(bs.data)
else:
return Response(bs.errors)

class BookDetailView(APIView):
# 查看一本书籍
def get(self,request,id):

book=Book.objects.filter(pk=id).first()
bs=BookModelSerializers(book,context={'request': request})
return Response(bs.data)
# 更新一本书籍
def put(self,request,id):
book=Book.objects.filter(pk=id).first()
bs=BookModelSerializers(book,data=request.data)
if bs.is_valid():
bs.save()
return Response(bs.data)
else:
return Response(bs.errors)
# 删除某一本书籍
def delete(self,request,id):
Book.objects.filter(pk=id).delete()

return Response()

restframework

1 APIView
2 序列组件
3 视图、
4 组件(认证权限频率)
5 数据解析器
6 分页和Response

转载于:https://www.cnblogs.com/huge-666/p/10088418.html

最新文章

  1. the final mapping would have more than 1 type
  2. 云原生语境下,如何重新解读微服务?
  3. Windows on Device 项目实践 4 - 智能风扇制作
  4. mac电脑如何与手机同步复制粘贴_如何将电脑里的文件同步到手机里?
  5. Coreseek Windows下安装调试
  6. Hackerrank manasa-and-combinatorics(数学推导)
  7. HTML5模拟衣服撕扯动画
  8. 枚举基类Enum详解
  9. f2fs学习笔记 - 3. F2FS文件系统布局
  10. 阅读《视音频编解码技术零基础学习方法-雷霄骅》摘要
  11. 数据清洗案例 OpenRefine入门
  12. 现在dns怎么解析域名呢?dns的形式有哪些?
  13. java modifier access_Java中的默认访问修饰符是什么? (What is the default access modifier in Java?)...
  14. 做一个“有意思”的人
  15. 访达前往文件夹_(苹果电脑excle没有查找全部)苹果笔记本有没有自带excel
  16. C语言统计一个字符串(包含空格)中字母的种类(不是个数)
  17. 转折点:移动互联网时代的商业法则
  18. Python获取链家二手房源数据信息
  19. 银联支付Java开发
  20. 【电信学】【2009.06】基于实验数据的参考MIMO天线构型性能研究

热门文章

  1. adapthisteq和histeq
  2. iOS 使用FMDB进行数据库操作
  3. 盘点Mac最受欢迎的优化清理软件2020|最新|集合|排行榜
  4. Vegas安装出现问题怎么办?
  5. 设计模式入门-单例模式
  6. 利用微查询和数据锐化进行大数据探索
  7. (十一)JAVA springboot ssm b2b2c多用户商城系统 - SSO单点登录之OAuth2.0登录流程(2)
  8. OpenCV——PS 图层混合算法(一)
  9. 渗透测试专题之实战技巧总结
  10. 移动端实现内滚动的4种方案