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中的字符串与字符串的输入输出
Mar 13 Python
利用python实现xml与数据库读取转换的方法
Jun 17 Python
python出现&quot;IndentationError: unexpected indent&quot;错误解决办法
Oct 15 Python
python3+PyQt5重新实现自定义数据拖放处理
Apr 19 Python
浅析python继承与多重继承
Sep 13 Python
pandas每次多Sheet写入文件的方法
Dec 10 Python
理想高通滤波实现Python opencv示例
Jan 30 Python
Windows系统下pycharm中的pip换源
Feb 23 Python
在python tkinter界面中添加按钮的实例
Mar 04 Python
python右对齐的实例方法
Jul 05 Python
filter使用python3代码进行迭代元素的实例详解
Dec 03 Python
pycharm 快速解决python代码冲突的问题
Jan 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
PHP查找数值数组中不重复最大和最小的10个数的方法
2015/04/20 PHP
WordPress中制作导航菜单的PHP核心方法讲解
2015/12/11 PHP
基于php判断客户端类型
2016/10/14 PHP
Yii框架中sphinx索引配置方法解析
2016/10/18 PHP
解决laravel(5.5)访问public报错的问题
2019/10/12 PHP
关于laravel5.5的定时任务详解(demo)
2019/10/23 PHP
Apache站点配置SSL强制跳转443
2021/03/09 Servers
基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼
2006/12/06 Javascript
juqery 学习之三 选择器 可见性 元素属性
2010/11/25 Javascript
js中split函数的使用方法说明
2013/12/26 Javascript
CSS3,HTML5和jQuery搜索框集锦
2014/12/02 Javascript
js中this的用法实例分析
2015/01/10 Javascript
jQuery插件datalist实现很好看的input下拉列表
2015/07/14 Javascript
Angularjs2不同组件间的通信实例代码
2017/05/06 Javascript
使用JavaScript实现点击循环切换图片效果
2017/09/03 Javascript
CSS3结合jQuery实现动画效果及回调函数的实例
2017/12/27 jQuery
vue实现图片加载完成前的loading组件方法
2018/02/05 Javascript
SVG实现时钟效果
2018/07/17 Javascript
浅谈vue限制文本框输入数字的正确姿势
2019/09/02 Javascript
深入学习Vue nextTick的用法及原理
2019/10/08 Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
2020/11/09 Javascript
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
python加载自定义词典实例
2019/12/06 Python
python 消除 futureWarning问题的解决
2019/12/25 Python
Python Selenium安装及环境配置的实现
2020/03/17 Python
俄罗斯奢侈品牌衣服、鞋子和配饰的在线商店:INTERMODA
2020/07/17 全球购物
用C或者C++语言实现SOCKET通信
2015/02/24 面试题
大学新生军训个人的自我评价
2013/10/03 职场文书
酒店管理毕业生自荐信
2013/10/24 职场文书
《长城和运河》教学反思
2014/04/14 职场文书
反四风个人对照检查材料思想汇报
2014/09/25 职场文书
2014光棍节大学生联谊活动方案
2014/10/10 职场文书
2014年减负工作总结
2014/12/10 职场文书
读后感作文评语
2014/12/25 职场文书
患者身份识别制度
2015/08/06 职场文书
优秀的商业计划书,让融资一步到位
2019/05/07 职场文书