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的另外几种语言实现
Jan 29 Python
Python实现的数据结构与算法之基本搜索详解
Apr 22 Python
举例讲解如何在Python编程中进行迭代和遍历
Jan 19 Python
详解python3百度指数抓取实例
Dec 12 Python
Python编程之黑板上排列组合,你舍得解开吗
Oct 30 Python
Django教程笔记之中间件middleware详解
Aug 01 Python
对python内置map和six.moves.map的区别详解
Dec 19 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
Oct 12 Python
django框架ModelForm组件用法详解
Dec 11 Python
Django实现celery定时任务过程解析
Apr 21 Python
pyqt5 textEdit、lineEdit操作的示例代码
Aug 12 Python
Python使用eval函数执行动态标表达式过程详解
Oct 17 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
查找mysql字段中固定字符串并替换的几个方法
2012/09/23 PHP
php基于openssl的rsa加密解密示例
2016/07/11 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
Packer 3.0 JS压缩及混淆工具 下载
2007/05/03 Javascript
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
2011/07/15 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
2014/05/28 Javascript
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
jQuery中replaceWith()方法用法实例
2014/12/25 Javascript
jquery调取json数据实现省市级联的方法
2015/01/29 Javascript
jQuery实现的进度条效果
2015/07/15 Javascript
apply和call方法定义及apply和call方法的区别
2015/11/15 Javascript
vue3.0 搭建项目总结(详细步骤)
2019/05/20 Javascript
[06:01]刀塔次级联赛top10第一期
2014/11/07 DOTA
[53:36]Liquid vs VP Supermajor决赛 BO 第三场 6.10
2018/07/05 DOTA
python正则表达式去掉数字中的逗号(python正则匹配逗号)
2013/12/25 Python
Python功能键的读取方法
2015/05/28 Python
Python学习小技巧之列表项的拼接
2017/05/20 Python
python数据抓取分析的示例代码(python + mongodb)
2017/12/25 Python
Python实现的特征提取操作示例
2018/12/03 Python
python生成带有表格的图片实例
2019/02/03 Python
让你的Python代码实现类型提示功能
2019/11/19 Python
Django 删除upload_to文件的步骤
2020/03/30 Python
Python学习之路安装pycharm的教程详解
2020/06/17 Python
python中yield的用法详解
2021/01/13 Python
详解html5页面 rem 布局适配方法
2018/01/12 HTML / CSS
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
巴西最大的珠宝连锁店:Vivara
2019/04/18 全球购物
美体小铺印度官网:The Body Shop印度
2019/10/17 全球购物
澳大利亚家具商店:Freedom
2020/12/17 全球购物
企业党员个人自我评价
2014/09/20 职场文书
医药公司开票员岗位职责
2015/04/15 职场文书
警示教育观后感
2015/06/17 职场文书
实验室安全管理制度
2015/08/05 职场文书
初中地理教学反思
2016/02/19 职场文书
2016年感恩父亲节活动总结
2016/04/01 职场文书
Python 第三方库 openpyxl 的安装过程
2022/12/24 Python