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

准备工作:

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

  新增测试数据

加载rest_framework应用

方式一:

手动设置路由:

编辑视图:

  1,加载模块

  2、设置视图

设置路由:

  

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

# app01Serializer.py

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

编辑视图:

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

  

# views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from app01 import models
# 引用上个文件中的BookSerializer类
from app01.app01Serializer import BookSerializer class Books(APIView):
def get(self,request):
books = models.Book.objects.all()
# 当序列化一条数据的时候many=True可以不写,序列化多条数据的时候(也就是queryset对象)必须要写
bookser=BookSerializer(books,many=True)
print(type(bookser.data))
return Response(bookser.data)
def post(self,request):
bookser=BookSerializer(data=request.data)
if bookser.is_valid():
bookser.save()
return Response()

页面访问:

post数据:

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

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

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

url(r'publish/(?P<pk>\d+)/$',views.PublishOnlyView.as_view()),
编辑视图:
class PublishOnlyView(APIView):
def get(self,request,pk):
publish_list = models.Publish.objects.filter(pk=pk).first()
ps=PublishSerializers(publish_list,many=False)
return Response(ps.data)
  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类编写视图

路由:

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

视图:

from rest_framework.mixins import CreateModelMixin,RetrieveModelMixin,ListModelMixin,UpdateModelMixin,DestroyModelMixin
from rest_framework.generics import GenericAPIView
class PublishView(ListModelMixin,CreateModelMixin,GenericAPIView):
queryset=models.Publish.objects.all()
serializer_class=PublishSerializers def get(self, request):
return self.list(request) def post(self, request):
return self.create(request) class PublishDetailView(RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin,GenericAPIView):
queryset=models.Publish.objects.all()
serializer_class=PublishSerializers
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)

实现效果:

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

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

第三种:使用generics 下ListCreateAPIView,RetrieveUpdateDestroyAPIView

url:

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

视图:

from rest_framework.generics import ListCreateAPIView,RetrieveUpdateDestroyAPIView
class PublishView(ListCreateAPIView):
queryset=models.Publish.objects.all()
serializer_class=PublishSerializers class PublishDetailView(RetrieveUpdateDestroyAPIView):
queryset=models.Publish.objects.all()
serializer_class=PublishSerializers

四、使用ModelViewSet

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

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

视图:

from rest_framework.viewsets import ModelViewSet
class PublishView(ModelViewSet):
  # 获取所有数据
queryset=models.Publish.objects.all()
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. Orleans[NET Core 3.1] 学习笔记(四)( 3 )监控Orleans Silo的方式 OrleansDashboard

    简介 Orleans用起来的确很爽,更爽的是咱们有能监控它的工具. OrleansDashboard 这个工具是一个可视化的Silo监控工具,Silo和Grain的活跃状态一目了然,各个接口的响应速度 ...

  2. Python之write与writelines区别

    一.传入的参数类型要求不同: 1. file.write(str)需要传入一个字符串做为参数,否则会报错. write( "字符串") with open('20200222.tx ...

  3. 【seata源码学习】001 - seata-server的配置读取和服务注册

    github, seata vergilyn seata-fork seata.io zh-cn docs (PS. 随缘看心情写,坚持不了几天.文章还是写的超级的烂,排版也奇差无比~~~~ 脑壳疼~ ...

  4. 服务器控件Repeater

    在使用aspx开发中,如果一个页面做纯数据展示,Repeater会比GridView更适合,因为它是轻量级的 下面是最基本的用法:  aspx: <table> <asp:Repea ...

  5. maven的核心概念——聚合

    第十六章聚合 16.1 为什么要使用聚合 将多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能够生效.修改源码后也需要逐个手动进行clean操作.而使用了聚合之后就可以批量进行Maven工程的安装 ...

  6. 吴裕雄--天生自然HADOOP操作实验学习笔记:hbase学生选课案例

    实验目的 复习hbase的shell操作和javaAPI操作 了解javaWeb项目的MVC设计 学会dao(数据库访问对象)和service层的代码编写规范 学会设计hbase表格 实验原理 前面我 ...

  7. MacOs使用CleanMyMac X清除可清除空间

    写在前面 本文介绍如何使用CleanMyMac X清除可清除的空间 可以看到,可清除的空间达到了125.79GB,虽然说不影响系统的使用,但是在使用时间机器进行备份的时候,仍然会将可清除空间当成备份的 ...

  8. hdu 1087 Super Jumping!(类最长上升子序列)

    题意:在一组数中选取一个上升子序列,使得这个子序列的和最大. 解:和最长上升子序列dp过程相似,设dp[i]为以第i位为结尾最大和,那么dp[i]等于max(dp[0],dp[1],,,,,dp[i- ...

  9. F. Moving Points

    https://codeforces.com/contest/1311/problem/F 这是一道线段树类型的题: 可以用权值线段树或者树状数组来解: 所以,我们可以分为两部分,第一部分是计算出到当 ...

  10. ArcMap 导出Table数据到Excel