Restful_framework视图组件代码实例解析


Posted in Python onNovember 17, 2020

一、基本视图

写一个出版社的增删查改resful接口

要自己事先创建好django项目,并创建好表,添加完记录

路由:

url(r'^publish/$', views.PublishView.as_view()),
url(r'^publish/(?P<pk>\d+)/$', views.PublishDetailView.as_view()),

视图:

from api import modelsfrom rest_framework import serializersfrom rest_framework.response import Responsefrom rest_framework.views import APIView
class PublishSerializers(serializers.ModelSerializer):
  class Meta:
    model=models.Publish
    fields='__all__'

class PublishView(APIView):
#查询出版社表中所有记录
  def get(self, request):
    publish_list = models.Publish.objects.all()
    bs = PublishSerializers(publish_list, many=True)
    # 序列化数据

    return Response(bs.data)  #返回的结果是列表中套字典


  def post(self, request):
    # 添加一条数据
    print(request.data)

    bs=PublishSerializers(data=request.data)
    if bs.is_valid():
      bs.save() # 生成记录
      return Response(bs.data)  #返回的是添加成功记录的字典
    else:

      return Response(bs.errors)

class PublishDetailView(APIView):
 #查询某一条数据
  def get(self,request,pk):
    publish_obj=models.Publish.objects.filter(pk=pk).first()
    bs=PublishSerializers(publish_obj,many=False)
    return Response(bs.data)
 #更新某一条数据
  def put(self,request,pk):
    publish_obj = models.Publish.objects.filter(pk=pk).first()

    bs=PublishSerializers(data=request.data,instance=publish_obj)
    if bs.is_valid():
      bs.save() # update
      return Response(bs.data)
    else:
      return Response(bs.errors)
 #删除某一条数据
  def delete(self,request,pk):
    models.Publish.objects.filter(pk=pk).delete()

    return Response("")

二、mixins类和generic类编写视图

路由:

url(r'^publishes$', views.Publish.as_view()),
url(r'^publish/(?P<pk>\d+)', views.PublishDetail.as_view()),

视图:

from api import models
from rest_framework import serializers
from rest_framework import mixins
from rest_framework.generics import GenericAPIView
class PublishSer(serializers.ModelSerializer):
  class Meta:
    model=models.Publish
    fields='__all__'
class Publish(GenericAPIView,mixins.ListModelMixin,mixins.CreateModelMixin):
  queryset = models.Publish.objects.all()
  serializer_class = PublishSer
  def get(self,request):
    return self.list(request)  #在ListModelMixin下有一个list方法,返回的就是查询的结果:Response(serializer.data)
  def post(self,request):
    return self.create(request) #已经封装好了,帮我们做校验和序列化,返回的是添加成功的记录
class PublishDetail(GenericAPIView,mixins.DestroyModelMixin,mixins.RetrieveModelMixin,mixins.UpdateModelMixin):

  queryset = models.Publish.objects.all()
  serializer_class = PublishSer
  def get(self,request,*args, **kwargs):
    return self.retrieve(request,*args, **kwargs)

  def put(self,request,*args, **kwargs):
    return self.update(request,*args, **kwargs)

  def delete(self,request,*args, **kwargs):
    return self.destroy(request,*args, **kwargs)

三、使用generic下ListCreateAPIView和RetrieveUpdateDestroyAPIView

路由:

url(r'^publishes$', views.Publish.as_view()),
url(r'^publish/(?P<pk>\d+)', views.PublishDetail.as_view()),

视图:

from api import models
from rest_framework import mixins
from rest_framework.generics import GenericAPIView
from rest_framework.generics import ListCreateAPIView,RetrieveUpdateDestroyAPIView
from rest_framework import serializers
class Publishser(serializers.ModelSerializer):
  class Meta:
    model=models.Publish
    fields='__all__'

class Publish(ListCreateAPIView):
  queryset = models.Publish.objects.all()
  serializer_class = Publishser

class PublishDetail(RetrieveUpdateDestroyAPIView):
  queryset = models.Publish.objects.all()
  serializer_class = Publishser

四、使用ModelViewSet

路由:

url(r'^publish$',views.Publish.as_view({'get':'list','post':'create'})),
url(r'^publish/(?P<pk>\d+)', views.Publish.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})),

视图:

from rest_framework.viewsets import ModelViewSet
from api import models
from rest_framework import serializers
class Publishser(serializers.ModelSerializer):
  class Meta:
    model=models.Publish
    fields='__all__'
class Publish(ModelViewSet):
  queryset = models.Publish.objects.all()
  serializer_class = Publishser

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
May 22 Python
Python的MongoDB模块PyMongo操作方法集锦
Jan 05 Python
深入解析Python设计模式编程中建造者模式的使用
Mar 02 Python
python+pygame实现坦克大战
Sep 10 Python
Python中join()函数多种操作代码实例
Jan 13 Python
python实现在线翻译功能
Mar 03 Python
python三引号如何输入
Jul 06 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
Sep 18 Python
Python Charles抓包配置实现流程图解
Sep 29 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
Jan 28 Python
Python快速优雅的批量修改Word文档样式
May 20 Python
Python获取江苏疫情实时数据及爬虫分析
Aug 02 Python
如何将Pycharm中调整字体大小的方式设置为&quot;ctrl+鼠标滚轮上下滑&quot;
Nov 17 #Python
Manjaro、pip、conda更换国内源的方法
Nov 17 #Python
pycharm中选中一个单词替换所有重复单词的实现方法
Nov 17 #Python
Pycharm中使用git进行合作开发的教程详解
Nov 17 #Python
python中requests模拟登录的三种方式(携带cookie/session进行请求网站)
Nov 17 #Python
python开发一个解析protobuf文件的简单编译器
Nov 17 #Python
解决python3.x安装numpy成功但import出错的问题
Nov 17 #Python
You might like
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
浅谈PHP eval()函数定义和用法
2016/06/21 PHP
Laravel ORM 数据model操作教程
2019/10/21 PHP
JS效率个人经验谈(8-15更新),加入range技巧
2007/01/09 Javascript
js png图片(有含有透明)在IE6中为什么不透明了
2010/02/07 Javascript
非常棒的10款jQuery 幻灯片插件
2011/06/14 Javascript
jquery.validate的使用说明介绍
2013/11/12 Javascript
Javascript控制input输入时间格式的方法
2015/01/28 Javascript
js关于命名空间的函数实例
2015/02/05 Javascript
JS弹出可拖拽可关闭的div层完整实例
2015/02/13 Javascript
JavaScript原生对象之Date对象的属性和方法详解
2015/03/13 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
2016/04/05 Javascript
vue数据双向绑定原理解析(get &amp; set)
2017/03/08 Javascript
Easyui ueditor 整合解决不能编辑的问题(推荐)
2017/06/25 Javascript
浅谈webpack编译vue项目生成的代码探索
2017/12/11 Javascript
JS实现图片旋转动画效果封装与使用示例
2018/07/09 Javascript
浅谈Vue.use的使用
2018/08/29 Javascript
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
如何阻止小程序遮罩层下方图层滚动
2019/09/05 Javascript
python根据路径导入模块的方法
2014/09/30 Python
Python中实现常量(Const)功能
2015/01/28 Python
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
python进行两个表格对比的方法
2018/06/27 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
Java面试题:请问一下代码输出是什么
2015/05/27 面试题
请介绍一下Ant
2016/07/22 面试题
会计自荐书
2013/12/02 职场文书
船舶专业个人求职信范文
2014/01/02 职场文书
高中自我评价范文
2014/01/27 职场文书
学校教研活动总结
2014/07/02 职场文书
爱心捐书活动总结
2014/07/05 职场文书
九一八事变演讲稿
2014/09/05 职场文书
党员批评与自我批评(5篇)
2014/09/23 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
高中生军训感言
2015/08/01 职场文书
nginx反向代理配置去除前缀案例教程
2021/07/26 Servers