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端口扫描系统实现方法
Nov 19 Python
Python中字符串格式化str.format的详细介绍
Feb 17 Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
Mar 13 Python
python xlsxwriter库生成图表的应用示例
Mar 16 Python
完美解决在oj中Python的循环输入问题
Jun 25 Python
Python3自动签到 定时任务 判断节假日的实例
Nov 13 Python
python进行文件对比的方法
Dec 24 Python
python编写简单端口扫描器
Sep 04 Python
python字符串格式化方式解析
Oct 19 Python
Python numpy线性代数用法实例解析
Nov 15 Python
python文件处理fileinput使用方法详解
Jan 02 Python
Python如何加载模型并查看网络
Jul 15 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
多重?l件?合查?(一)
2006/10/09 PHP
php mssql 日期出现中文字符的解决方法
2009/03/10 PHP
PHP 图片水印类代码
2012/08/27 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
2016/04/11 PHP
详解php实现页面静态化原理
2017/06/21 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
2018/05/23 PHP
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
xml转json的js代码
2012/08/28 Javascript
让图片旋转任意角度及JQuery插件使用介绍
2013/03/20 Javascript
javascript实现的DES加密示例
2013/10/30 Javascript
js分页代码分享
2014/04/28 Javascript
js跨域资源共享 基础篇
2016/07/02 Javascript
基于JQuery的Ajax方法使用详解
2017/08/16 jQuery
JS实现显示当前日期的实例代码
2018/07/03 Javascript
vue.js实现的全选与全不选功能示例【基于elementui】
2018/12/03 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
使用typescript改造koa开发框架的实现
2020/02/04 Javascript
[02:00]最后,我终于出了辉耀
2018/03/27 DOTA
[01:16:13]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第一场 2月22日
2021/03/11 DOTA
Windows下python2.7.8安装图文教程
2016/05/26 Python
Python设计模式之职责链模式原理与用法实例分析
2019/01/11 Python
Python嵌套式数据结构实例浅析
2019/03/05 Python
Python调用.NET库的方法步骤
2019/12/27 Python
实例教程 一款纯css3实现的数字统计游戏
2014/11/10 HTML / CSS
美国指甲油品牌:Deco Miami
2017/01/30 全球购物
美国零售商店:Blue&Cream
2017/04/07 全球购物
奥地利票务门户网站:oeticket.com
2019/12/31 全球购物
Java中实现多态的机制
2015/08/09 面试题
管理科学大学生求职信
2013/11/13 职场文书
会计专业的自荐信
2013/12/12 职场文书
推广普通话标语
2014/06/27 职场文书
观看建国大业观后感
2015/06/01 职场文书
微信早安问候语
2015/11/10 职场文书
三八红旗手先进事迹材料(2016推荐版)
2016/02/25 职场文书
2016小学优秀教师先进事迹材料
2016/02/26 职场文书
部分武汉产收音机展览
2022/04/07 无线电