rest_framework:url控制
- 一、基本路由(原始方式)
- 二、半自动路由(视图继承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控制的更多相关文章
- rest-framework解析器,url控制,分页,响应器,渲染器,版本控制
解析器 1.json解析器 发一个json格式的post请求.后台打印: request_data---> {'title': '北京折叠'} request.POST---> <Q ...
- Django框架深入了解_04(DRF之url控制、解析器、响应器、版本控制、分页)
一.url控制 基本路由写法:最常用 from django.conf.urls import url from django.contrib import admin from app01 impo ...
- REST framework之URL控制
REST framework之URL控制 一 自定义路由 1.1 原始方式 from django.conf.urls import url from app01 import views urlpa ...
- DRF url控制 解析器 响应器 版本控制 分页(常规分页,偏移分页,cursor游标分页)
url控制 第二种写法(只要继承了ViewSetMixin) url(r'^pub/$',views.Pub.as_view({'get':'list','post':'create'})), #获取 ...
- django中的url控制
1.django中的第一个控件:url控制 (路由分发) urls.py:请求路径与视图函数的之间的关系 步骤: 1.首先是要配置环境, 2.其次就是引路径 3.在视图的文件夹里面写相应的函 ...
- web项目自定义路由_实现静态资源URL控制
前言: IIS会默认把:图片.JS.HTML.CSS这些文件当成静态资源处理,为了减少服务器压力,默认这些静态资源是不走URL路由规则控制的. 作为小白及初学者,本人对这些了解甚少,补充基础知识吧: ...
- uniGUI试用笔记(十五)通过URL控制参数
通过URL代入参数,在代码中读取,如: http://localhost:8501/?ServerPort=212&&ServerIP=192.168.31.12 在代码中可以通过: ...
- ci url 控制 查询 通过路由 控制返回 视图的结果
http://192.168.2.102/fastdatav/ChkUrl/daily/G8 http://192.168.2.102/fastdatav/ChkUrl/daily/ 放在 试图 控 ...
- uniGUI之通过URL控制参数(25)
通过URL代入参数,在代码中读取,如: http://localhost:8077/?ServerPort=212&&ServerIP=192.168.31.12 procedure ...
随机推荐
- Orleans[NET Core 3.1] 学习笔记(四)( 3 )监控Orleans Silo的方式 OrleansDashboard
简介 Orleans用起来的确很爽,更爽的是咱们有能监控它的工具. OrleansDashboard 这个工具是一个可视化的Silo监控工具,Silo和Grain的活跃状态一目了然,各个接口的响应速度 ...
- Python之write与writelines区别
一.传入的参数类型要求不同: 1. file.write(str)需要传入一个字符串做为参数,否则会报错. write( "字符串") with open('20200222.tx ...
- 【seata源码学习】001 - seata-server的配置读取和服务注册
github, seata vergilyn seata-fork seata.io zh-cn docs (PS. 随缘看心情写,坚持不了几天.文章还是写的超级的烂,排版也奇差无比~~~~ 脑壳疼~ ...
- 服务器控件Repeater
在使用aspx开发中,如果一个页面做纯数据展示,Repeater会比GridView更适合,因为它是轻量级的 下面是最基本的用法: aspx: <table> <asp:Repea ...
- maven的核心概念——聚合
第十六章聚合 16.1 为什么要使用聚合 将多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能够生效.修改源码后也需要逐个手动进行clean操作.而使用了聚合之后就可以批量进行Maven工程的安装 ...
- 吴裕雄--天生自然HADOOP操作实验学习笔记:hbase学生选课案例
实验目的 复习hbase的shell操作和javaAPI操作 了解javaWeb项目的MVC设计 学会dao(数据库访问对象)和service层的代码编写规范 学会设计hbase表格 实验原理 前面我 ...
- MacOs使用CleanMyMac X清除可清除空间
写在前面 本文介绍如何使用CleanMyMac X清除可清除的空间 可以看到,可清除的空间达到了125.79GB,虽然说不影响系统的使用,但是在使用时间机器进行备份的时候,仍然会将可清除空间当成备份的 ...
- hdu 1087 Super Jumping!(类最长上升子序列)
题意:在一组数中选取一个上升子序列,使得这个子序列的和最大. 解:和最长上升子序列dp过程相似,设dp[i]为以第i位为结尾最大和,那么dp[i]等于max(dp[0],dp[1],,,,,dp[i- ...
- F. Moving Points
https://codeforces.com/contest/1311/problem/F 这是一道线段树类型的题: 可以用权值线段树或者树状数组来解: 所以,我们可以分为两部分,第一部分是计算出到当 ...
- ArcMap 导出Table数据到Excel