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 相关文章推荐
python中偏函数partial用法实例分析
Jul 08 Python
Python常用知识点汇总
May 08 Python
用Python登录好友QQ空间点赞的示例代码
Nov 04 Python
Python opencv实现人眼/人脸识别以及实时打码处理
Apr 29 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
Aug 30 Python
Pycharm 2020年最新激活码(亲测有效)
Sep 18 Python
Python实现井字棋小游戏
Mar 09 Python
python 实现rolling和apply函数的向下取值操作
Jun 08 Python
.img/.hdr格式转.nii格式的操作
Jul 01 Python
Python爬取网页信息的示例
Sep 24 Python
Python在线和离线安装第三方库的方法
Oct 31 Python
Python 线程池模块之多线程操作代码
May 20 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做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
php排序算法(冒泡排序,快速排序)
2012/10/09 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
jqgrid 编辑添加功能详细解析
2013/11/08 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
2014/06/09 Javascript
js实现最短的XML格式化工具实例
2015/03/12 Javascript
jQuery实现加入购物车飞入动画效果
2015/03/14 Javascript
jquery滚动特效集锦
2015/06/03 Javascript
第七篇Bootstrap表单布局实例代码详解(三种表单布局)
2016/06/21 Javascript
javascript经典特效分享 手风琴、轮播图、图片滑动
2016/09/14 Javascript
Bootstrap 填充Json数据的实例代码
2017/01/11 Javascript
JavaScript正则替换HTML标签功能示例
2017/03/02 Javascript
js 获取图像缩放后的实际宽高,位置等信息
2017/03/07 Javascript
js实现简单数字变动效果
2017/11/06 Javascript
对vue事件的延迟执行实例讲解
2018/08/28 Javascript
vue封装一个简单的div框选时间的组件的方法
2019/01/06 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
2019/12/31 Javascript
JS实现网页烟花动画效果
2020/03/10 Javascript
Python易忽视知识点小结
2015/05/25 Python
Python中使用装饰器来优化尾递归的示例
2016/06/18 Python
对Python3 * 和 ** 运算符详解
2019/02/16 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
2019/08/12 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
Python3标准库之functools管理函数的工具详解
2020/02/27 Python
Python 添加文件注释和函数注释操作
2020/08/09 Python
如何更换python默认编辑器的背景色
2020/08/10 Python
土耳其时尚潮流在线购物网站:Trendyol
2017/10/10 全球购物
UNIX文件名称有什么规定
2013/03/25 面试题
《花瓣飘香》教学反思
2014/04/15 职场文书
给老婆的检讨书
2015/01/27 职场文书
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
2021/03/30 HTML / CSS
使用pytorch实现线性回归
2021/04/11 Python
教你使用vscode 搭建react-native开发环境
2021/07/07 Javascript
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js
光之国的四大叛徒:第一贝利亚导致宇宙毁灭,赛文奥特曼在榜
2022/03/18 日漫
MySQL学习之基础命令实操总结
2022/03/19 MySQL