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 中split 和 strip的实例详解
Jul 12 Python
Python带动态参数功能的sqlite工具类
May 26 Python
python实现将一个数组逆序输出的方法
Jun 25 Python
解决Pycharm出现的部分快捷键无效问题
Oct 22 Python
python requests 库请求带有文件参数的接口实例
Jan 03 Python
OpenCV-Python 摄像头实时检测人脸代码实例
Apr 30 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
Aug 20 Python
python文件绝对路径写法介绍(windows)
Dec 25 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
Feb 26 Python
Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码
May 28 Python
Keras实现DenseNet结构操作
Jul 06 Python
python3读取文件指定行的三种方法
May 24 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
玩转图像函数库―常见图形操作
2006/09/03 PHP
PHP 面向对象 PHP5 中的常量
2010/05/05 PHP
php cookies中删除的一般赋值方法
2011/05/07 PHP
Codeigniter整合Tank Auth权限类库详解
2014/06/12 PHP
PHP实现通用alert函数的方法
2015/03/11 PHP
msn上的tab功能Firefox对childNodes处理的一个BUG
2008/01/21 Javascript
Jquery Ajax.ashx 高效分页实现代码
2009/10/20 Javascript
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
JavaScript实现输入框(密码框)出现提示语
2016/01/12 Javascript
javascript获取select标签选中的值
2016/06/04 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
2016/09/17 Javascript
jQuery 选择器(61种)整理总结
2016/09/26 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
基于JS设计12306登录页面
2016/12/28 Javascript
原生js实现吸顶效果
2017/03/13 Javascript
Angular 4.x 动态创建表单实例
2017/04/25 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
vue devtools的安装与使用教程
2018/08/08 Javascript
Vue开发之watch监听数组、对象、变量操作分析
2019/04/25 Javascript
layui下拉框获取下拉值(select)的例子
2019/09/10 Javascript
jQuery使用ajax传递json对象到服务端及contentType的用法示例
2020/03/12 jQuery
解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题
2020/07/21 Javascript
wxPython窗口中文乱码解决方法
2014/10/11 Python
给Python的Django框架下搭建的BLOG添加RSS功能的教程
2015/04/08 Python
Python实现将json文件中向量写入Excel的方法
2018/03/26 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
python 爬虫之selenium可视化爬虫的实现
2020/12/04 Python
麦德龙官方海外旗舰店:德国麦德龙超市
2017/12/23 全球购物
巴西最大的玩具连锁店:Ri Happy
2020/06/17 全球购物
新闻专业大学生找工作的自我评价
2013/10/30 职场文书
批评与自我批评材料
2014/02/15 职场文书
2015教师节师德演讲稿
2015/03/19 职场文书
幼儿园元旦主持词
2015/07/06 职场文书
初级职称评定工作总结
2015/08/13 职场文书
HTML静态页面获取url参数和UserAgent的实现
2022/08/05 HTML / CSS