• 一、基本路由(原始方式)
  • 二、半自动路由(视图继承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. 消息总线:Spring Cloud Stream

    最近在学习Spring Cloud的知识,现将消息总线:Spring Cloud Stream 的相关知识笔记整理如下.[采用 oneNote格式排版]

  2. Git常用命令 - 随时更新

    1. 配置用户信息 git config --global user.name <name> git config --global user.email <email_addres ...

  3. .net core 3.0 swagger

    1.安装swagger包 2.startup里configservers Configure 3.可能出现的错误 提示error  xxxxnot found 由于我创建的webapi是restful ...

  4. 00 - PXE | 环境准备

    00 - PXE | 环境准备 TFTP PXE 1. TFTP服务搭建 安装环境Centos7.3 1.1 安装 # yum install xinetd # yum install tftp # ...

  5. powerdesigner两数据库对比

    1. powerdesigner两数据库对比 1.1. 问题 position属性不一致,但这并不影响两数据库的结构,我们不需要把它当警告显示出来 1.2. 解决办法

  6. 免费生成二维码接口,可直接嵌入到web项目中,附带嵌入方法,任意颜色二维码,任意大小二维码!

    在线体验连接:http://www.zhaimaojun.top/qrcode/ 你是否在项目中寻找方便而且免费的可以直接嵌入到项目中的二维码生成工具呢?你找到了这里,说明你已经找到了!不要犹豫直接拿 ...

  7. html颜色名颜色代码对照表

  8. 剑指offer-面试题18-删除链表中重复的节点-链表

    /* 题目: 删除链表中重复的节点 */ /* 思路: 1.声明一个头节点head,即使首元节点被删除,也可返回head->next 2.声明两个指针, 一个指针qNode指向确定不会删除的链表 ...

  9. link(外部资源关系)

    规定了外部资源与当前文档的关系 常于链接样式表<link href="/media/examples/link-element-example.css" rel=" ...

  10. ntoskrnl.exe导致蓝屏解决方法

    背景 博主电脑近段时间经常蓝屏,主要表现在开关机.重启等操作上: 使用 BlueScreenView 查看C:\Windows\Minidump下的bmp文件,关键信息如下: 解决方法 查阅网上的各种 ...