• 一、基本路由(原始方式)
  • 二、半自动路由(视图继承ModelViewSet)
  • 三、自动路由(自动生成路由)

准备工作:

  models中创建一张表,默认使用sqlite数据库,更新表

  新增测试数据

加载rest_framework应用

方式一:

手动设置路由:

编辑视图:

  1,加载模块

  2、设置视图

设置路由:

  

创建一个文件:app01Serializer(名字自定义)

  1. # app01Serializer.py
  2.  
  3. from rest_framework import serializers
  4. from app01 import models
  5. 调用表publish的所有字段
  6. class PublishSerializers(serializers.ModelSerializer):
  7. class Meta:
  8. # 调用所有数据
  9. model=models.Publish
  10. fields='__all__'
         # 设置前端显示那些字段
         # fields=('id','name')
         # 前端不显示那些字段
         # exclude=('id',)
         # 当表有关联的时候可以添加深度
         # depth =1

编辑视图:

  写get获取数据和post数据方法

  

  1. # views.py
  2. from rest_framework.views import APIView
  3. from rest_framework.response import Response
  4. from app01 import models
  5. # 引用上个文件中的BookSerializer类
  6. from app01.app01Serializer import BookSerializer
  7.  
  8. class Books(APIView):
  9. def get(self,request):
  10. books = models.Book.objects.all()
  11. # 当序列化一条数据的时候many=True可以不写,序列化多条数据的时候(也就是queryset对象)必须要写
  12. bookser=BookSerializer(books,many=True)
  13. print(type(bookser.data))
  14. return Response(bookser.data)
  15. def post(self,request):
  16. bookser=BookSerializer(data=request.data)
  17. if bookser.is_valid():
  18. bookser.save()
  19. return Response()

页面访问:

post数据:

注意:查询数据的时候只能查询所有数据,不能查询单个数据

 想要可以查询单个数据需要重新定义路由,重新写对应的视图

单独对数据进行查询新增删除的借口:

  1. url(r'publish/(?P<pk>\d+)/$',views.PublishOnlyView.as_view()),
    编辑视图:
  1. class PublishOnlyView(APIView):
  2. def get(self,request,pk):
  3. publish_list = models.Publish.objects.filter(pk=pk).first()
  4. ps=PublishSerializers(publish_list,many=False)
  5. return Response(ps.data)
  1.   def post(self,request,pk):
      publish_list = models.Publish.objects.filter(pk=pk).first()
      ps = PublishSerializers(data=request.data,instance=publish_list)
      if ps.is_valid():
      ps.save()
      return Response(ps.data)
      else:
      return Response(ps.errors)
      def delete(self,request,pk):
       models.Publish.objects.filter(pk=pk).delete()
      return Response("")

第二种:mixin类和generice类编写视图

路由:

  1. url(r'^publish/$',views.PublishView.as_view()),
  2. url(r'publish/(?P<pk>\d+)/$',views.PublishDetailView.as_view()),

视图:

  1. from rest_framework.mixins import CreateModelMixin,RetrieveModelMixin,ListModelMixin,UpdateModelMixin,DestroyModelMixin
  2. from rest_framework.generics import GenericAPIView
  3. class PublishView(ListModelMixin,CreateModelMixin,GenericAPIView):
  4. queryset=models.Publish.objects.all()
  5. serializer_class=PublishSerializers
  6.  
  7. def get(self, request):
  8. return self.list(request)
  9.  
  10. def post(self, request):
  11. return self.create(request)
  12.  
  13. class PublishDetailView(RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin,GenericAPIView):
  14. queryset=models.Publish.objects.all()
  15. serializer_class=PublishSerializers
  16. def get(self,request,*args,**kwargs):
  17. return self.retrieve(request,*args,**kwargs)
  18. def put(self,request,*args,**kwargs):
  19. return self.update(request,*args,**kwargs)
  20. def delete(self,request,*args,**kwargs):
  21. return self.destroy(request,*args,**kwargs)

实现效果:

查询所有数据:可以新增数据,不需要通过json方式新增,可以通过输入框新增数据

单条数据:查询,修改,修改数据中会在输入框中显示原数据,删除数据

第三种:使用generics 下ListCreateAPIView,RetrieveUpdateDestroyAPIView

url:

  1. url(r'^publish/$',views.PublishView.as_view()),
  2. url(r'publish/(?P<pk>\d+)/$',views.PublishDetailView.as_view()),

视图:

  1. from rest_framework.generics import ListCreateAPIView,RetrieveUpdateDestroyAPIView
  2. class PublishView(ListCreateAPIView):
  3. queryset=models.Publish.objects.all()
  4. serializer_class=PublishSerializers
  5.  
  6. class PublishDetailView(RetrieveUpdateDestroyAPIView):
  7. queryset=models.Publish.objects.all()
  8. serializer_class=PublishSerializers

四、使用ModelViewSet

url(根据需要添加功能):

  1. url(r'^publish/$', views.PublishView.as_view({'get': 'list', 'post': 'create'})),
  2. url(r'^publish/(?P<pk>\d+)/$',views.PublishView.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})),

视图:

  1. from rest_framework.viewsets import ModelViewSet
  2. class PublishView(ModelViewSet):
      # 获取所有数据
  3. queryset=models.Publish.objects.all()
  4. serializer_class=PublishSerializers

rest_framework:url控制的更多相关文章

  1. rest-framework解析器,url控制,分页,响应器,渲染器,版本控制

    解析器 1.json解析器 发一个json格式的post请求.后台打印: request_data---> {'title': '北京折叠'} request.POST---> <Q ...

  2. Django框架深入了解_04(DRF之url控制、解析器、响应器、版本控制、分页)

    一.url控制 基本路由写法:最常用 from django.conf.urls import url from django.contrib import admin from app01 impo ...

  3. REST framework之URL控制

    REST framework之URL控制 一 自定义路由 1.1 原始方式 from django.conf.urls import url from app01 import views urlpa ...

  4. DRF url控制 解析器 响应器 版本控制 分页(常规分页,偏移分页,cursor游标分页)

    url控制 第二种写法(只要继承了ViewSetMixin) url(r'^pub/$',views.Pub.as_view({'get':'list','post':'create'})), #获取 ...

  5. django中的url控制

    1.django中的第一个控件:url控制  (路由分发) urls.py:请求路径与视图函数的之间的关系 步骤: 1.首先是要配置环境,   2.其次就是引路径   3.在视图的文件夹里面写相应的函 ...

  6. web项目自定义路由_实现静态资源URL控制

    前言: IIS会默认把:图片.JS.HTML.CSS这些文件当成静态资源处理,为了减少服务器压力,默认这些静态资源是不走URL路由规则控制的. 作为小白及初学者,本人对这些了解甚少,补充基础知识吧: ...

  7. uniGUI试用笔记(十五)通过URL控制参数

    通过URL代入参数,在代码中读取,如: http://localhost:8501/?ServerPort=212&&ServerIP=192.168.31.12 在代码中可以通过: ...

  8. ci url 控制 查询 通过路由 控制返回 视图的结果

    http://192.168.2.102/fastdatav/ChkUrl/daily/G8 http://192.168.2.102/fastdatav/ChkUrl/daily/ 放在 试图  控 ...

  9. uniGUI之通过URL控制参数(25)

    通过URL代入参数,在代码中读取,如: http://localhost:8077/?ServerPort=212&&ServerIP=192.168.31.12 procedure ...

随机推荐

  1. ES6中map数据结构

    key值可以任意值或对象,value值可以是任意值或对象 let json={ name:'eternity', skill:'java' }; let map=new Map(); map.set( ...

  2. 清北学堂—2020.1提高储备营—Day 4 afternoon(动态规划初步(一))

    qbxt Day 4 afternoon --2020.1.20 济南 主讲:顾霆枫 目录一览 1.动态规划初步 2.记忆化搜索 3.递推式动态规划 4.记忆话搜索与递推式动态规划的转化 5.状态转移 ...

  3. Unbuntu--安装VMware Tools

    实现虚拟机Ubuntu窗口自适应,以及与本地主机粘贴复制 一.安装VMware Tools 1.首先在虚拟机点击安装VMware tools,会在个人home目录下生成VMwareTools-10.3 ...

  4. opencv —— boxFilter、blur、GaussianBlur、medianBlur、bilateralFilter 线性滤波(方框滤波、均值滤波、高斯滤波)与非线性滤波(中值滤波、双边滤波)

    图像滤波,指在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像与处理中不可缺少的操作. 邻域算子,指利用给定像素及其周围的像素值,决定此像素的最终输出值的一种算子.线性邻域滤波器就是一种常 ...

  5. 【python基础语法】数字、布尔值(第1天课堂笔记)

    # 导入模块 import keyword # print语句将内容输出到控制台 print("hello world!") # pep8编码规范 # 代码快速格式化快捷键:ctr ...

  6. JN_0016:查找端口占用

    Windows查看端口占用   一. 查看所有进程占用的端口 在开始-运行-cmd,输入:netstat –ano 可以查看所有进程 二.查看占用指定端口的程序 当你在用tomcat发布程序时,经常会 ...

  7. Redis入门-01

    目录 使用场景 支持的数据类型 主从复制 原理 配置 哨兵机制 持久化 RDB(Redis Database) AOF(Append Only File) redis(Remote DIctionar ...

  8. HDU1163 - Eddy's digital Roots

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1163 九余数:一个数除于9所得到的余数,即模9得到的值 求九余数: 求出一个数的各位数字之和,如果是两 ...

  9. 关于form表单提交数据后不跳转页面+ajax接收返回值的处理

    1.前台的form表单建立,注意action.enctype的内容, 2.通过添加一个隐藏的iframe标签使form的target指向iframe来达到不跳转页面的效果,同时需要在js里获取ifra ...

  10. Spring-Cloud微服务踩坑

    @feignclient和@requestmapping混用的时候出错 重写springmvc扫描controller时不带有@feignclient才实例化 @Configuration @Cond ...