django框架-rest framework+vue
- 这两个非常的重要,我需要一周的时间来刚清楚这个,
- restful协议,这个先不讲,后面讲,
- 根据这个restful有很多的框架,我们现在要学习的rest framework,是django下面的框架,这就是根据restful协议开发的,
restful协议
- ---- 一切皆是资源,操作只是请求方式
- ######################################################
- ----book表增删改查
- /books/ books
- /books/add/ addbook
- /books/(\d+)/change/ changebook
- /books/(\d+)/delete/ delbook
- 这是没有学习restful协议之前,我们设计的url和视图
- 学习了之后,就不能使用这种方式了,用下面的这种方式
- #########################################################
- ----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 # 添加书籍
- 这个里面就没有put请求,因为你不能使用更新所有的书籍,
- class BooksDetail(View):
- def get(self,request,id):
- pass # 查看具体书籍
- def put(self,request,id):
- pass # 更新某本书籍
- def delete(self,request,id):
- pass # 删除某本书籍
- 上面这些不是随便写的,这是一种规范,根据restful协议的规范,
- 所以这样改造之后,你在看url,里面就没有任何动词了,动作都以请求方式的来标识了,这就是一切皆资源,这里面没有动词,
rest framework
- rest framework针对的就是json数据,
- rest framework就是django的一个app,需要下载,pip install djangorestframework
- 下载成功了,
rest framework序列化类
- 新建项目,
- 添加数据库模型,
- 迁移数据库,这一步我有点没有看到,数据库到哪里去了,不是用的mysql
- 好了现在有四张表,出版社,书本,作者,
- ########################################################
- 问题:
- 现在的问题是我请求出版社的所有内容,如何通过json格式返回给前端??
- ############################################################
- 通过数据库查询出来的结果直接返回给前端,这是一个queryset对象,
- json.dum(publisher_data)这样会报错的,
- 因为queryset对象不能被序列化,
- 你可以把结果进行list()强转,然后就不会序列化报错了,这是一种方式,
- 也可以把数据循环读取进入列表,
- ########################################################
- # 方式3:
- # from django.core import serializers #这是django自带的序列化组件,和rest framework还没有关系,
- # ret=serializers.serialize("json",publish_list)
- 这种序列化是比较好的,
- ###############################################
- 还有一种方式就是使用rest framework序列化类
- 使用这个类,需要定义个类,
- from rest_framework import serializers
- class PublishSerializers(serializers.Serializer):
- name = serializers.CharField()
- email = serializers.CharField()
- 为什么会有这个类,是为了给queryset序列化用的,
- # 序列组件
- publish_list = Publish.objects.all()
- ps = PublishModelSerializers(publish_list, many=True)
- ps这个就是序列化之后的内容,ps.data就是我们要的内容了,
- return Response(ps.data)
request.post的玩法,
- 这个request是在from django.core.handlers.wsgi import WSGIRequest
- 这个就是之前使用的request.POST,
- 这是django原生的request是怎么玩的,
- ########################################
- 现在看看rest framework是怎么玩的,
- from rest_framework.views import APIView
- APIView继承了view,这个里面重写了一些父类的方法,就不会去找view里面的方法了,如果apiviews里面没有 ,就会去父类去找,