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实现apahce网站日志分析示例
Apr 02 Python
编程语言Python的发展史
Sep 26 Python
使用Python编写简单的画图板程序的示例教程
Dec 08 Python
python获取本机所有IP地址的方法
Dec 26 Python
python中使用 xlwt 操作excel的常见方法与问题
Jan 13 Python
Python中py文件转换成exe可执行文件的方法
Jun 14 Python
Python创建或生成列表的操作方法
Jun 19 Python
一篇文章了解Python中常见的序列化操作
Jun 20 Python
python lambda表达式(匿名函数)写法解析
Sep 16 Python
Python解析多帧dicom数据详解
Jan 13 Python
pytorch中的inference使用实例
Feb 20 Python
Python基于Socket实现简易多人聊天室的示例代码
Nov 29 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
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
PHP CLI模式下的多进程应用分析
2013/06/03 PHP
php使用base64加密解密图片示例分享
2014/01/20 PHP
PHP制作万年历
2015/01/07 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
2018/08/07 PHP
给事件响应函数传参数的四种方式小结
2013/12/05 Javascript
jQuery点缩略图弹出层显示大图片
2015/02/13 Javascript
javascript遇到html5的一些表单属性
2015/07/05 Javascript
AngularJS基础 ng-model-options 指令简单示例
2016/08/02 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
微信小程序 判断手机号的实现代码
2017/04/19 Javascript
随机生成10个不重复的0-100的数字(实例讲解)
2017/08/16 Javascript
JavaScript函数绑定用法实例分析
2017/11/14 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
2018/06/07 Javascript
用 js 写一个 js 解释器过程详解
2019/08/02 Javascript
微信小程序云开发获取文件夹下所有文件(推荐)
2019/11/14 Javascript
JavaScript使用canvas绘制随机验证码
2020/02/17 Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
2020/04/11 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
2020/08/20 NodeJs
python实现上传下载文件功能
2020/11/19 Python
python并发编程多进程 互斥锁原理解析
2019/08/20 Python
django中上传图片分页三级联动效果的实现代码
2019/08/30 Python
python 如何去除字符串头尾的多余符号
2019/11/19 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
如何在VSCode下使用Jupyter的教程详解
2020/07/13 Python
css3 实现圆形旋转倒计时
2018/02/24 HTML / CSS
CSS3 实现飘动的云朵动画
2020/12/01 HTML / CSS
好莱坞百老汇御用王牌美妆:Koh Gen Do 江原道
2018/04/03 全球购物
你所在的项目是如何确定版本号的
2015/12/28 面试题
喜之郎果冻广告词
2014/03/20 职场文书
党支部特色活动方案
2014/08/20 职场文书
2015年药店店长工作总结
2015/04/29 职场文书
初婚未育证明样本
2015/06/18 职场文书
《中彩那天》教学反思
2016/02/24 职场文书
详解JS WebSocket断开原因和心跳机制
2021/05/07 Javascript