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的Tornado框架中实现简单的在线代理的教程
May 02 Python
Python中Django框架下的staticfiles使用简介
May 30 Python
Python中with及contextlib的用法详解
Jun 08 Python
使用Python读取大文件的方法
Feb 11 Python
python的schedule定时任务模块二次封装方法
Feb 19 Python
python装饰器常见使用方法分析
Jun 26 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
Aug 05 Python
win10系统下python3安装及pip换源和使用教程
Jan 06 Python
Python读写操作csv和excle文件代码实例
Mar 16 Python
如何让python的运行速度得到提升
Jul 08 Python
Python3爬虫中关于中文分词的详解
Jul 29 Python
Python用requests库爬取返回为空的解决办法
Feb 21 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
破解图片防盗链的代码(asp/php)测试通过
2010/07/02 PHP
PHP中的string类型使用说明
2010/07/27 PHP
PHP无法访问远程mysql的问题分析及解决
2013/05/16 PHP
PHP $_FILES中error返回值详解
2014/01/30 PHP
php自定义函数实现JS的escape的方法示例
2016/07/07 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
关于PHP5.6+版本“No input file specified”问题的解决
2019/12/11 PHP
js 3种归并操作的实例代码
2013/10/30 Javascript
jQuery之选项卡的简单实现
2014/02/28 Javascript
基于jQuery实现的扇形定时器附源码下载
2015/10/20 Javascript
js实现不重复导入的方法
2016/03/02 Javascript
集成vue到jquery/bootstrap项目的方法
2018/02/10 jQuery
webpack4.x打包过程详解
2018/07/18 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
2018/10/18 Javascript
javascript中call,apply,callee,caller用法实例分析
2019/07/24 Javascript
vue学习笔记之过滤器的基本使用方法实例分析
2020/02/01 Javascript
vue页面引入three.js实现3d动画场景操作
2020/08/10 Javascript
微信小程序入门之指南针
2020/10/22 Javascript
[01:20:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第四场 8.26
2018/08/30 DOTA
python合并文本文件示例
2014/02/07 Python
Python Queue模块详解
2014/11/30 Python
python使用xmlrpclib模块实现对百度google的ping功能
2015/06/02 Python
使用相同的Apache实例来运行Django和Media文件
2015/07/22 Python
Python代码解决RenderView窗口not found问题
2016/08/28 Python
Python使用sklearn库实现的各种分类算法简单应用小结
2019/07/04 Python
用vue.js组件模拟v-model指令实例方法
2019/07/05 Python
wxpython自定义下拉列表框过程图解
2020/02/14 Python
python利用appium实现手机APP自动化的示例
2021/01/26 Python
conda安装tensorflow和conda常用命令小结
2021/02/20 Python
YSL圣罗兰美妆官方旗舰店:购买YSL口红
2018/04/16 全球购物
酷瑞网络科技面试题
2012/03/30 面试题
求职推荐信范文
2013/12/01 职场文书
教师自我鉴定范文
2014/03/20 职场文书
事业单位年度考核评语
2014/12/31 职场文书
入党积极分子培养人意见
2015/06/02 职场文书
MySQL修改默认引擎和字符集详情
2021/09/25 MySQL